mirror of
https://github.com/php/doc-pl.git
synced 2026-03-23 22:52:11 +01:00
I was going to translate more but it turns out the FAQ is very outdated, so let's start with other priorities first.
375 lines
13 KiB
XML
375 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 0a3a57fae02391db80baeba98c9a071dc2760889 Maintainer: sobak Status: ready -->
|
|
<chapter xml:id="faq.using" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<title>Użycie PHP</title>
|
|
<titleabbrev>Użycie PHP</titleabbrev>
|
|
|
|
<para>
|
|
Ta sekcja zbiera wiele powszechnych błędów, które możesz napotkać
|
|
podczas pisania skryptów PHP.
|
|
</para>
|
|
|
|
<qandaset>
|
|
|
|
<qandaentry xml:id="faq.using.parameterorder">
|
|
<!-- TODO: Mention named arguments -->
|
|
<question>
|
|
<para>
|
|
Nie mogę zapamiętać kolejności parametrów funkcji PHP, jest losowa?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
PHP jest klejem, który łączy setki bibliotek zewnętrznych, więc czasami
|
|
faktycznie powstaje bałagan. Jednak istnieje prosta i pomocna reguła:
|
|
</para>
|
|
<para>
|
|
Parametry w <link linkend="book.array">funkcjach tablic</link> mają kolejność
|
|
as "<emphasis>needle, haystack</emphasis>" (igła, stóg siana), podczas
|
|
gdy w <link linkend="book.strings">funkcjach ciągów znaków</link> jest na odwrót,
|
|
a więc "<emphasis>haystack, needle</emphasis>".
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.anyform">
|
|
<question>
|
|
<para>
|
|
Chciałbym napisać ogólny skrypt PHP, który może obsłużyć dane przychodzące
|
|
z dowolnego formularza. Skąd mam wiedzieć jakie zmienne metody POST są dostępne?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
PHP oferuje wiele <link linkend="language.variables.predefined">
|
|
zmiennych predefiniowanych</link>, takich jak superglobalna zmienna <varname>$_POST</varname>.
|
|
Możesz przejść pętlą po <varname>$_POST</varname>
|
|
jako że jest to tablica asocjacyjna wszystkich wartości wysłanych tą metodą. Przykładowo,
|
|
przeiterujmy się po wszystkich z nich używając &foreach;,
|
|
sprawdzając puste wartości konstrukcją <function>empty</function>
|
|
i wyświetlmy je.
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$puste = $post = array();
|
|
foreach ($_POST as $nazwaZmiennej => $wartoscZmiennej) {
|
|
if (empty($wartoscZmiennej)) {
|
|
$puste[$nazwaZmiennej] = $wartoscZmiennej;
|
|
} else {
|
|
$post[$nazwaZmiennej] = $wartoscZmiennej;
|
|
}
|
|
}
|
|
|
|
print "<pre>";
|
|
if (empty($puste)) {
|
|
print "Żadna z wartości wysłanych przez POST nie jest pusta, wysłano:\n";
|
|
var_dump($post);
|
|
} else {
|
|
print "Mamy " . count($empty) . " pustych wartości\n";
|
|
print "Wysłano:\n"; var_dump($post);
|
|
print "Puste:\n"; var_dump($empty);
|
|
exit;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.addslashes">
|
|
<!-- TODO Probably should mention not doing this... -->
|
|
<question>
|
|
<para>
|
|
Muszę przekonwertować wszystkie apostrofy (') do odwrotnego slasha,
|
|
po którym jest apostrof (\'). Jak mogę to zrobić wyrażeniem
|
|
regularnym? Chciałbym też zamienić " na \" i
|
|
\ na \\.
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Zakładając, że robisz to na potrzeby bazy danych, skorzystaj z mechanizmu escape'owania
|
|
dostarczonego razem z bazą danych. Przykładowo użyj
|
|
<function>mysql_real_escape_string</function> dla MySQL i
|
|
<function>pg_escape_string</function> dla PostgreSQL. Istnieją
|
|
też ogólne funkcje <function>addslashes</function> i
|
|
<function>stripslashes</function>, które były
|
|
stosowane bardziej powszechnie w starym kodzie PHP.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.wrong-order">
|
|
<question>
|
|
<para>
|
|
Przy takim kodzie wynik jest wyświetlany w złej
|
|
kolejności:
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
function funkcja($argument)
|
|
{
|
|
echo $argument + 10;
|
|
}
|
|
$zmienna = 10;
|
|
echo "funkcja($zmienna) = " . funkcja($zmienna);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
o co chodzi?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Aby móc użyć wyniku funkcji w wyrażeniu (takim
|
|
jak konkatenacja z innymi ciągami znaków, musisz zwrócić wartość
|
|
używając <function>return</function>, a nie
|
|
wyświetlić ją.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.newlines">
|
|
<question>
|
|
<para>
|
|
Hej, co stało się z moimi przełamaniami linii?
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<pre>
|
|
<?php echo "To powinna być pierwsza linia."; ?>
|
|
<?php echo "To powinno się pokazać po pierwszej linii powyżej."; ?>
|
|
</pre>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
W PHP zakończeniem bloku kodu jest "?>" albo
|
|
"?>\n" (gdzie \n oznacza nową linię). Tak więc w przykładzie powyżej,
|
|
wyświetlone zdania będą w jednej linii, ponieważ PHP pomija
|
|
nowe linie po zakończeniu bloku. To oznacza, że musisz
|
|
dodać dodatkową nową linię po każdym bloku kodu PHP, aby
|
|
wynik wyświetlił się w nowej linii.
|
|
</para>
|
|
<para>
|
|
Dlaczego PHP tak robi? Ponieważ kiedy formatowany jest normalny HTML,
|
|
to zachowanie zazwyczaj ułatwia życie, gdyż zazwyczaj nie chciałbyś tej nowej linii,
|
|
ale musiałbyś stworzyć ekstremalnie długie linie kodu PHP lub uczynić
|
|
wynikowe źródło strony nieczytelnym, aby móc osiągnąć taki efekt.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.headers-sent">
|
|
<question>
|
|
<para>
|
|
Dostaję komunikat 'Warning: Cannot send session cookie - headers already
|
|
sent...' lub 'Cannot add header information - headers already sent...'.
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Funkcje <function>header</function>, <function>setcookie</function>,
|
|
i <link linkend="ref.session">funkcje
|
|
sesji</link> muszą dodać nagłówki do strumienia wyjścia, ale nagłówki mogą
|
|
być wysłane tylko przez jakąkolwiek inną treścią. Skrypt nie może tworzyć żadnego wyjścia
|
|
przed użyciem tych funkcji, takiego jak kod HTML. Funkcja
|
|
<function>headers_sent</function> pozwala sprawdzić, czy Twój skrypt wysłał już
|
|
nagłówki. Możesz też zobaczyć dokumentację <link linkend="ref.outcontrol">funkcji
|
|
kontroli wyjścia</link>.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.header">
|
|
<question>
|
|
<para>
|
|
Muszę uzyskać bezpośredni dostęp do informacji z nagłówków.
|
|
Jak mogę to zrobić?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Funkcja <function>getallheaders</function> pozwala to zrobić jeśli
|
|
uruchamiasz kod PHP jako moduł apache. Tak więc następujący fragment
|
|
kodu pokaże Ci wszystkie nagłówki żądania:
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$naglowki = getallheaders();
|
|
foreach ($naglowki as $name => $content) {
|
|
echo "naglowki[$name] = $content<br />\n";
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
Zobacz też
|
|
<function>apache_lookup_uri</function>,
|
|
<function>apache_response_headers</function> oraz
|
|
<function>fsockopen</function>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.authentication">
|
|
<question>
|
|
<para>
|
|
Kiedy próbuję użyć autentykacji z IIS, otrzymuję błąd "No Input file specified".
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Winny tutaj jest model bezpieczeństwa IIS. To jest wspólny
|
|
problem wszystkich programów CGI uruchamianych pod IIS. Obejściem
|
|
jest stworzenie zwykłego pliku HTML (nie parsowanego przez PHP) jako
|
|
strony wejściowej do autentykowanego katalogu. Następnie użyj tagu META
|
|
aby przekierować do strony PHP lub umieść link do strony PHP. PHP rozpozna
|
|
wtedy poprawnie próbę autentykacji. Nie powinno mieć to wpływu na inne
|
|
serwery NT. Aby uzyskać więcej informacji, zobacz:
|
|
<link xlink:href="&url.iis;">&url.iis;</link> oraz sekcję manuala
|
|
poświęconą <link linkend="features.http-auth">Autentykacji HTTP
|
|
</link>.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.iis.sharing">
|
|
<question>
|
|
<para>
|
|
Windows: nie mogę uzyskać dostępu do plików udostępnionych na innym komputerze przez IIS
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Musisz zmienić <literal>Go to Internet Information
|
|
Services</literal>. Znajdź swój plik PHP i przejdź do jego właściwości.
|
|
Następnie przejdź do karty <literal>File Security</literal>, <literal>Edit -<
|
|
Anonymous access and authentication control</literal>.
|
|
</para>
|
|
<para>
|
|
Możesz naprawić ten problem odznaczając <literal>Anonymous
|
|
Access</literal> i pozostawiając <literal>Integrated Window
|
|
Authentication</literal> zaznaczone lub zaznaczając <literal>Anonymous
|
|
Access</literal> i zmieniając użytkownika, jako że może nie mieć poprawnego
|
|
dostępu.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.mixml">
|
|
<question>
|
|
<para>
|
|
W jaki sposób mogę mieszać XML i PHP? Dostaję błąd
|
|
związany z moimi tagami <?xml!
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Aby osadzić <?xml bezpośrednio w kodzie PHP, będziesz musiał wyłączyć
|
|
krótkie znaczniki, ustawiając dyrektywę
|
|
<link linkend="ini.short-open-tag">short_open_tags</link> na
|
|
<literal>0</literal>. Nie możesz zmienić tej dyrektywy przy użyciu
|
|
<function>ini_set</function>. Niezależnie od tego czy
|
|
<link linkend="ini.short-open-tag">short_open_tags</link> jest włączone
|
|
czy nie, możesz też użyć kodu <literal><?php echo '<?xml'; ?></literal>.
|
|
Domyślna wartość dla tej dyrektywy to <literal>On</literal>.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.variables">
|
|
<question>
|
|
<para>
|
|
Gdzie mogę znaleźć pełną listę zmiennych dostępnych w PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Przeczytaj stronę podręcznika na temat <link linkend="language.variables.predefined">
|
|
zmiennych predefiniowanych</link>, jako że zawiera ona częściową listę predefiniowanych
|
|
zmiennych dostępnych dla Twojego skryptu. Pełna lista dostępnych
|
|
zmiennych (i więcej informacji) może być wyświetlona po wywołaniu
|
|
funkcji <function>phpinfo</function>. Przeczytaj też sekcję podręcznika o
|
|
section on <link linkend="language.variables.external">zmiennych
|
|
spoza PHP</link>, jako że opisuje ona najczęstsze scenariusze związane
|
|
z zewnętrznymi zmiennymi, taki jak formularze HTML, ciasteczka i adresy URL.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.freepdf">
|
|
<question>
|
|
<para>
|
|
Jak mogę wygenerować pliki PDF bez używania komercyjnych
|
|
bibliotek używających nie-wolnych licencji, takich jak
|
|
PDFLib? Szukam czegoś, co jest
|
|
darmowe i nie wymaga zewnętrznych bibliotek PDF.
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Istnieje kilka alternatyw napisanych PHP, takich jak
|
|
<link xlink:href="&url.pdf.fpdf;">FPDF</link> i
|
|
<link xlink:href="&url.pdf.tcpdf;">TCPDF</link>.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.using.shorthandbytes">
|
|
<question>
|
|
<para>
|
|
Kilka z dyrektyw konfiguracyjnych PHP może przyjąć skrócone wartości bajtów,
|
|
a nie tylko wartości typu <type>int</type>. Jakie są dostępne skrócone
|
|
wartości dla bajtów?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Dostępne opcje to K (dla kilobajtów), M (dla megabajtów) i G (dla
|
|
gigabajtów), a wszystkie z nich mogą być zapisane wielkimi bądź małymi literami.
|
|
Każda inna wartość jest interpretowana jak bajty. <literal>1M</literal> jest równe jednemu megabajtowi lub
|
|
<literal>1048576</literal> bajtom. <literal>1K</literal> jest równe jednemu
|
|
kilobajtowi lub <literal>1024</literal> bajtom. Ta skrócona notacja może
|
|
być użyta w &php.ini; oraz w funkcji <function>ini_set</function>.
|
|
Wartości numeryczne są rzutowane na typ <type>int</type>,
|
|
na przykład <literal>0.5M</literal> jest interpretowane jak <literal>0</literal>.
|
|
</para>
|
|
<note>
|
|
<title>kilobajty a kibibajty</title>
|
|
<para>
|
|
Notacja PHP opisuje jeden kilobajt jako odpowiadający 1024 bajtom, podczas gdy
|
|
standard <acronym>IEC</acronym> definiuje to jako kibibajt.
|
|
Podsumowując: k oraz K = 1024 bajty.
|
|
</para>
|
|
</note>
|
|
</answer>
|
|
</qandaentry>
|
|
</qandaset>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|