1
0
mirror of https://github.com/php/doc-pl.git synced 2026-03-23 22:52:11 +01:00
Files
archived-doc-pl/faq/using.xml
Maciej Sobaczewski 2d7d5e82e2 Translate some pages of the FAQ section
I was going to translate more but it turns out the FAQ is very outdated,
so let's start with other priorities first.
2024-10-27 22:13:44 +01:00

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 "?&gt;" albo
"?&gt;\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 -&lt;
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 &lt;?xml!
</para>
</question>
<answer>
<para>
Aby osadzić &lt;?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>&lt;?php echo '&lt;?xml'; ?&gt;</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
-->