cvs: phpdoc /pl Translators bookinfo.xml language-defs.ent language-snippets.ent preface.xml /pl/chapters install.xml intro.xml /pl/features
cookies.xml images.xml remote-files.xml /pl/functions http.xml mail.xml mysql.xml /pl/language basic-syntax.xml constants.xml expressions.xml
functions.xml oop.xml /pl/pear about.xml

From: Date: Tue, 23 Oct 2001 11:19:41 +0000
Subject: cvs: phpdoc /pl Translators bookinfo.xml language-defs.ent language-snippets.ent preface.xml /pl/chapters install.xml intro.xml /pl/features
cookies.xml images.xml remote-files.xml /pl/functions http.xml mail.xml mysql.xml /pl/language basic-syntax.xml constants.xml expressions.xml
functions.xml oop.xml /pl/pear about.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969338186@lists.php.net to get a copy of this message
leszek Tue Oct 23 07:19:41 2001 EDT Added files: /phpdoc/pl Translators bookinfo.xml language-defs.ent language-snippets.ent preface.xml /phpdoc/pl/chapters install.xml intro.xml /phpdoc/pl/features cookies.xml images.xml remote-files.xml /phpdoc/pl/functions http.xml mail.xml mysql.xml /phpdoc/pl/language basic-syntax.xml constants.xml expressions.xml functions.xml oop.xml /phpdoc/pl/pear about.xml Log: Imported already translated Polish manual

Index: phpdoc/pl/bookinfo.xml +++ phpdoc/pl/bookinfo.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <bookinfo id="bookinfo"> <authorgroup id="authors"> <author> <firstname>Stig</firstname><surname>S&aelig;ther Bakken</surname> </author> <author> <firstname>Alexander</firstname><surname>Aulbach</surname> </author> <author> <firstname>Egon</firstname><surname>Schmid</surname> </author> <author> <firstname>Jim</firstname><surname>Winstead</surname> </author> <author> <firstname>Lars Torben</firstname><surname>Wilson</surname> </author> <author> <firstname>Rasmus</firstname><surname>Lerdorf</surname> </author> <author> <firstname>Andrei</firstname><surname>Zmievski</surname> </author> <author> <firstname>Jouni</firstname><surname>Ahto</surname> </author> </authorgroup> <pubdate>&php.build-date;</pubdate> <authorgroup id="editors"> <editor> <firstname>Stig</firstname><surname>S&aelig;ther Bakken</surname> </editor> <editor> <firstname>Egon</firstname><surname>Schmid</surname> </editor> </authorgroup> <authorgroup id="translators"> <collab> <collabname>Leszek Krupiñski</collabname> </collab> <collab> <collabname>S³awomir Pucia</collabname> </collab> <collab> <collabname>Tomasz Wójtowicz</collabname> </collab> <collab> <collabname>Marcin D±browski</collabname> </collab> </authorgroup> <copyright> <year>1997</year> <year>1998</year> <year>1999</year> <year>2000</year> <year>2001</year> <holder>the PHP Documentation Group</holder> </copyright> <legalnotice id="copyright"> <title>Copyright</title> <simpara> Prawa autorskie do tego podrêcznika &copy; Copyright 1997, 1998, 1999, 2000, 2001 nale¿± do PHP Documentation Group. Lista cz³onków grupy znajduje siê na pierwszej stronie podrêcznika. </simpara> <simpara> Podrêcznik mo¿e byæ dystrybuowany zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation; Licencja w wersji 2 lub (do wyboru) dowolnej pó¼niejszej. </simpara> </legalnotice> </bookinfo> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../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 --> Index: phpdoc/pl/language-defs.ent +++ phpdoc/pl/language-defs.ent <!-- $Revision: 1.1 $ --> <!ENTITY PHPManual "Podrêcznik PHP"> <!ENTITY Date "Data:"> <!ENTITY GettingStarted "Na pocz±tek"> <!ENTITY LanguageReference "Opis jêzyka"> <!ENTITY Features "Mo¿liwo¶ci"> <!ENTITY FunctionReference "Opis funkcji"> <!ENTITY Appendixes "Dodatki"> <!ENTITY PEAR "PEAR: the PHP Extension and Application Repository"> <!ENTITY FAQ "FAQ: Frequently Asked Questions"> <!ENTITY FAQabbrev "FAQ"> Index: phpdoc/pl/language-snippets.ent +++ phpdoc/pl/language-snippets.ent <!-- $Revision: 1.1 $ --> <!ENTITY warn.experimental '<warning><simpara>Ten modu³ jest w stadium <emphasis>EKSPERYMENTALNYM</emphasis>. Oznacza to, ¿e zachowanie tych funkcji, ich nazwy, w zasadzie WSZYSTKO udokumentowane tutaj mo¿e zostaæ zmienione w przysz³ych wersjach PHP BEZ WCZE¦NIEJSZEGO UPRZEDZENIA. U¿ywaj tego modu³u na w³asne ryzyko.</simpara></warning>'> <!ENTITY warn.experimental.func '<warning><simpara>Ta funkcja jest w stadium <emphasis>EKSPERYMENTALNYM</emphasis>. Oznacza to, ¿e zachowanie teh funkcji, jej nazwa, w zasadzie wszystko udokumentowane tutaj mo¿e zostaæ zmienione w przysz³ych wersjach PHP BEZ WCZE¦NIEJSZEGO UPRZEDZENIA. U¿ywaj tej funkcji na w³asne ryzyko.</simpara></warning>'> <!ENTITY tip.ob-capture '<tip><simpara>Ze wszystkim, co wysy³a dane bezpo¶rednio do przegl±darki, mo¿esz u¿ywaæ <link linkend="ref.outcontrol">funkcji kontroli wyj¶cia</link> aby przej±æ wyj¶cie tej funkcji i zapisaæ je - na przyk³ad - w zmiennej tekstowej.</simpara></tip>'> <!ENTITY return.success 'Zwraca &true; w przypadku sukcesu, &false; w przypadku pora¿ki.'> <!-- Various notes --> <!ENTITY note.not-bin-safe '<warning><simpara>Ta funkcja nie jest (jeszcze) bezpieczna dla danych binarnych!</simpara></warning>'> <!ENTITY note.bin-safe '<note><simpara>Ta funkcja jest bezpieczna dla danych binarnych</simpara></note>'> <!ENTITY note.no-windows '<note><simpara>Ta funkcja nie jest dostêpna na platformie Windows</simpara></note>'> <!-- Notes for safe-mode limited functions: --> <!ENTITY note.sm.disabled '<note><simpara>&sm.disabled;</simpara></note>'> <!ENTITY note.sm.uidcheck '<note><simpara>Kiedy w³±czony jest <link linkend="features.safe-mode">tryb bezpieczny</link>, PHP sprawdza, czy plik(i)/katalogi na których chcesz operowaæ maj± takie same UID jak skrypt, który jest aktualnie wykonywany.</simpara></note>'> <!ENTITY note.sm.uidcheck.dir '<note><simpara>Kiedy w³±czony jest <link linkend="features.safe-mode">tryb bezpieczny</link>, PHP sprawdza czy katalog, na którym chcesz operowaæ, ma takie same UID jak skrypt, który jest aktualnie wykonywany.</simpara></note>'> <!-- Common pieces in features/safe-mode.xml Jade doesn't allow in-line entities, so I put them here... Though they should have been inline in safe-mode.xml --> <!ENTITY sm.uidcheck 'Sprawdza czy plik(i)/katalogi, na których chcesz operowaæ, maj± takie same UID jak skrypt, który jest aktualnie wykonywany.'> <!ENTITY sm.uidcheck.dir 'Sprawdza, czy katalog, na którym chesz operowaæ, ma takie same UID jak skrypt, który jest aktualnie wykonywany.'> <!ENTITY sm.disabled 'Ta funkcja jest niedostêpna w <link linkend="features.safe-mode">trybie bezpiecznym</link>'> Index: phpdoc/pl/preface.xml +++ phpdoc/pl/preface.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <preface id="preface"> <title>Przedmowa</title> <abstract> <simpara> <acronym>PHP</acronym>, skrót od "PHP: Hypertext Preprocessor", jest zagnie¿d¿onym w HTML jêzykiem skryptowym. Wiêkszo¶æ jego sk³adni pochodzi z jêzyków C, Java i Perl. Ponadto dodano kilka unikalnych cech specyficznych dla PHP. Celem tego jêzyka, jest umo¿liwienie twórcom serwisów WWW szybkiego pisania dynamicznych stron. </simpara> <simpara> Zauwa¿, ¿e dzi¶ PHP nie jest tylko "preprocesorem hipertekstowym". Korzystaj±c z PHP mo¿esz generowaæ "w locie" rysunki, pliki PDF a nawet animacje Flash. Zobacz tak¿e <ulink url="&url.php.gtk;">PHP-GTK</ulink> aby przekonaæ siê, ¿e PHP mo¿e byæ tak¿e u¿yty do pisania aplikacji client-side z interfejsem u¿ytkownika. </simpara> </abstract> <sect1 id="about"> <title>O tym podrêczniku</title> <para> Podrêcznik zosta³ napisany w <acronym>XMLu</acronym> z u¿yciem <ulink url="&url.docbook;">DocBook XML DTD</ulink> oraz <ulink url="&url.dsssl;"><acronym>DSSSL</acronym></ulink> (Document Style and Semantics Specification Language) do sk³adu. Narzêdzia u¿yte do sk³adu wersji <acronym>HTML</acronym> i <acronym>TeX</acronym> to <ulink url="&url.jade;">Jade</ulink>, stworzone przez <ulink url="&url.jclark;">Jamesa Clarka</ulink> oraz <ulink url="&url.dbstyle;">The Modular DocBook Stylesheets</ulink> stworzone przez <ulink url="&url.nwalsh;">Normana Walsha</ulink>. Do stworzenia dokumentacji w formacie WinHelp u¿ywany jest program <ulink url="&url.winhelp;">Microsoft HTML Help Workshop</ulink> </para> <para> Mo¿esz pobraæ aktualny podrêcznik w ró¿nych jêzykach i formatach, w³±czaj±c w to czysty tekst, czysty <acronym>HTML</acronym>, <acronym>PDF</acronym>, PalmPilot DOC, PalmPilot iSilo i WinHelp, z <ulink url="&url.php.docs;">&url.php.docs;</ulink>. Podrêczniki s± aktualizowane codziennie. </para> <para> Wiêcej informacji o pobieraniu kodów ¼ród³owych <acronym>XML</acronym> dokumentacji mo¿na znale¼æ na stronie <ulink url="&url.php.cvs;">&url.php.cvs;</ulink>. Dokumentacja jest przechowywana w module <literal>phpdoc</literal>. </para> <para> Je¶li znajdziesz jakiekolwiek b³êdy w tym podrêczniku, zg³o¶ je u¿ywaj±c zystemu zg³aszania b³êdów znajduj±cego siê pod adresem: <ulink url="&url.php.bugs;">&url.php.bugs;</ulink>, i sklasyfikuj je jako "Documentation Problem". Tym sposobem mo¿emy szybko dowiadywaæ siê o b³êdach i eliminowaæ je. </para> </sect1> </preface> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../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 --> Index: phpdoc/pl/chapters/install.xml +++ phpdoc/pl/chapters/install.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="installation"> <title>Instalacja</title> <sect1 id="install.downloading"> <title>Pobieranie najnowszej wersji</title> <simpara> Kod ¼ródlowy oraz binarne dystrybucje na niektóre platformy (w tym Windows), mo¿na znale¼æ na stronie <literal><ulink url="&url.php;">http://www.php.net/</ulink></literal>. Zalecane jest korzystanie z jednego z <ulink url="&url.mirrors;">mirrorów</ulink> aby pobieraæ dane z jak najbli¿szego serwera. </simpara> </sect1> <sect1 id="install.unix"> <title>Instalacja na systemach UNIXowych</title> <para> Ten rozdzia³ poprowadzi Ciê przez konfiguracjê i instalacjê PHP na systemach UNIXowych. Przeczytaj wszystkie informacje dotycz±ce konkretnie twojej platformy zanim zaczniesz proces instalacji. </para> <para> Wymagana wiedza i oprogramowanie: <itemizedlist> <listitem> <simpara> Podstawowa znajomo¶æ UNIXa (znajomo¶æ polecenia "make" i kompilatora C) </simpara> </listitem> <listitem> <simpara> Kompilator ANSI C (je¶li masz zamiar kompilowaæ) </simpara> </listitem> <listitem> <simpara> flex (do kompilacji) </simpara> </listitem> <listitem> <simpara> bison (do kompilacji) </simpara> </listitem> <listitem> <simpara> Serwer WWW </simpara> </listitem> <listitem> <simpara> Komponenty wymagane przez poszczególne modu³y (takie jak biblioteki gd, pdf, itp.) </simpara> </listitem> </itemizedlist> </para> <para> Jest kilka sposobów instalacji PHP na platformach UNIXowych, w³±czaj±c w to te z kompilacj± i konfiguracj±, i te poprzez metody pakietowe. Ta dokumentacja skupia siê na procesie kompilacji i konfiguracji PHP. </para> <para> Pocz±tkowy proces konfiguracji jest kontrolowany przez u¿ycie opcji linii poleceñ skryptu <filename>configure</filename>. Ta strona podkre¶la sposób u¿ycia najbardziej popularnych opcji, ale jest ich o wiele wiêcej. Zobacz <link linkend="install.configure">Kompletn± listê opcji konfiguracji</link>. Jest kilka sposobów instalacji PHP: <itemizedlist> <listitem> <simpara> Jako <link linkend="install.apache">modu³ Apache</link> </simpara> </listitem> <listitem> <simpara> Jako <link linkend="install.fhttpd">modu³ fhttpd</link> </simpara> </listitem> <listitem> <simpara> Do u¿ycia z <link linkend="install.otherhttpd">AOLServer, NSAPI, phttpd, Pi3Web, Roxen, thttpd, lub Zeus.</link> </simpara> </listitem> <listitem> <simpara> Jako <link linkend="install.commandline">plik wykonywalny CGI</link> </simpara> </listitem> </itemizedlist> </para> <sect2 id="install.unix.apache-module"> <title>Instruckcja szybkiej instalacji jako modu³ Apache'a</title> <para> PHP mo¿e byæ skompilowane na wiele sposobów, ale najbardziej popularna jest kompilacja jako modu³ serwera Apache. Poni¿ej znajduje siê skrócony opis procesu instalacji PHP can be compiled in a number of different ways, but one of the most popular is as an Apache module. The following is a quick installation overview. </para> <example id="install.unix.apache-module.quick"> <title> Instrukcja szubkiej instalacji PHP 4 (jako modu³ Apache'a) </title> <programlisting> 1. gunzip apache_1.3.x.tar.gz 2. tar xvf apache_1.3.x.tar 3. gunzip php-x.x.x.tar.gz 4. tar xvf php-x.x.x.tar 5. cd apache_1.3.x 6. ./configure --prefix=/www 7. cd ../php-x.x.x 8. ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars 9. make 10. make install 11. cd ../apache_1.3.x 12. ./configure --activate-module=src/modules/php4/libphp4.a 13. make 14. make install 15. cd ../php-x.x.x 16. cp php.ini-dist /usr/local/lib/php.ini 17. Wyedytuj plik httpd.conf lub srm.conf i dodaj: AddType application/x-httpd-php .php 18. Zrestartuj serwer. (Musisz zatrzymaæ i ponownie uruchomi¶ serwer, a nie tylko wymusiæ prze³adowanie serwera przez wys³anie sygna³u HUP lub USR1.) </programlisting> </example> </sect2> <sect2 id="install.building"> <title>Budowanie</title> <simpara> Kiedy PHP jest skonfigurowane, mo¿esz przyst±piæ do budowania pliku wykonywalnego CGI. Polecenie <command>make</command> powinno siê tym zaj±æ. Je¶li wyst±pi± jakie¶ b³êdy, zobacz rozdzia³ <link linkend="install.problems">Problemy</link>. </simpara> </sect2> </sect1> <sect1 id="install.linux"> <title>Instalacja na systemie Unix/Linux</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP na dystrybucjach Linuksowych. </para> <sect2 id="install.linux.packages"> <title>U¿ywanie pakietów</title> <simpara> Wiele dystrybucji Linuksa zawiera instalatory pakietowe, takie jak RPM. Mo¿e to pomóc przy standardowej instalacji, lecz je¶li potrzebujesz mieæ ró¿ny zestaw opcji (takich jak bezbieczny serwer lub sterownik do innej bazy danych), mo¿esz potrzebowaæ przebudowania PHP i/lub serwera WWW. Je¶li nie jeste¶ zaznajomiony z budowaniem i kompilacj± w³asnego oprogramowania, warto jest sprawdziæ, czy kto¶ inny nie zrobi³ ju¿ pakietu PHP z opcjami których potrzebujesz. </simpara> </sect2> </sect1> <sect1 id="install.hpux"> <title>Instalacja na systemie Unix/HP-UX</title> <para> Ta sekcja zawiera wskazówki dotycz±ce instalacji PHP na systemach HP-UX. </para> <example id="install.hpux.example"> <title> Instrukcja instalacji dla HP-UX 10 </title> <programlisting> From: paul_mckay@clearwater-it.co.uk 04-Jan-2001 09:49 (Te wskazówki dotycz± PHP 4.0.4 i Apache v1.3.9) A wiêc chcesz zainstalowaæ PHP i Apache na HP-UX 10.20? 1. Potrzbujesz gzip'a, pobierz pakiet binarny z http://hpux.connect.org.uk/ftp/hpux/Gnu/gzip-1.2.4a/gzip-1.2.4a-sd-10.20.depot.Z zdekompresuj plik i zainstaluj u¿ywaj±c swinstall 2. Potrzebujesz gcc, pobierz pakiet binarny z http://gatekeep.cs.utah.edu/ftp/hpux/Gnu/gcc-2.95.2/gcc-2.95.2-sd-10.20.depot.gz zdekompresuj plik i zainstaluj gcc u¿ywaj±c swinstall. 3. Potrzbujesz GNU binutils, pobierz pakiet binarny z http://hpux.connect.org.uk/ftp/hpux/Gnu/binutils-2.9.1/binutils-2.9.1-sd-10.20.depot.gz zdekompresuj plik i zainstaluj u¿ywaj±c swinstall. 4. Potrzbujesz bison'a, pobierz pakiet binarny z http://hpux.connect.org.uk/ftp/hpux/Gnu/bison-1.28/bison-1.28-sd-10.20.depot.gz zainstaluj jw. 5. Potrzbujesz flex'a, mo¿esz pobraæ ¼ród³a z jednego z mirrorów http://www.gnu.org. Znajduje siê on w katalogu <filename>non-gnu</filename> na serwerze ftp. Pobierz plik, zdekompresuj a potem wykonaj na nim polecenie tar -xvf. Wejd¼ do nowop utworzonego katalogu flex'a a wykonaj polecenia /configure, make a na koniec make install. Je¶li wyst±pi³y b³êdy to prawdopodobnie dlatego ¿e gcc lub co¶ podobnego nie jest w jednym z katalogów zawartych w zmiennej PATH. Teraz ta ciê¿sza czê¶æ. 6. Pobierz ¼ród³a PHP i Apache. 7. Zdekompresuj i wykonaj na nich polecenie tar -xzf Potrzebne jest kilka poprawek w plikach aby poprawnie siê skompilowa³y. 8. Najpierw trzeba poprawiæ plik configure, poniewa¿ wydaje siê ¿e ten skrypt gubi informacjê, ¿e kompilacja przebiega na maszynie hpux. S± lepsze sposoby na poprawienie tego, ale szybciej i ³atwiej jest wstawiæ lt_target=hpux10.20 do linii 47286 skryptu confugre. 9. Pó¼niej poprawiæ w Apache plik GuessOS. W pliku apache_1.3.9/src/helpers zmieñ liniê 89 z "echo "hp${HPUXMACH}-hpux${HPUXVER}"; exit 0" na: "echo "hp${HPUXMACH}-hp-hpux${HPUXVER}"; exit 0" 10. Na HP-UX nie mo¿na zainstalowaæ PHP jako obiekt wspó³dzielony, a wiêc musi byæ wkompilowany statycznie, tak jak to opisano w instrukcji na stronie Apache. 11. PHP i Apache powinno siê bez problemu skompilowaæ, ale Apache siê nie uruchomi. Niezbêdne jest stworzenie nowego u¿ytkownika dla Apache'a, np. www lub apache. Teraz zmieñ linie 252 i 253 pliku conf/httpd.conf z User nobody Group nogroup na: User www Group sys Jest to niezbêdne, poniewa¿ na hp-ux Apache nie mo¿e pracowaæ jako u¿ytkownik nobody. Po tych poprawkach Apache i PHP powinny dzia³aæ. Mam nadziejê, ¿e to komu¶ pomog³o, Paul Mckay. </programlisting> </example> </sect1> <sect1 id="install.solaris"> <title>Instalacja na systemie Unix/Solaris</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP na systemach Solaris. </para> <sect2 id="install.solaris.required"> <title>Wymagane oprogramowanie</title> <para> W systemach Solaris czêsto brakuje kompilatorów C i zwi±zanych z nim narzêdzi. Wymagane jest nastêpuj±ce oprogramowanie: <itemizedlist> <listitem> <simpara> gcc (zalecane, inne kompilatory C mog± dzia³aæ) </simpara> </listitem> <listitem> <simpara> make </simpara> </listitem> <listitem> <simpara> flex </simpara> </listitem> <listitem> <simpara> bison </simpara> </listitem> <listitem> <simpara> m4 </simpara> </listitem> <listitem> <simpara> autoconf </simpara> </listitem> <listitem> <simpara> automake </simpara> </listitem> <listitem> <simpara> perl </simpara> </listitem> <listitem> <simpara> gzip </simpara> </listitem> <listitem> <simpara> tar </simpara> </listitem> </itemizedlist> Dodatkowo musisz zainstalowaæ (i prawdopodobnie skompilowaæ) dodatkowe oprogramowanie specyficzne dla twojej konfiguracji, takie jak Oracle lub MySQL. </para> </sect2> <sect2 id="install.solaris.packages"> <title>U¿ywanie pakietów</title> <simpara> Mo¿esz upro¶ciæ instalacjê pod systemem Solaris u¿ywaj±c pkgadd aby zainstalowaæ wiêkszo¶æ wymaganych komponentów. </simpara> </sect2> </sect1> <sect1 id="install.openbsd"> <title>Instalacja na systemie Unix/OpenBSD</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP na systemach <ulink url="&url.openbsd;">OpenBSD</ulink>. </para> <sect2 id="install.openbsd.ports"> <title>U¿ywanie systemu Port</title> <simpara> Jest to zalecany sposób instalacji PHP na systemach OpenBSD, poniewa¿ tak zainstalowane oprogramowanie bêdzie zawiera³o najnowsze ³aty i poprawki bezpieczeñstwa na³o¿one przez maintainerów. Aby u¿yæ tej metody, upewnij siê ¿e masz <ulink url="&url.openbsd.ports;">najnowsze drzewo portów</ulink>. Pó¼niej poprostu wybierz opcje z których chcesz skorzystaæ ('flavours') i wydaj polecenie <command>make install</command>. Poni¿ej znajduje siê przyk³ad jak to zrobiæ. </simpara> <example id="install.openbsd.ports.example"> <title>Przyk³ad instalacji OpenBSD Ports</title> <programlisting> $ cd /usr/ports/www/php4 $ make show VARNAME=FLAVORS (choose which flavors you want from the list) $ env FLAVOR="imap gettext ldap mysql gd" make install $ /usr/local/sbin/php4-enable </programlisting> </example> </sect2> <sect2 id="install.openbsd.packages"> <title>U¿ywanie pakietów</title> <simpara> S± to prekompilowane pakiety dostêpne dla twojej wersji <ulink url="&url.openbsd;">OpenBSD</ulink>. S± one zintegrowane z wersj± zainstalowanego Apache. Jednak¿e z powodu du¿ej liczby opcji (zwanych <emphasis>flavours</emphasis> - <emphasis>smaki</emphasis>), ³atwiej jest skompilowaæ PHP ze ¼róde³ u¿ywaj±c drzewa portów. Przeczytaj stronê podrêcznika systemowego <ulink url="&url.openbsd.packages;">packages(7)</ulink> aby uzyskaæ wiêcej informacji o dostêpnych pakietach. </simpara> </sect2> </sect1> <sect1 id="install.macosx"> <title>Instalacja na systemie Unix/Mac OS X</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP na systemach Mac OS X Server. </para> <sect2 id="install.macosx.packages"> <title>U¿ywanie pakietów</title> <simpara> Jest kilka wstêpnie spakowanych i wstêpnie skompilowanych wersji PHP dla Mac OS X. Mo¿e to pomóc przy korzystaniu ze standardowej konfiguracji, ale je¶li potrzebujesz niestandardowych opcji (takich jak bezpieczny serwer lub driver do innej bazy danych), mo¿esz potrzebowaæ w³asnorêcznie przebudowaæ PHP i/lub serwer WWW. Je¶li nie jeste¶ zaznajomiony z budowaniem i kompilacj± w³asnego oprogramowania, warto jest sprawdziæ czy kto¶ ju¿ nie przygotowa³ pakietu PHP z opcjami których potrzebujesz. </simpara> </sect2> <sect2 id="install.macosx.compile"> <title>Kompilacja na systemie OS X server</title> <simpara> S± dwie nieznacznie ró¿ne wersja Mac OS X, client i server. Poni¿sze instrukcje dotycz± OS X Server. </simpara> <example id="install.macosx.compile.example"> <title>Instalacja na systemie Mac OS X server</title> <programlisting> 1. Pobierz najnowsze dystrybucje Apache i PHP 2. Zdekompresuje je i uruchom program configure z pakietu Apache, np. tak: ./configure --exec-prefix=/usr \ --localstatedir=/var \ --mandir=/usr/share/man \ --libexecdir=/System/Library/Apache/Modules \ --iconsdir=/System/Library/Apache/Icons \ --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \ --enable-shared=max \ --enable-module=most \ --target=apache 4. Mo¿esz tak¿e chcieæ dodaæ liniê setenv OPTIM=-O2 Je¶li chcesz aby kompilator dokona³ pewnej optymalizacji kodu. 5. Pó¿niej, wejd¼ do katalogu ze ¼ród³ami PHP 4 i skonfiguruj je. ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --mandir=/usr/share/man \ --with-xml \ --with-apache=/src/apache_1.3.12 Je¶li masz jakie¶ dodatki (MySQL, GD itp.), dodaj je tutaj. W linii '--with-apache' wstaw ¶cie¿kê do katalogu ze ¼ród³ami Apache, na przyk³ad "/src/apache_1.3.12". 6. make 7. make install To doda katalog src/modules/php4 do katalogu ze ¼ród³ami Apache. 8. Teraz, zrekonfiguruj Apache aby zbudowa³ PHP 4. ./configure --exec-prefix=/usr \ --localstatedir=/var \ --mandir=/usr/share/man \ --libexecdir=/System/Library/Apache/Modules \ --iconsdir=/System/Library/Apache/Icons \ --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \ --enable-shared=max \ --enable-module=most \ --target=apache \ --activate-module=src/modules/php4/libphp4.a Mo¿esz dostaæ wiadomo¶æ mówi±c±, ¿e libmodphp4.a jest za stary. Je¶li tak siê stanie, wejd¼ do katalogu src/modules/php4 znajduj±cego siê wewn±trz katalogu ze ¼ród³ami Apache i wydaj to polecenie: ranlib libmodphp4.a Potem wróæ do katalogu g³ównego ¼róde³ Apache'a i spróbuj jeszcze raz wydaæ polecenie configure takie jak wy¿ej. To uaktualni tablicê linków. 9. make 10. make install 11. skopiuj i zmieñ nazwê pliku php.ini-dist do katalogu "bin" z katalogu ze ¼ród³ami PHP 4: cp php.ini-dist /usr/local/bin/php.ini lub (je¶li nie masz katalogu "local") cp php.ini-dist /usr/bin/php.ini </programlisting> </example> <simpara> Inne przyk³ady dla <ulink url="&url.stepwise.macosx-client;">Mac OS X client</ulink> i <ulink url="&url.stepwise.macosx-client;">Mac OS X server</ulink> s± dostêpne na <ulink url="&url.stepwise;">Stepwise</ulink>. </simpara> </sect2> <sect2 id="install.macosx.client"> <title>Kompilacja dla MacOS X client</title> <simpara> Te wskazówki zosta³y przekazane przez <ulink url="&url.macosx;">Marca Liyanage</ulink>. </simpara> <simpara> Modu³ PHP dla serwera WWW Apache zosta³ za³±czony w Mac OS X. Ta wersja zawiera obs³ugê baz danych MySQL i PostgreSQL. </simpara> <simpara> UWAGA: B±d¼ ostro¿ny robi±c to, poniewa¿ mo¿esz zepsuæ swó serwer Apache. </simpara> <para> Aby zainstalowaæ: <itemizedlist> <listitem> <simpara> 1. Otwórz okno terminala </simpara> </listitem> <listitem> <simpara> 2. Napisz "wget http://www.diax.ch/users/liyanage/software/macosx/libphp4.so.gz", poczekaj a¿ skoñczy siê pobieranie </simpara> </listitem> <listitem> <simpara> 3. Napisz "gunzip libphp4.so.gz" </simpara> </listitem> <listitem> <simpara> 4. Napisz "sudo apxs -i -a -n php4 libphp4.so" </simpara> </listitem> </itemizedlist> Teraz napisz "<literal>sudo open -a TextEdit /etc/httpd/httpd.conf</literal>" Otworzy siê TextEdit z plikiem konfiguracyjnym serwera WWW. Zlokalizuj linke na koñcu pliku: (u¿yj polecenia Find) <programlisting> * #AddType application/x-httpd-php .php * #AddType application/x-httpd-php-source .phps </programlisting> Usuñ dwa znaki hash (<literal>#</literal>), a potem sapisz plik i wyjd¼ z programu TextEdit. </para> <para> Na koniec, napisz "<literal>sudo apachectl graceful</literal>" aby zrestartowaæ serwer. </para> <para> PHP powinno teraz dzia³aæ. Mo¿esz przetestowaæ je wrzucaj±c plik test.php zawieraj±cy liniê "<literal>&lt;?php phpinfo() ?&gt;</literal>" do foldera "Sites". </para> <para> Teraz otwórz <literal>127.0.0.1/~your_username/test.php</literal> w swoje przegl±darce WWW Powiniene¶ zobaczyæ tabelkê informacyjn± o module PHP. </para> </sect2> </sect1> <sect1 id="install.configure"> <title>Kompletna lista opcji konfiguracji</title> <note> <para> Opcje te s± podawane tylko w czasie kompilacji. Je¶li chcesz wp³yn±æ na konfiguracjê skompilowanego PHP, przeczytaj rozdzia³ <link linkend="configuration">Konfiguracja</link>. </para> </note> <para> Poni¿ej znajduje siê kompletna lista opcji obs³ugiwanych przez skrypt <filename>configure</filename> dostarczany z PHP 3 i PHP 4, u¿ytany przy kompilacji w ¶rodowiskach Uniksowych. Niektóre opcje s± dostêpne w PHP 3, niektóre w PHP 4, niektóre w obu - informacje na ten temat znajduj± siê w opisach opcji. Istnieje wiele opcji, których nazwy ró¿ni± siê miêdzy PHP 3 a PHP 4, ale dotycz± tej samej rzeczy. Te wpisy zawieraj± odno¶niki do siebie nawzajem, wiêc je¶li masz problem z funkcjonowaniem opcji konfiguracji przeniesionych z PHP 3, sprawd¼ czy nazwy siê nie zmieni³y. </para> <itemizedlist> <listitem> <para> <link linkend="install.configure.databases">Bazy danych</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.ecommerce">E-commerce</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.graphics">Grafika</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.misc">Ró¿ne</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.networking">Sieæ</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.php">Zachowanie PHP</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.servers">Serwer</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.text">Tekst i jêzyk</link> </para> </listitem> <listitem> <para> <link linkend="install.configure.xml">XML</link> </para> </listitem> </itemizedlist> <sect2 id="install.configure.databases"> <title>Bazy danych</title> <variablelist> <varlistentry id="install.configure.with-adabas"> <term> <parameter>--with-adabas[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Adabas D. DIR jest katalogiem gdzie zosta³a zainstalowana baza Adabas, domy¶lnie /usr/local. </para> <para> <ulink url="&url.adabas;">Strona domowa Adabas</ulink> </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-dba"> <term> <parameter>--enable-dba=shared</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj DBA jako obiekt wspó³dzielony </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-dbx"> <term> <parameter>--enable-dbx</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê DBX </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-dbase"> <term> <parameter>--enable-dbase</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-dbase">--with-dbase</link>. </para> <para> PHP 4: Do³±cz wbudowan± bibliotekê dbase. Nie potrzebne s± zewnêtrzne biblioteki. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-dbase"> <term> <parameter>--with-dbase</parameter> </term> <listitem> <para> PHP 3: Do³±cz wbudowan± bibliotekê dbase. Nie potrzebne s± zewnêtrzne biblioteki. </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.enable-dbase">--enable-dbase</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-db2"> <term> <parameter>--with-db2[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Berkeley DB2 </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-db3"> <term> <parameter>--with-db3[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Berkeley DB3 </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-dbm"> <term> <parameter>--with-dbm[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê DBM </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-dbmaker"> <term> <parameter>--with-dbmaker[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê DBMaker. DIR to katalog instalacji DBMakera domy¶lnie tam, gdzie zosta³a zainstalowana najnowsza wersja DBMakera (np /home/dbmaker/3.6). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-empress"> <term> <parameter>--with-empress[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Empress. DIR to katalog instalacji Empress, domy¶lnie $EMPRESSPATH </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-filepro"> <term> <parameter>--enable-filepro</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-filepro">--with-filepro</link>. </para> <para> PHP 4: Do³±cz wbudowan± odbs³ugê filePro (tylko do odczytu). Nie potrzebne s± zewnêtrzne biblioteki. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-filepro"> <term> <parameter>--with-filepro</parameter> </term> <listitem> <para> PHP 3: W³±cz wbudowan± obs³ugê filePro (tylko do odczytu). Nie potrzebne sa zewnêtrzne biblioteki. </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.enable-filepro">--enable-filepro</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-fbsql"> <term> <parameter>--with-fbsql[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna. </para> <para> PHP 4: Do³±cz obs³ugê FrontBase SQL. DIR to katalog gdzie zosta³ zainstalowany FrontBase. Domy¶lny katalog zale¿y od systemu operacyjnego: Solaris: <literal>/opt/FrontBase</literal>, WinNT: <literal>\usr\FrontBase</literal>, Linux: <literal>/usr/frontbase</literal>, Mac OSX: <literal>/Library/FrontBase</literal>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-gdbm"> <term> <parameter>--with-gdbm[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê GDBM </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-hyperwave"> <term> <parameter>--with-hyperwave</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Hyperwave </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ibm-db2"> <term> <parameter>--with-ibm-db2[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê IBM DB2. DIR to katalog instalcji DB2, domy¶lnie <filename>/home/db2inst1/sqllib</filename>. </para> <para> <ulink url="&url.ibmdb2;">Strona domowa IBM DB2</ulink> </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-informix"> <term> <parameter>--with-informix[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Informix. DIR to katalog gdzie zosta³ zainstalowany Informix. Brak warto¶ci domy¶lnej. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ingres"> <term> <parameter>--with-ingres[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Ingres II. DIR to katalog instalacji Ingresa, domy¶lnie <filename>/II/ingres</filename>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-interbase"> <term> <parameter>--with-interbase[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê InterBase. DIR to katalog instalacji InterBase'a, domy¶lnie <filename>/usr/interbase</filename>. </para> <simpara> <link linkend="ref.ibase">Funkcje Interbase</link> </simpara> <simpara> <ulink url="&url.ibase;">Strona domowa Interbase</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-ldap"> <term> <parameter>--with-ldap[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê LDAP. DIR to katalog instalacji LDAP. Domy¶lnie <filename>/usr</filename> i <filename>/usr/local</filename> </para> <para> PHP 4: Do³±cz obs³ugê LDAP. DIR to katalog instalacji LDAP. </para> <simpara> Parametr ten do³±cza obs³ugê protoko³u <acronym>LDAP</acronym> (Lightweight Directory Access Protocol). Parametrem jest katalog instalacji LDAP, domy¶lnie <filename class="directory">/usr/local/ldap</filename>. </simpara> <simpara> Mo¿esz znale¼æ wiêcej informacji o LDAP w <ulink url="&url.rfc;rfc1777.html">RFC1777</ulink> i <ulink url="&url.rfc;rfc1778.html">RFC1778</ulink>. </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-msql"> <term> <parameter>--with-msql[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê mSQL. Parametrem tej opcji jest katalog instalacji mSQL, domy¶lnie <filename class="directory">/usr/local/Hughes</filename>. Jest to domy¶lne miejsce instalacji dystrybucji mSQL 2.0. <command>configure</command> automatycznie wykrywa która wersja mSWL jest zainstalowana - PHP wspiera obie wersje, 1.0 i 2.0, ale je¶li skompilujesz PHP z mSQL 1.0, mo¿esz korzystaæ tylko z baz danych mSQL 1.0 i odwrotnie. </para> <simpara> Zobacz tak¿e dyrektywy <link linkend="ini.sect.msql">Konfiguracji mSQL</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </simpara> <simpara> <ulink url="&url.msql;">Strona domowa mSQL</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-mysql"> <term> <parameter>--with-mysql[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê MySQL. DIR to katalog instalacji MySQL. Domy¶lnie przeszukiwane s± popularne miejsca instalacji MySQL. </para> <para> PHP 4: Do³±cz obs³ugê MySQL. DIR to katalog instalacji MySQL. Je¶li nie zostanie podany, u¿yte zostan± wbudowane biblioteki MySQL. Ta opcja jest domy¶lnie w³±czona. </para> <para> Zobacz tak¿e dyrektywy <link linkend="ini.sect.mysql">Konfiguracji MySQL</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </para> <para> <ulink url="&url.mysql;">Strona domowa MySQL</ulink> </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ndbm"> <term> <parameter>--with-ndbm[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê NDBM </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ovrimos"> <term> <parameter>--with-ovrimos</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Ovrimos. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-oci8"> <term> <parameter>--with-oci8[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Oracle-oci8. Domy¶lnie DIR to $ORACLE_HOME. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-oracle"> <term> <parameter>--with-oracle[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê bazy danych Oracle. DIR to katalog domowy Oracle, domy¶lnie $ORACLE_HOME. </para> <para> PHP 4: Do³±cz obs³ugê bazy danych Oracle-oci7. Domy¶lnie DIR to $ORACLE_HOME. </para> <simpara> Do³±cza obs³ugê Oracle. Zosta³o ono przetestowane i powinno dzia³aæ przynajmniej z wersjami Oracle 7.0 do 7.3. Parametrem jest katalog <envar>ORACLE_HOME</envar>. Nie musisz podawaæ tego parametru je¶li skonfigurowane zosta³o ¶rodowisko Oracle. </simpara> <simpara> <ulink url="&url.oracle;">Strona domowa Oracle</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-pgsql"> <term> <parameter>--with-pgsql[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê PostgreSQL. DIR to katalog instalacji PostgreSQL, domy¶lnie <filename>/usr/local/pgsql</filename>. </para> <para> PHP 4: Do³±cz obs³ugê PostgreSQL. DIR to katalog instalacji PostgreSQL, domy¶lnie <filename>/usr/local/pgsql</filename>. Ustaw DIR na "shared" aby zbudowaæ jako obiekt do³±czany dynamicznie (dl), lub "shared,DIR" aby zbudowaæ jako dl i jednocze¶nie podaæ DIR. </para> <simpara> Zobacz tak¿e dyrektywy <link linkend="ini.sect.pgsql">Konfiguracji PostgreSQL'a</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </simpara> <simpara> <ulink url="&url.pgsql;">Strona domowa PostgreSQL</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-solid"> <term> <parameter>--with-solid[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Solid. DIR to katalog instalacji Solid, domy¶lnie <filename>/usr/local/solid</filename> </para> <simpara> <ulink url="&url.solid;">Strona domowa Solid</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-sybase-ct"> <term> <parameter>--with-sybase-ct[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Sybase-CT. DIR to katalog domowy Sybase, domy¶lnie <filename>/home/sybase</filename>. </para> <simpara> Zobacz tak¿e dyrektywy <link linkend="ini.sect.sybct">Konfiguracji Sybase-CT</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-sybase"> <term> <parameter>--with-sybase[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Sybase-DB. DIR to katalog domowy Sybase, domy¶lnie <filename>/home/sybase</filename>. </para> <simpara> Zobacz tak¿e dyrektywy <link linkend="ini.sect.sybase">Konfiguracji Sybase</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </simpara> <simpara> <ulink url="&url.sybase;">Strona domowa Sybase</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-openlink"> <term> <parameter>--with-openlink[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê OpenLink ODBC. DIR to katalog instalacji OpenLink, domy¶lnie <filename>/usr/local/openlink</filename>. Od wersji 4.0.6 PHP ta opcja konfiguracji nie jest wa¿na. Je¶li chcesz u¿ywaæ systemu ODBC firmy OpenLink Software, u¿yj opcji <parameter>--with-iodbc</parameter>. </para> <simpara> <ulink url="&url.openlink;">Strona domowa OpenLink Software</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-iodbc"> <term> <parameter>--with-iodbc[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê iODBC. DIR jest to katalog instalacji iODBC, domy¶lnie <filename>/usr/local</filename>. </para> <para> Ta opcja zosta³a rozwiniêta dla iODBC Driver Manager, darmowo rozpowszechnianego mened¿era sterowników ODBC który dzia³a na ró¿nych odmianach Uniksa. </para> <simpara> <ulink url="&url.freeodbc;">Strona domowa FreeODBC</ulink> or <ulink url="&url.iodbc;">Strona domowa iODBC</ulink> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-custom-odbc"> <term> <parameter>--with-custom-odbc[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cza obs³ugê niestandardowej biblioteki ODBC. Parametrem jest g³ówny katalog biblioteki, domy¶lnie <filename class="directory">/usr/local</filename>. </para> <simpara> Te opcja jest u¿ywana tylko je¶li zdefiniowa³e¶ CUSTOM_ODBC_LIBS przy uruchomieniu skryptu configure. Niezbêdne jest tak¿e wstawienie prawid³owego pliku odbc.h na ¶cie¿kê include. Je¶li nie posiadasz takiego pliku, stwórz go i do³±cz stamt±d swój w³asny nag³ówek. Twój nag³ówek mo¿e tak¿e wymagaæ pewnych definicji, zw³aszcza je¶li jest to biblioteka wieloplatformowa. Zdefiniuj je w CFLAGS. </simpara> <simpara> Na przyk³ad mo¿esz u¿ywaæ Sybase SQL Anywhere na QNX w nastêpuj±cy sposób: <literal> CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50 </literal> </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.disable-unified-odbc"> <term> <parameter>--disable-unified-odbc</parameter> </term> <listitem> <para> PHP 3: Wy³±cz zunifikowane obs³ugê ODBC. Opcja u¿ywana tylko je¶li w³±czona zosta³a obs³uga iODBC, Adabas, Solid, Velocis lub niestandardowego interfejsu ODBC. </para> <para> PHP 4: Opcja niedostêpna w PHP 4 </para> <simpara> Modu³ zunifikowanego ODBC jest wspólnym interfejsem do wszystkich baz danych z interfejsami opartymi na ODBC, takich jak Solid, IBM DB2 i Adabas D. Dzia³a on tak¿e dla zwyk³ych bibliotek ODBC. Zosta³ przetestowany z iODBC, Solid, Adabas D, IBM DB2 i Sybase SQL Anywhere. Wymaga aby w³±czone by³o jedno (i tylko jedno) z tych rozszerzeñ lub rozszerzenie Velocis, lub podana by³a niestandardowa biblioteka ODBC. Ta opcja jest u¿ywana tylko je¶li zosta³a u¿yta jedna z poni¿szych funkcji: <link linkend="install.configure.with-iodbc">--with-iodbc</link>, <link linkend="install.configure.with-solid">--with-solid</link>, <link linkend="install.configure.with-ibm-db2">--with-ibm-db2</link>, <link linkend="install.configure.with-adabas">--with-adabas</link>, <link linkend="install.configure.with-velocis">--with-velocis</link>, lub <link linkend="install.configure.with-custom-odbc">--with-custom-odbc</link>. </simpara> <simpara> Zobacz tak¿e dyrektywy <link linkend="ini.sect.uodbc">Konfiguracji zunifikowanego ODBC</link> ustawiane w <link linkend="configuration.file">pliku konfiguracyjnym</link>. </simpara> </listitem> </varlistentry> <varlistentry id="install.configure.with-unixODBC"> <term> <parameter>--with-unixODBC[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê unixODBC. DIR to katalog instalacji unixODBC, domy¶lnie <filename>/usr/local</filename>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-velocis"> <term> <parameter>--with-velocis[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê Velocis. DIR to katalog instalacji Velocis, domy¶lnie <filename>/usr/local/velocis</filename>. </para> <simpara> <ulink url="&url.velocis;">Strona domowa Velocis</ulink> </simpara> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.ecommerce"> <title>E-commerce</title> <variablelist> <varlistentry id="install.configure.with-ccvs"> <term> <parameter>--with-ccvs[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê CCVS. DIR to katalog instalacji CCVS. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-cybermut"> <term> <parameter>--with-cybermut[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Cybermut. DIR to katalog SDK Cybermuta, który zawiera pliki<filename>libcm-mac.a</filename> i <filename>cm-mac.h</filename>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mck"> <term> <parameter>--with-mck[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê Cybercash MCK. DIR to katalog budowania Cybercash mck, domy¶lnie <filename>/usr/src/mck-3.2.0.3-linux</filename>. Aby uzyskaæ wiêcej informacji zajrzyj do <filename>extra/cyberlib</filename>. </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-cybercash">--with-cybercash</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-cybercash"> <term> <parameter>--with-cybercash[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-mck">--with-mck</link>. </para> <para> PHP 4: Do³±cz obs³ugê CyberCash. DIR to katalog instalacji CyberCash MCK. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-pfpro"> <term> <parameter>--with-pfpro[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Verisign Payflow Pro </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.graphics"> <title>Grafika</title> <variablelist> <varlistentry id="install.configure.enable-freetype-4bit-antialias-hack"> <term> <parameter>--enable-freetype-4bit-antialias-hack</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê FreeType2 (eksperymentalne). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-gd"> <term> <parameter>--with-gd[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê GD (DIR to katalog instalacji GD). </para> <para> PHP 4: Do³±cz obs³ugê GD (DIR to katalog instalacji GD). Ustaw DIR jako "shared" aby zbudowaæ rozszerzenie jako modu³ wspó³dzielony, lub "shared,DIR" aby zbudowaæ rozszerzenie jako modu³ i jednocze¶nie podaæ DIR. </para> </listitem> </varlistentry> <varlistentry id="install.configure.without-gd"> <term> <parameter>--without-gd</parameter> </term> <listitem> <para> PHP 3, PHP 4: Wy³±cz obs³ugê GD. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-imagick"> <term> <parameter>--with-imagick[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê ImageMagick. DIR to katalog instalacji ImageMagicka, domy¶lnie PHP próbuje znale¼æ ten katalog na w³asn± rêkê. [eksperymentalne]. </para> <para> PHP 4: Opcja niedostêpna w PHP 4 </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-jpeg-dir"> <term> <parameter>--with-jpeg-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3: Katalog jpeg dla pdflib 2.0 </para> <para> PHP 4: Katalog jpeg dla pdflib 3.x i 4.x </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-png-dir"> <term> <parameter>--with-png-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Katalog png dla pdflib 3.x i 4.x </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-t1lib"> <term> <parameter>--enable-t1lib</parameter> </term> <listitem> <para> PHP 3: W³±cz obs³ugê t1lib. </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-t1lib">--with-t1lib</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-t1lib"> <term> <parameter>--with-t1lib[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.enable-t1lib">--enable-t1lib</link>. </para> <para> PHP 4: Do³±cz obs³ugê T1lib. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-tiff-dir"> <term> <parameter>--with-tiff-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3: Katalog tiff dla pdflib 2.0 </para> <para> PHP 4: Katalog tiff dla pdflib 3.x i 4.x </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ttf"> <term> <parameter>--with-ttf[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê FreeType </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-xpm-dir"> <term> <parameter>--with-xpm-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Katalog xpm dla gd-1.8+ </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.misc"> <title>Ró¿ne</title> <para> Opcje te s± w miêdzyczasie klasyfikowane. </para> <variablelist> <varlistentry id="install.configure.gmp"> <term> <parameter>--with-gmp</parameter> </term> <listitem> <para> PHP 3, PHP 4 : Do³±cz obs³ugê GMP. </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-bcmath"> <term> <parameter>--disable-bcmath</parameter> </term> <listitem> <para> PHP 3: Skompiluj bez matematycznych funkcji BC dowolnej dok³adno¶ci. Funkcje te pozwalaj± operowaæ na liczbach wykraczaj±cych poza zakresy zwyk³ych liczb sta³o- i zmiennoprzecinkowych; zobacz see <link linkend="ref.bc">Funkcje Matematyczne Dowolnej Dok³adno¶ci BCMath</link> aby uzyskaæ wiêcej szczegó³ów. </para> <para> PHP 4: Opcja niedostêpna; bcmath nie jest domy¶lnie wkompilowywany. U¿yj opcji <link linkend="install.configure.enable-bcmath">--enable-bcmath</link> aby go wkompilowaæ. </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-display-source"> <term> <parameter>--disable-display-source</parameter> </term> <listitem> <para> PHP 3: Skompiluj bez obs³ugi pokazywania ¼róde³ </para> <para> PHP 4: Opcja niedostêpna w PHP 4 </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-libtool-lock"> <term> <parameter>--disable-libtool-lock</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: unikaj blokowania (mo¿e uszkodziæ równoleg³e budowanie) </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-pear"> <term> <parameter>--disable-pear</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Nie instaluj PEAR </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-pic"> <term> <parameter>--disable-pic</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Wy³±cz PIC dla obiektów wspó³dzielonych </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-posix"> <term> <parameter>--disable-posix</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3; zamiast tego u¿yj <link linkend="install.configure.without-posix">--without-posix</link>. </para> <para> PHP 4: Wy³±cz funkcje POSIXowe. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-pcntl"> <term> <parameter>--enable-pcntl</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz funkcje kontroli procesów. (fork, waitpid, signal, itp.) </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-rpath"> <term> <parameter>--disable-rpath</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Wy³±cz przekazywanie dodatkowych ¶cie¿ek poszukiwania bibliotek </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-session"> <term> <parameter>--disable-session</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Wy³±cz obs³ugê sesji </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-bcmath"> <term> <parameter>--enable-bcmath</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3; bcmath jest wkompilowywany domy¶lnie U¿yj <link linkend="install.configure.disable-bcmath">--disable-bcmath</link> aby wy³±czyæ t± bibliotekê. </para> <para> PHP 4: Kompiluj z funkcjami matematycznymi z dok³adno¶ci± bc. Przeczytaj README-BCMATH aby uzyskaæ informacje jak zainstlowaæ ten modu³. Te funkcje pozwalaj± operowaæ na liczbach wykraczaj±cych poza zakresy dozwolone przez zwyk³e liczby sta³o- i zmiennoprzecinkowe; przeczytaj <link linkend="ref.bc">Funkcje Matematyczne Dowolnej Dok³adno¶ci BCMath</link> aby uzyskac wiêcej informacji. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-c9x-inline"> <term> <parameter>--enable-c9x-inline</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz semantykê C9x-inline </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-calendar"> <term> <parameter>--enable-calendar</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz obs³ugê konwersji kalendarza </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-debug"> <term> <parameter>--enable-debug</parameter> </term> <listitem> <para> PHP 3, PHP 4: Kompiluj z symbolami dla debuggera </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-debugger"> <term> <parameter>--enable-debugger</parameter> </term> <listitem> <para> PHP 3: Kompuluj z funkcjami zdalnego debugowania </para> <para> PHP 4: Opcja niedostêpna w PHP 4 </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-discard-path"> <term> <parameter>--enable-discard-path</parameter> </term> <listitem> <para> PHP 3, PHP 4: Je¶li ta opcja zostanie w³±czona, binaria CGI PHP mog± byæ bezpiecznie umieszczone poza drzewem serwera WWW i u¿ytkownicy nie bêd± mogli obchodzi zabezpieczeñ .htaccess. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-dmalloc"> <term> <parameter>--enable-dmalloc</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz dmalloc </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-exif"> <term> <parameter>--enable-exif</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz obs³ugê exif </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-experimental-zts"> <term> <parameter>--enable-experimental-zts</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Ta opcja najprawdopodobniej przerwie proces budowania </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-fast-install"> <term> <parameter>--enable-fast-install[=PKGS]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: optymalizacja dla szybkiej instalacji [domy¶lnie=tak] </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-force-cgi-redirect"> <term> <parameter>--enable-force-cgi-redirect</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz sprawdzanie bezpieczeñstwa dla wewnêtrznych przekierowañ serwera. Powiniene¶ u¿yæ tej opcji je¶li u¿ywasz wersji CGI z serwerem Apache. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-inline-optimization"> <term> <parameter>--enable-inline-optimization</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Je¶li masz du¿o pamiêci i u¿ywasz gcc mo¿esz spróbowaæ w³±czyæ t± opcjê. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-libgcc"> <term> <parameter>--enable-libgcc</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz jawne linkowanie z libgcc </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-maintainer-mode"> <term> <parameter>--enable-maintainer-mode</parameter> </term> <listitem> <para> PHP 3, PHP 4: w³±cz regu³y i zale¿no¶ci programu make nie przydatne (i czasem niejasne) dla zwyk³ego u¿ytkownika </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-mbstr-enc-trans"> <term> <parameter>--enable-mbstr-enc-trans</parameter> </term> <listitem> <para> PHP 4: w³±cz automatyczne wykrywanie wpisywanych znaków przez http i translacjê dla wielobajtowych kodowañ znaków. </para> <warning> <para> </para> </warning> </listitem> </varlistentry> <varlistentry id="install.configure.enable-mbstring"> <term> <parameter>--enable-mbstring</parameter> </term> <listitem> <para> PHP 4: w³±cz funkcje zwi±zane z wielobajtowym kodowaniem znaków. </para> <warning> <para> Ta opcja dostêpna jest w PHP od wersji 4.0.6. </para> </warning> </listitem> </varlistentry> <varlistentry id="install.configure.enable-memory-limit"> <term> <parameter>--enable-memory-limit</parameter> </term> <listitem> <para> PHP 3, PHP 4: Kompiluj z obs³ug± limitowania pamiêci. [domy¶lnie=nie] </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-safe-mode"> <term> <parameter>--enable-safe-mode</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz domy¶ln± pracê w trybie bezpiecznym. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-satellite"> <term> <parameter>--enable-satellite</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz obs³ugê CORBA przez Satellite (wymaga ORBit) </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-shared"> <term> <parameter>--enable-shared[=PKGS]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: buduj biblioteki wspó³dzielone [domy¶lnie=tak] </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-sigchild"> <term> <parameter>--enable-sigchild</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz obs³ugê SIGCHLD przez PHP. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-static"> <term> <parameter>--enable-static[=PKGS]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: buduj statyczne biblioteki [domy¶lnie=tak] </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-sysvsem"> <term> <parameter>--enable-sysvsem</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz obs³ugê semaforów System V. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-sysvshm"> <term> <parameter>--enable-sysvshm</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz obs³ugê pamiêci dzielonej System V. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-trans-sid"> <term> <parameter>--enable-trans-sid</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz przezroczyste propagowanie id sesji </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-cdb"> <term> <parameter>--with-cdb[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê CDB </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-config-file-path"> <term> <parameter>--with-config-file-path=PATH</parameter> </term> <listitem> <para> PHP 3: Ustawia ¶cie¿kê gdzie powinien siê znajdowaæ plik php3.ini. Domy¶nie <filename>/usr/local/lib</filename> </para> <para> PHP 4: Ustawia ¶cie¿kê gdzie powinien siê znajdowaæ plik <filename>php.ini</filename>. Domy¶lnie <filename>/usr/local/lib</filename> </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-cpdflib"> <term> <parameter>--with-cpdflib[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê ClibPDF. DIR to katalog instalacji ClibPDF, domy¶lnie /usr/local. </para> <para> PHP 4: Do³±cz obs³ugê cpdflib (wymaga cpdflib &gt;= 2). DIR to katalog instalacji cpdflib, domy¶lnie /usr. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-esoob"> <term> <parameter>--with-esoob[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Easysoft OOB. DIR to katalog instalacji OOB, domy¶lnie /usr/local/easysoft/oob/client. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-exec-dir"> <term> <parameter>--with-exec-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: W trybie bezpiecznym pozwól na uruchamianie plików wykonywalnych tylko w DIR, domy¶lnie /usr/local/php/bin </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-fdftk"> <term> <parameter>--with-fdftk[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê fdftk. DIR to katalog instalacji fdftk, domy¶lnie /usr/local. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-gnu-ld"> <term> <parameter>--with-gnu-ld</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: za³ó¿, ¿e kompilator C u¿ywa GNU ld [domy¶lnie=nie] </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-icap"> <term> <parameter>--with-icap[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê ICAP. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-imap"> <term> <parameter>--with-imap[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê protoko³u IMAP. DIR jest to katalog gdzie znajduj± siê pliki nag³ówkowe IMAP i plik <filename>c-client.a</filename>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-imsp"> <term> <parameter>--with-imsp[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz wparcie dla IMSP. DIR to katalog gdzie znajduj± siê pliki nag³ówkowe IMSP i plik libimsp.a. </para> <para> PHP 4: Opcja niedostêpna w PHP 4 </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-java"> <term> <parameter>--with-java[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê jêzyka Java. DIR to katalog gdzie zainstalowane jest JDK. To rozszerzenie mo¿e byæ zbudowane tylko jako obiekt dynamicznie do³±czany (dl). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-kerberos"> <term> <parameter>--with-kerberos[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Kerberosa w protokole IMAP. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mcal"> <term> <parameter>--with-mcal[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê MCAL. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mcrypt"> <term> <parameter>--with-mcrypt[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê mcrypt. DIR to katalog instalacji mcrypt. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mhash"> <term> <parameter>--with-mhash[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê mhash. DIR to katalog gdzie zainstalowano mhash. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mm"> <term> <parameter>--with-mm[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê mm do przechowywania sesji. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mod_charset"> <term> <parameter>--with-mod_charset</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz transfer tablic dla mod_charset (Rosyjski Apache). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-pdflib"> <term> <parameter>--with-pdflib[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê pdflib (sprawdzone z 0.6 i 2.0). DIR to katalog instalacji pdflib, domy¶lnie <filename>/usr/local</filename>. </para> <para> PHP 4: Do³±cz obs³ugê pdflib 3.x/4.x. DIR to katalog instalacji pdflib, domy¶lnie <filename>/usr/local</filename>. </para> <para> PHP 4 i PDFlib 3.x/4.x wymagaj± bibliotek JPEG i TIFF. Kompiluj±c obs³ugê PDFlib u¿yj opcji <link linkend="install.configure.with-jpeg-dir">--with-jpeg-dir</link> i <link linkend="install.configure.with-tiff-dir">--with-tiff-dir</link>. Mo¿esz tak¿e u¿yæ opcji <link linkend="install.configure.with-png-dir">--with-png-dir</link> i <link linkend="install.configure.with-zlib-dir">--with-zlib-dir</link> aby wkompilowaæ obs³ugê PNG i Zlib do rozszerzenia PDFlib. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-shared-pdflib"> <term> <parameter>--enable-shared-pdflib</parameter> </term> <listitem> <para> PHP 3, PHP 4: Aktywuj pdflib jako bibliotekê wspó³dzielon±. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-readline"> <term> <parameter>--with-readline[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê readline. DIR to katalog instalacji readline. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-regex"> <term> <parameter>--with-regex=TYPE</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Typ biblioteki regex: system, apache, php </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-servlet"> <term> <parameter>--with-servlet[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê serwletów. DIR to katalog instalacji JSDK. To SAPI wymaga, aby roszerzenie Java by³o zbudowane jako obiekt dynamicznie do³±czany. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ming"> <term> <parameter>--with-ming</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Flash 4 (Ming) </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-swf"> <term> <parameter>--with-swf[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê swf </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-system-regex"> <term> <parameter>--with-system-regex</parameter> </term> <listitem> <para> PHP 3: Nie u¿ywaj wbudowanej biblioteki regex </para> <para> PHP 4: (niezalecane) U¿yj systemow± bibliotekê regex. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-tsrm-pth"> <term> <parameter>--with-tsrm-pth[=pth-config]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: U¿yj GNU Pth. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-tsrm-pthreads"> <term> <parameter>--with-tsrm-pthreads</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: U¿yj w±tków POSIX (domy¶lnie) </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-x"> <term> <parameter>--with-x</parameter> </term> <listitem> <para> PHP 3: u¿yj X Window System </para> <para> PHP 4: Opcje niedostêpna w PHP 4 </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-bzip2"> <term> <parameter>--with-bz2[=DIR]</parameter> </term> <listitem> <para> PHP 4: Do³±cz obs³ugê bzip2. DIR to katalog instalacji bzip2. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-zlib-dir"> <term> <parameter>--with-zlib-dir[=DIR]</parameter> </term> <listitem> <para> PHP 3: Katalog zlib dla pdflib 2.0 lub do³±cz obs³ugê zlib zlib dir for pdflib 2.0 or include zlib support </para> <para> PHP 4: Katalog zlib dla pdflib 3.x/4.x lub do³±cz obs³ugê zlib </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-zlib"> <term> <parameter>--with-zlib[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê zlib (wymaga zlib &gt;= 1.0.9). DIR to katalog instalacji zlib, domy¶lnie /usr. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-zip"> <term> <parameter>--with-zip[=DIR]</parameter> </term> <listitem> <para> PHP 4: Do³±cz obs³ugê zip (wymaga zziplib &gt;= 0.10.6). DIR to katalog instalacji zziplib, domy¶lnie /usr/local. </para> <para> Najnowsza wersja zziplib mo¿e byæ znaleziona pod adresem <ulink url="&url.zziplib;">&url.zziplib;</ulink>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.without-pcre-regex"> <term> <parameter>--without-pcre-regex</parameter> </term> <listitem> <para> PHP 3: Nie do³±czaj obs³ugi Perl Compatible Regular Expressions (kompatybilne z perlem wyra¿enia regularne) </para> <para> PHP 4: Nie do³±czaj obs³ugi Perl Compatible Regular Expressions. U¿yj opcji --with-pcre-regex=DIR aby podaæ lokalizacjê plików nag³ówkowych i bibliotek je¶li nie chcesz u¿ywaæ wbudowanej biblioteki. </para> </listitem> </varlistentry> <varlistentry id="install.configure.without-posix"> <term> <parameter>--without-posix</parameter> </term> <listitem> <para> PHP 3: Nie do³±czaj funkcji POSIXowych </para> <para> PHP 4: Opcja niedostêpna w PHP 4; zamiast tego u¿yj <link linkend="install.configure.disable-posix">--disable-posix</link>. </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.networking"> <title>Sieæ</title> <variablelist> <varlistentry id="install.configure.with-curl"> <term> <parameter>--with-curl[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê CURL </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-ftp"> <term> <parameter>--enable-ftp</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tegu u¿yj<link linkend="install.configure.with-ftp">--with-ftp</link>. </para> <para> PHP 4: W³±cz obs³ugê FTP </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-ftp"> <term> <parameter>--with-ftp</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê FTP. </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.enable-ftp">--enable-ftp</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-url-fopen-wrapper"> <term> <parameter>--disable-url-fopen-wrapper</parameter> </term> <listitem> <para> PHP 3, PHP 4: Wy³±cz wrapper URL'i do polecenia fopen, który pozwala na dostêp do plików przez protoko³y HTTP lub FTP. </para> <warning> <para> Ten prze³±cznik jest dostêpny w PHP w wersji 4.0.3 i starszych. Nowsze wersje zawieraj± parametr pliku konfiguracyjnego <parameter>allow_url_fopen</parameter> który znosi konieczno¶æ podejmowania decyzji przy kompilacji. </para> </warning> </listitem> </varlistentry> <varlistentry id="install.configure.with-mod-dav"> <term> <parameter>--with-mod-dav=DIR</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê DAV poprzez modu³ Apache'a mod_dav. DIR to katalog instalacji mod_dav (tylko wersja jako modu³ Apache'a). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-openssl"> <term> <parameter>--with-openssl[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê OpenSSL w SNMP. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-snmp"> <term> <parameter>--with-snmp[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê SNMP. DIR to katalog instalacji SNMP, domy¶lnie przeszukuje wiele popularnych lokalizacji instalacji snmp. Ustaw DIR na 'shared' aby zbudowaæ jako obiekt dynamicznie do³±czany (dl), lub 'shared,DIR' aby zbudowaæ jako dl i jednocze¶nie podaæ DIR. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-ucd-snmp-hack"> <term> <parameter>--enable-ucd-snmp-hack</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz poprawkê UCD SNMP </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-sockets"> <term> <parameter>--enable-sockets</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz obs³ugê gniazd </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-yaz"> <term> <parameter>--with-yaz[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê YAZ (ANSI/NISO Z39.50). DIR to katalog instalacji binariów YAZ. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-yp"> <term> <parameter>--enable-yp</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.with-yp">--with-yp</link> instead. </para> <para> PHP 4: Do³±cz obs³ugê YP </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-yp"> <term> <parameter>--with-yp</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê YP </para> <para> PHP 4: Opcja niedostêpna; zamiast tego u¿yj <link linkend="install.configure.enable-yp">--enable-yp</link>. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-mnogosearch"> <term> <parameter>--with-mnogosearch</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê mnoGoSearch. </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.php"> <title>PHP Behaviour</title> <variablelist> <varlistentry id="install.configure.enable-magic-quotes"> <term> <parameter>--enable-magic-quotes</parameter> </term> <listitem> <para> PHP 3, PHP 4: W³±cz domy¶lnie "magic quotes". </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-short-tags"> <term> <parameter>--disable-short-tags</parameter> </term> <listitem> <para> PHP 3, PHP 4: Wy³±cz mo¿liwo¶æ u¿ywania krótkiej formy tagów otwieraj±cych &lt;?. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-track-vars"> <term> <parameter>--enable-track-vars</parameter> </term> <listitem> <para> PHP 3: W³±cz domy¶lne ¶ledzienie zmiennych GET/POST/Cookie. </para> <para> PHP 4: Opcja niedostêpna w PHP 4; od wersji PHP 4.0.2 opcja track_vars jest zawsze w³±czona. </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.servers"> <title>Serwer</title> <variablelist> <varlistentry id="install.configure.with-aolserver-src"> <term> <parameter>--with-aolserver-src=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Okre¶l ¶cie¿kê do ¼ród³owej dystrybucji AOLserver </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-aolserver"> <term> <parameter>--with-aolserver=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Okre¶l ¶cie¿kê do zainstalego AOLserver </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-apache"> <term> <parameter>--with-apache[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Zbuduj modu³ Apache. DIR to katalog g³ówny Apache, domy¶lnie /usr/local/etc/httpd. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-apxs"> <term> <parameter>--with-apxs[=FILE]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Zbuduj modu³ wspó³dzielony Apache. FILE to opcjonalna ¶cie¿ka do narzêdzia apxs z pakietu Apache; domy¶lnie apxs. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-versioning"> <term> <parameter>--enable-versioning</parameter> </term> <listitem> <para> PHP 3: U¿yj wersjonowania i scoopingu które obs³uguje Solaris 2.x i Linux. </para> <para> PHP 4: Eksportuj tylko wymagane symbole. Przejrzyj plik INSTALL aby uzyskaæ wiêcej informacji. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-caudium"> <term> <parameter>--with-caudium[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj PHP jako modu³ Pike do u¿ycia z serwerem Caudium. DIR to katalog instalacji Caudium, domy¶lnie $prefix/caudium/server. Prefix jest kontrolowany przez opcjê --prefix, domy¶lnie /usr/local. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-fhttpd"> <term> <parameter>--with-fhttpd[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Buduj modu³ fhttpd. DIR to katalog ze ¼ród³ami fhttpd, domy¶lnie /usr/local/src/fhttpd. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-nsapi"> <term> <parameter>--with-nsapi=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Okre¶l ¶cie¿kê do zainstalowanego Netscape </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-phttpd"> <term> <parameter>--with-phttpd=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-pi3web"> <term> <parameter>--with-pi3web=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj PHP jako modu³ do u¿ycia z Pi3Web. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-roxen"> <term> <parameter>--with-roxen=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj PHP jako modu³ Pike. DIR to katalog instalacji Roxen, zazwyczaj /usr/local/roxen/server. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-roxen-zts"> <term> <parameter>--enable-roxen-zts</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj modu³ Roxen u¿ywaj±c Zend Thread Safety ("Bezpieczeñstwa W±tków Zend"). </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-thttpd"> <term> <parameter>--with-thttpd=SRCDIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-zeus"> <term> <parameter>--with-zeus=DIR</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Buduj PHP jako modu³ ISAPI do u¿ycia z Zeus. </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.text"> <title>Teks i jêzyk</title> <variablelist> <varlistentry id="install.configure.with-aspell"> <term> <parameter>--with-aspell[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê ASPELL. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-gettext"> <term> <parameter>--with-gettext[=DIR]</parameter> </term> <listitem> <para> PHP 3, PHP 4: Do³±cz obs³ugê GNU gettext. DIR to katalog instalacji gettext, domy¶lnie /usr/local. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-iconv"> <term> <parameter>--with-iconv[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê iconv. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-pspell"> <term> <parameter>--with-pspell[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê PSPELL. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-recode"> <term> <parameter>--with-recode[=DIR]</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê GNU recode. </para> <para> PHP 4: Do³±cz obs³ugê redcode. DIR to katalog instalacji redcode. </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-shmop"> <term> <parameter>--enable-shmop</parameter> </term> <listitem> <para> PHP 3, PHP 4 : W³±cz obs³ugê shmop. </para> </listitem> </varlistentry> </variablelist> </sect2> <sect2 id="install.configure.xml"> <title>XML</title> <variablelist> <varlistentry id="install.configure.with-dom"> <term> <parameter>--with-dom[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê DOM (wymaga libxml &gt;= 2.0). DIR to katalog instalacji libxml, domy¶lnie <filename>/usr</filename> </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-sablot-errors-descriptive"> <term> <parameter>--enable-sablot-errors-descriptive</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz b³êdy opisowe. </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-sablot"> <term> <parameter>--with-sablot[=DIR]</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: Do³±cz obs³ugê Sablotrona </para> </listitem> </varlistentry> <varlistentry id="install.configure.enable-wddx"> <term> <parameter>--enable-wddx</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3 </para> <para> PHP 4: W³±cz obs³ugê WDDX </para> </listitem> </varlistentry> <varlistentry id="install.configure.disable-xml"> <term> <parameter>--disable-xml</parameter> </term> <listitem> <para> PHP 3: Opcja niedostêpna w PHP 3; funkcje XML nie s± budowane domy¶³nie. U¿yj <link linkend="install.configure.with-xml">--with-xml</link> aby je w³±czyæ. </para> <para> PHP 4: Wy³±cz obs³ugê wbudowanej biblioteki XML expat </para> </listitem> </varlistentry> <varlistentry id="install.configure.with-xml"> <term> <parameter>--with-xml</parameter> </term> <listitem> <para> PHP 3: Do³±cz obs³ugê XML </para> <para> PHP 4: Opcje niedostêpna; obs³uga XML jest budowane domy¶lnie. U¿yj opcji <link linkend="install.configure.disable-xml">--disable-xml</link> aby je wy³±czyæ. </para> </listitem> </varlistentry> </variablelist> </sect2> </sect1> <sect1 id="install.windows"> <title>Instalacja na systemach Windows</title> <para> Ten rozdzia³ dotyczy systemó³ Windows 95/98/Me i Windows NT/2000/XP. (Proces instalacji nie zosta³ sprawdzony na XP). Nie spodziewaj siê, ¿e PHP bêdzie dzia³aæ na 16-bitowych platformach takich jak Windows 3.1. Czasem odnosimy siê do obs³ugiwanych platform jako Win32 </para> <para> S± dwa g³ówne sposoby instalacji PHP na Windowsach: albo <link linkend="install.windows.manual">rêcznie</link> lub u¿ywaj±c instalatora <link linkend="install.windows.installer"> InstallShield</link>. </para> <para> Je¶li masz Microsoft Visual Studio, mo¿esz <link linkend="install.windows.build">budowaæ</link> PHP z orginalnego kodu ¼ród³owego. </para> <para> Jak ju¿ zainstalujesz PHP na systemie Windows mo¿esz chceæ <link linkend="install.windows.extensions">do³±czyæ ró¿ne rozszerzenia </link> aby zwiêkszyæ funkcjonalno¶æ. </para> <sect2 id="install.windows.installer"> <title>Windows InstallShield</title> <para> Instalator PHP pod Windows jest dostêpny pod adresem <ulink url="&url.php;">&url.php;</ulink>. Pakiet ten instaluje PHP i, w przypadku IIS, PWS i Xitami, tak¿e konfiguruje serwer WWW. Zauwa¿ tak¿e, ¿e pomimo ¿e instalator InstallShield jest ³atwym sposobem na zmuszenie PHP do pracy, ma on wiele ograniczeñ, np. nie obs³uguje automatycznego ustawienia rozszerzeñ. </para> <simpara> Zainstaluj wybrany serwer <acronym>HTTP</acronym> i upewnij siê ¿e on dzia³a. </simpara> <simpara> Uruchom instalator i wykonuj polecenia pojawiaj±ce siê na ekranie. Dostêpne s± w rodzaje instalacji: standardowa, która ustawia domy¶lne opcje, i zaawansowana, która zadaje pytania podczas instalacji. </simpara> <simpara> Instalator zbiera informacje niezbêdne do ustawienia pliku <filename>php.ini</filename> i konfiguracji serwera WWW do u¿ycia PHP. Dla serwera IIS a tak¿e PWS na NT Workstation, wy¶wietlana jest lista wêz³ów na serwerze z ustawieniami mapowania skryptów, z których mo¿esz wybraæ wêz³y do których chcesz dodaæ mapowania skryptów PHP. </simpara> <simpara> Po procesie instalacji instalator poinformuje ciê czy potrzebujesz zrestartowaæ system, zrestartowaæ serwer lub poprostu zacznij u¿ywaæ PHP. </simpara> <warning> <para> Wiedz, ¿e taki sposób instalacji PHP nie jest bezpieczny. Je¶li potrzebujesz bezpiecznego sposobu na instalacjê PHP, zrób to lepiej rêcznie, rozwa¿nie dobieraj±c ka¿d± opcjê. Instalator automatyczny daje ci od razu dzia³aj±ce PHP, ale nie jest ono przeznaczone do pracy na serwerach produkcyjnych. </para> </warning> </sect2> <sect2 id="install.windows.manual"> <title>Rêczny proces instalacji</title> <simpara> Ten przewodnik poprowadzi ciê przez rêczn± instalacjê i konfiguracjê PHP na serwerach WWW pracuj±cych pod systemami Windows. Musisz pobraæ pakiet binariów PHP ze strony <ulink url="&url.php;">&url.php;</ulink>. Orginalna wersja tego przewodnika zosta³a napisana przez &link.bob; i znale¼æ j± mo¿na pod adresem <ulink url="&url.win32install;">&url.win32install;</ulink>. </simpara> <para> Ten przewodnik opisuje proces rêcznej instalacji dla: <itemizedlist> <listitem> <para> Personal Web Server 3 i 4 lub nowszy </para> </listitem> <listitem> <para> Internet Information Server 3 i 4 lub nowszy </para> </listitem> <listitem> <para> Apache 1.3.x </para> </listitem> <listitem> <para> OmniHTTPd 2.0b1 i nowsze </para> </listitem> <listitem> <para> Oreilly Website Pro </para> </listitem> <listitem> <para> Xitami </para> </listitem> <listitem> <para> Netscape Enterprise Server, iPlanet </para> </listitem> </itemizedlist> </para> <para> PHP 4 dla Windows dostêpny jest w dwóch postaciach: jako plik wykonywalny CGI (php.exe) lub jako kilka rodzajów modu³ów <acronym>SAPI</acronym> (na przyk³ad <filename>php4isapi.dll</filename>). Ta druga postaæ jest nowo¶ci± wprowadzon± w PHP 4 i wprowadza znacznie poprawion± wydajno¶æ i ulepszon± funkcjonalno¶. </para> <warning> <para> Jednak¿e modu³y SAPI <emphasis>NIE</emphasis> powinny byæ u¿ywane na produkcyjnych serwerach. Ogólnie mówi±c, modu³y ISAPI maj± powa¿ne problemy z niezawodno¶ci±, zw³aszcza na platformach starszych ni¿ W2K - mo¿esz do¶wiadczyc wielu b³êdów 500 serwera a tak¿e niestabilno¶ci innych modu³ów serwera, jak np. ASP. Zosta³e¶ ostrze¿ony! </para> <para> Powodem jest to, ¿e modu³y PHP SAPI u¿ywaj± PHP w wersji z bezpiecznymi w±tkami, co jest nowo¶ci± w PHP 4 i nie zosta³o to na tyle przetestowane aby zosta³o uznane za stabilne, a do tego znaleziono ju¿ kilka b³êdów. Z drugiej strony, u¿ytkownicy zg³aszali uzyskiwanie bardzo dobrych wyników z modu³ami SAPI, jednak¿e nie znamy nikogo u¿ywaj±cego ich na produkcyjnym serwerze. Podsumowuj±c: je¶li potrzebujesz absolutnej stabilno¶ci, zamieñ wydajno¶æ modu³ów SAPI na stabilno¶æ plików wykonywalnych CGI. </para> </warning> <para> Je¶li wybierzesz jeden z modu³ów SAPI i u¿ywasz Windows 95, musisz uaktualniæ DCOM ze stron <ulink url="http://download.microsoft.com/msdownload/dcom/95/x86/en/dcom95.exe"> Microsoft DCOM</ulink>. Dla modu³u ISAPI wymagany jest serwer WWW kompatybilny z ISAPI 4.0 (sprawdzone z IIS 4.0, PWS 4.0 i IIS 5.0). IIS 3.0 <emphasis>NIE</emphasis> jest obs³ugiwane; je¶li potrzebujesz natywnej obs³ugi PHP powiniene¶ zainstalowaæ Windows NT 4.0 Option Pack z IIS 4.0. </para> <para> Poni¿sze kroki powinny byæ wykonane przed intrukcjami dla konkretnego serwera. <itemizedlist> <listitem> <para> Zdekompresuj plik dystrybucyjny do dowolnego katalogu, np. &quot;C:\php\&quot;. </para> </listitem> <listitem> <para> Musisz siê upewniæ, ¿e wszystkie DLLe których u¿ywa PHP mog± byæ przez niego znalezione. To, które DLLe s± potrzebe zale¿y od tego, których rozszerzeñ PHP u¿ywasz a tak¿e czy PHP jest skompilowane jako CGI czy jako modu³ serwera. <filename>php4ts.dll</filename> jest u¿ywany zawsze. Je¶li u¿ywasz PHP w postaci modu³u serwera (np. ISAPI lub Apache), to niezbêdne s± DLLe z katalogu <filename>sapi</filename>. Je¶li u¿ywasz DLLi rozszerzaj±cych PHP, one tak¿e bêd± potrzebne. Aby upewniæ siê ¿e DLLe zostan± znalezione, przekopiuj je do katalogu systemowego (np. <filename>winnt/system32</filename> lub <filename>windows/system</filename>) lub upewnij siê ¿e s± w tym samym katalogu co g³ówny plik wykonywalny PHP lub DLL twojego serwera WWW (np. php.exe, php4apache.dll). </para> <para> Binaria PHP, modu³y SAPI i niektóre rozszerzenia opieraj± siê na zewnêtrznych bibliotekach DLL. Upewnij siê, ¿e dystrybucyjne DLLe znajduj± siê w jednym z katalogów przeszukiwanych przez Windows. Najlepiej jest przekopiowaæ poni¿sze pliki do katalogu systemowego, którym jest zazwyczaj: <simplelist> <member>c:\windows\system dla Windows 9x/Me</member> <member>c:\winnt\system32 dla Windows NT/2000</member> </simplelist> Pliki dp przekopiowania to: <simplelist> <member> &apos;php4ts.dll&apos;, je¶li taki plik ju¿ istnieje, nadpisz go </member> <member> Pliki z katalogu &apos;dlls&apos;. Je¶li te pliki s± ju¿ zainstalowane w twoim systemie, nadpisz je tylko je¶li co¶ dzia³a nie tak (przed napisaniem ich dobrze jest zrobiæ kopiê zapasow±, lub przenie¶æ je do innego folderu - na wszelki wypadek). </member> </simplelist> </para> <para> Pobierz najnowsz± wersje Microsoft Data Access Components (MDAC) dla twojej platformy, zw³aszcza je¶li u¿ywasz Microsoft Windows 9x/NT4. MDAC jest dostêpny pod adresem <ulink url="&url.mdac;">&url.mdac; </ulink>. </para> </listitem> <listitem> <para> Skopiuj wybrany plik ini (zobacz ni¿ej) do swojego katalogu &apos;%WINDOWS%&apos; na Windows 95/98 lub do katalogu &apos;%SYSTEMROOT%&apos; na Windows NT lub Windows 2000 i zmieñ jego nazwê na <filename>php.ini</filename>. Twój katalog &apos;%WINDOWS%&apos; lub &apos;%SYSTEMROOT%&apos; to zazwyczaj: <simplelist> <member>c:\windows na Windows 9x/Me</member> <member>c:\winnt lub c:\winnt40 na NT/2000 Server</member> </simplelist> </para> <para> Plik dystrybucyjny zawiera dwa pliki ini, <filename>php.init-dist </filename> i <filename>php.ini-optimized</filename>. Zalecamy u¿ycie pliku <filename>php.ini-optimized</filename>, poniewa¿ opcje zawarte w tym pliku s± zoptymalizowane pod wzglêdem wydajno¶ci i bezpieczeñstwa. Najlepiej jest przeczywaæ rozdzia³ o <link linkend="configuration.file">opcjach inicjalizacyjnych</link> i ustawiæ ka¿d± opcjê w³asnorêcznie. Jest to dobry sposób je¶li chcesz osi±gn±æ maksimum bezpieczeñstwa, jednak¿e PHP dzia³a dobrze z domy¶lnymi plikami ini. </para> </listitem> <listitem> <para> Wyedytuj swój nowy plik &apos;php.ini&apos;: <itemizedlist> <listitem> <simpara> Musisz zmieniæ parametr 'extension_dir' aby wskazywa³ na twój katalog instalacji PHP, lub tam gdzie umie¶ci³e¶ pliki 'php_*.dll', np. c:\php\extensions </simpara> </listitem> <listitem> <simpara> Je¶li u¿ywasz OmniHTTPd, nie wykonuj tego kroku. Ustaw 'doc_root' aby wskazywa³o na katalog dokumentów serwera, np. c:\apache\htdocs lub c:\webroot </simpara> </listitem> <listitem> <simpara> Wybierz które rozszerzenia chcia³by¶ ³adowaæ kiedy PHP siê uruchamia. Zobacz rozdzia³ o <link linkend="install.windows.extensions">Rozszerzeniach Windows </link>, gdzie mo¿esz znale¼æ informacje jak w³±czyæ te rozszerzenia i co jest ju¿ wbudowane w PHP. Dobrze jest zmusiæ do dzia³ania i przetestowaæ nowo zainstalowane PHP jeszcze przed w³±czeniem rozszerzeñ. </simpara> </listitem> <listitem> <simpara> Na PWS i IIS mo¿esz ustawiæ <filename>browscap.ini</filename> aby wskazywa³o na 'c:\windows\system\inetsrv\browscap.ini' na Windows 9x/Me lub 'c:\winnt\system32\inetsrv\browscap.ini' na NT/2000 Server. </simpara> </listitem> <listitem> <simpara> Katalog <filename>mibs</filename> dostarczany z pakietem dystrybucyjnym dla systemu Windows zawiera pliki z obs³ug± SMTP. Katalog powinien byæ przeniesiony do <filename>NAPÊD:\usr\mibs </filename> (<filename>NAPÊD</filename> to napêd na którym zainstalowane jest PHP). </simpara> </listitem> </itemizedlist> </para> </listitem> </itemizedlist> </para> </sect2> <sect2 id="install.windows.build"> <title>Budowanie ze ¼róde³</title> <para> Przed rozpoczêciem warto jest odpowiedzieæ sobie na pytanie: "Dlaczego budowanie pod Windowsem jest takie trudne?" Do g³owy przechodz± dwie odpowiedzi: </para> <orderedlist> <listitem><simpara> Nie ma du¿ej spo³eczno¶ci programistów lubi±cych Windows którzy chêtnie dziel± siê swoimi kodami ¼ród³owymi. Bezpo¶rednim efektem jest to, ¿e nie poniesione zosta³y niezbêdne inwestycje w infrastrukturê wymagan± do rozwoju oprogramowania. Zasadniczo to co teraz jest dostêpne, to niezbêdne narzêdzia przeniesione z systemu UNIX. Nie zdziw siê, je¶li od czasu do czasu poka¿± siê takie dziedzictwo. </simpara></listitem> <listitem><simpara> Wiêkszosc poni¿szych instrukcji s± w stylu "ustaw i zapomnij". A wiêc usi±d¼ wygodnie i wykonuj polecenia tak dok³adnie jak tylko mo¿esz. </simpara></listitem> </orderedlist> <sect3 id="install.windows.build.prepare"> <title>Przygotowania</title> <para> Zanim zaczniesz, masz du¿o rzeczy do pobrania... </para> <itemizedlist> <listitem><simpara> Dla pocz±tkuj±cych, pobierz zestaw Cygwin z najbli¿szego mirrora <ulink url="http://sources.redhat.com/cygwin/download.html">cygwin </ulink>. Zestaw ten zawiera wiêkszo¶æ popularnych narzêdzi GNU u¿ywanych w procesie budowania. </simpara></listitem> <listitem><simpara> Pobierz resztê narzêdzi niezbêdnych do budowania z <ulink url="http://www.php.net/extra/win32build.zip"> http://www.php.net/extra/win32build.zip</ulink>. </simpara></listitem> <listitem><simpara> Pobierz kod ¼ród³owy reseolvera nazw DNS u¿ywanego przrz PHP z <ulink url="http://www.php.net/extra/bindlib_w32.zip" >http://www.php.net/extra/bindlib_w32.zip</ulink>. Jest to zamiennik biblioteki <filename>resolv.lib</filename> zawartej w <filename>win32build.zip</filename>. </simpara></listitem> <listitem><simpara> Je¶li nie masz narzêdzia unzip, musisz je pobraæ. If you don't already have an unzip utility, you will need one. Darmowa wersja dostêpna jest na <ulink url="http://www.cdrom.com/pub/infozip/UnZip.html">InfoZip</ulink>. </simpara></listitem> </itemizedlist> <simpara> Na koniec, potrzebujesz ¼róde³ samego PHP 4. Mo¿esz pobraæ najnowsze ¼ród³a korzystaj±c z <ulink url="http://www.php.net/anoncvs.php">anonimowego serwera CVS</ulink>. Je¶li pobierzesz plik typu tarball ze <ulink url="http://snaps.php.net/"> snapshotem</ulink> lub <ulink url="http://www.php.net/downloads.php">¼ród³ami</ulink>, nie tylko bêdziesz musia³ odpakowaæ go tar'em i gzip'em, ale tek¿e skonwertowaæ znaki koñca linii w plikach <filename>*.dsp</filename> i <filename>*.dsw</filename> zanim Microsoft Visual C++ bêdzie w stanie cokolwiek z nimi zrobiæ. </simpara> <note> <simpara> Umie¶æ katalogi <filename>Zend</filename> i <filename>TSRM</filename> directories wewn±trz katalogu <filename>php4</filename> aby w procesie budowania by³y znalezione przez projekty. </simpara> </note> </sect3> <sect3 id="install.windows.build.install"> <title>Sk³adanie wszystkiego razem</title> <itemizedlist> <listitem><simpara> Wykonaj poni¿sze instrukcje aby zainstalowaæ narzêdzie Cygwin. </simpara></listitem> <listitem> <simpara> Uruchom <filename>setup.exe</filename> i wykonuj polecenia instalatora. Je¶li wybierzesz ¶cie¿kê instalacji inn± ni¼ <filename>c:\cygnus</filename>, poinformuj o tym proces budowania przez ustawienie zmiennej ¶rodowiskowej Cygwin. Pod systemem Windows 95/98 zmienne ¶rodowiskowe ustawia siê przez dodawanie odpowiedniej linii do pliku autoexec.bat. Pod systemem Windows NT wejd¼ w Mój Komputer =&gt; Panel Sterowania =&gt; System i wybierz zak³adkê ¦rodowisko. </simpara> <warning> <simpara> Stwórz tymczasowy katalog do u¿ytku Cygwin. Bez niego wiele poleceñ (zw³aszcza bison) nie bêdzie dzia³aæ. Na Windows 95/98, <userinput>mkdir C:\TMP</userinput>. Na Windows NT, <userinput>mkdir %SystemDrive%\tmp</userinput>. </simpara> </warning> </listitem> <listitem><simpara> Stwórz katalog i odzipuj <filename>win32build.zip</filename> do niego. </simpara></listitem> <listitem> <simpara> Uruchom Microsoft Visual C++ i z menu wybierz Tools =&gt; Options. W oknie dialogowym wybierz zak³adkê 'Directories'. Kolejno zmieñ listê rozwijan± na Executables, Includes, i Library files, aby siê upewniæ siê, ¿e <filename>cygwin\bin</filename>, <filename>win32build\include</filename>, i <filename>win32build\lib</filename> s± na ka¿dej li¶cie. (Aby dodaæ wpis, wybierz pust± liniê z koñca listy i zacznij pisaæ). Zazwyczaj wpisy wygl±daj± tak: </simpara> <itemizedlist> <listitem><simpara> <filename>c:\cygnus\bin</filename> </simpara></listitem> <listitem><simpara> <filename>c:\php-win32build\include</filename> </simpara></listitem> <listitem><simpara> <filename>c:\php-win32build\lib</filename> </simpara></listitem> </itemizedlist> <simpara> Wci¶nij OK i wyjd¼ z Visual C++. </simpara> </listitem> <listitem> <simpara> Stwórz kolejny katalog i odzipuj do niego <filename>bindlib_w32.zip </filename>. Zdecyduj siê czy potrzebujesz symbole do debugowania (bindlib - Win32 Debug) czy nie (bindlib - Win32 Release). Zbuduj odpowiedni± konfiguracjê: </simpara> <itemizedlist> <listitem><simpara> Dla u¿ytkowników GUI, uruchom VC++ a potem wybierz File =&gt; Open Workspace i wybierz bindlib. Potem wybierz Build=&gt;Set Active Configuration i wybierz po¿±dan± konfiguracjê. Na koniec wybierz Build=&gt;Rebuild All. </simpara></listitem> <listitem> <simpara> Dla u¿ytkowników linii poleceñ, upewnij siê ¿e zarejestrowa³e¶ zmienne ¶rodowiskowe C++ lub uruchomi³e¶ <command>vcvars.bat</command>, a pó¼niej wykonaj jedno z poni¿szych poleceñ: </simpara> <itemizedlist> <listitem> <simpara> <userinput>msdev bindlib.dsp /MAKE "bindlib - Win32 Debug"</userinput> </simpara> </listitem> <listitem> <simpara> <userinput>msdev bindlib.dsp /MAKE "bindlib - Win32 Release"</userinput> </simpara> </listitem> </itemizedlist> </listitem> <listitem><simpara> W tym momencie powiniene¶ mieæ gotowy do u¿ytku <filename>resolv.lib</filename> w katalogu <filename>Debug</filename> lub <filename>Release</filename>. Skopiuj ten plik do katalogu <filename>win32build\lib</filename> nadpisuj±c plik o tej samej nazwie który ju¿ tam istnieje. </simpara></listitem> </itemizedlist> </listitem> </itemizedlist> </sect3> <sect3 id="install.windows.build.compile"> <title>Kompilacja</title> <simpara> Najlepszy sposób na pocz±tek to zbudowanie wersji samodzielnej/CGI. </simpara> <itemizedlist> <listitem><simpara> Dla u¿ytkowników GUI, uruchom VC++, wybierz File =&gt; Open Workspace i wybierz php4ts. Pó¼niej wybierz Build=&gt;Set Active Configuration i wybierz po¿±dan± konfiguracjê. Na koniec wybierz Build=&gt;Rebuild All. </simpara></listitem> <listitem> <simpara> Dla u¿ytkowników linii poleceñ, upewnij siê ¿e zarejestrowa³e¶ zmienne ¶rodowiskowe C++ lub uruchomi³e¶ <command>vcvars.bat</command>, a pó¼niej wykonaj jedno z poni¿szych poleceñ: </simpara> <itemizedlist> <listitem><simpara> <userinput>msdev php4ts.dsp /MAKE "php4ts - Win32 Debug_TS"</userinput> </simpara></listitem> <listitem><simpara> <userinput>msdev php4ts.dsp /MAKE "php4ts - Win32 Release_TS"</userinput> </simpara></listitem> <listitem><simpara> W tym momencie powiniene¶ mieæ gotowy do u¿ytku <filename>php.exe</filename> w katalogu <filename>Debug_TS</filename> lub <filename>Release_TS</filename>. </simpara></listitem> </itemizedlist> </listitem> </itemizedlist> <simpara> Powtórz powy¿sze kroki z plikiem <filename>php4isapi.dsp</filename> (który mo¿e byæ znaleziony w katalogu <filename>sapi\isapi</filename>) aby zbudowaæ kod niezbêdny dla Microsoft IIS. </simpara> </sect3> </sect2> <sect2 id="install.windows.extensions"> <title>Instalacja rozszerzeñ dla Windows</title> <para> Po zainstalowaniu PHP i serwera WWW na systemie Windows prawdobopodobnie bêdziesz chcia³ zainstalowaæ ró¿ne rozszerzenia aby zwiêkszyæ funkcjonalno¶æ PHP. Poni¿sza tabela opisuje niektóre dostêpne rozszerzenia. Mo¿esz wybraæ które rozszerzenia chcesz za³adowaæ kiedy PHP jest uruchamiane poprzez odkomentowanie linii 'extension=php_*.dll' w pliku <filename>php.ini</filename>. Modu³y mo¿esz tak¿e do³±czaæ dynamicznie w swoim skrypcie ko¿ystaj±c z funkcji <function>dl</function>. </para> <para> Nazwy DLLi z rozszerzeniami PHP 4 zaczynaj± siê od 'php_' ('php3_' w przypadku PHP 3). Zapobiega to pomieszaniu rozszerzeñ PHP i wspieraj±cych je bibliotek. </para> <note> <para> W PHP 4.0.6 obs³uga BCMath, Calendar, COM, FTP, MySQL, ODBC, PCRE, Sesji, WDDX i XML jest <emphasis>wbudowana</emphasis>. Nie potrzbujesz ³adowaæ ¿adnych dodatkowych rozszerzeñ aby korzystaæ z tych funkcji. Przeczytaj zawarto¶æ pliku <filename>README.txt</filename> lub <filename>install.txt</filename> aby uzyskaæ listê wbudowanych modu³ów. </para> </note> <note> <para> Niektóre z tych rozszerzeñ potrzebuj± do pracy dodatkowych DLLi. Kilka z nich mo¿na znale¼æ w pakiecie dystrybucyjnym, w katalogu &apos;dlls&apos;, ale dla niektórych, takich jak Oracle (php_oci8.dll), wymagane DLLe nie s± do³±czone do pakietu dystrybucyjnego. </para> <para> Skopuj do³±czone DLLe z katalogi &apos;dlls&apos; do katalogu który przeszukije Windows. Dobrymi miejscami s±: <simplelist> <member>c:\windows\system dla Windows 9x/Me</member> <member>c:\winnt\system32 dla Windows NT/2000</member> </simplelist> Je¶³i które¶ z nich s± ju¿ zainstalowane na twoim systemie, nadpisz je tylko je¶li co¶ nie dzia³a w porz±dku (przed nadpisaniem ich dobrze jest zrobiæ kopiê zapasow±, lub przenie¶æ je do innego folderu - na wszelki wypadek). </para> </note> <para> <table> <title>Rozszerzenia PHP</title> <tgroup cols="3"> <thead> <row> <entry>Rozszerzenia</entry> <entry>Opis</entry> <entry>Uwagi</entry> </row> </thead> <tbody> <row> <entry>php_bz2.dll</entry> <entry><link linkend="ref.bzip2">bzip2</link> - funkcje kompresji</entry> <entry>Brak</entry> </row> <row> <entry>php_calendar.dll</entry> <entry><link linkend="ref.calendar">Calendar</link> - funkcje konwersji kalendarza</entry> <entry>Wbudowane od PHP 4.0.3</entry> </row> <row> <entry>php_cpdf.dll</entry> <entry>funkcje <link linkend="ref.cpdf">ClibPDF</link></entry> <entry>Brak</entry> </row> <row> <entry>php3_crypt.dll</entry> <entry>funkcje Crypt</entry> <entry>Brak</entry> </row> <row> <entry>php_ctype.dll</entry> <entry>rodzina funcji<link linkend="ref.ctype">ctype</link></entry> <entry>Brak</entry> </row> <row> <entry>php_curl.dll</entry> <entry><link linkend="ref.curl">CURL</link>, Client URL</entry> <entry>Wymaga: libeay32.dll, ssleay32.dll (do³±czone do dystrybucji)</entry> </row> <row> <entry>php_cybercash.dll</entry> <entry>funkcje op³at <link linkend="ref.cybercash">Cybercash</link></entry> <entry>Brak</entry> </row> <row> <entry>php_db.dll</entry> <entry>funkcje <link linkend="ref.dbm">DBM</link></entry> <entry>Niezalecane. Zamiast tego u¿yj DBA (php_dba.dll)</entry> </row> <row> <entry>php_dba.dll</entry> <entry>funkcje <link linkend="ref.dba">DBA</link>: DataBase (dbm-style) Abstraction Layer</entry> <entry>Brak</entry> </row> <row> <entry>php_dbase.dll</entry> <entry>funkcje <link linkend="ref.dbase">dBase</link></entry> <entry>Brak</entry> </row> <row> <entry>php3_dbm.dll</entry> <entry>biblioteka Berkeley DB2</entry> <entry>Brak</entry> </row> <row> <entry>php_domxml.dll</entry> <entry>funkcje <link linkend="ref.domxml">DOM XML</link></entry> <entry>Wymaga: libxml2.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_dotnet.dll</entry> <entry>funkcje .NET</entry> <entry>Brak</entry> </row> <row> <entry>php_exif.dll</entry> <entry>nag³ówki <link linkend="function.read-exif-data">Read EXIF</link> z JPEG</entry> <entry>Brak</entry> </row> <row> <entry>php_fbsql.dll</entry> <entry>funkcje <link linkend="ref.fbsql">FrontBase</link></entry> <entry>Brak</entry> </row> <row> <entry>php_fdf.dll</entry> <entry>funkcje <link linkend="ref.fdf">FDF</link>: Forms Data Format</entry> <entry>Wymaga: fdftk.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_filepro.dll</entry> <entry>funkcje <link linkend="ref.filepro">filePro</link></entry> <entry>Dostêp tylko do odczytu</entry> </row> <row> <entry>php_ftp.dll</entry> <entry>funkcje <link linkend="ref.ftp">FTP</link></entry> <entry>Wbudowane od PHP 4.0.3</entry> </row> <row> <entry>php_gd.dll</entry> <entry>Biblioteka obróbki obrazów <link linkend="ref.image">GD</link></entry> <entry>Brak</entry> </row> <row> <entry>php_gettext.dll</entry> <entry>funkcje <link linkend="ref.gettext">Gettext</link></entry> <entry>Wymaga: gnu_gettext.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_hyperwave.dll</entry> <entry>funkcje <link linkend="ref.hyperwave">HyperWave</link></entry> <entry>Brak</entry> </row> <row> <entry>php_iconv.dll</entry> <entry>konwersja tablicy znaków <link linkend="ref.iconv">ICONV</link></entry> <entry>Wymaga: iconv-1.3.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_ifx.dll</entry> <entry>funkcje <link linkend="ref.ifx">Informix</link></entry> <entry>Wymaga: bibliotek Informix</entry> </row> <row> <entry>php_iisfunc.dll</entry> <entry>funkcje zarz±dzania IIS</entry> <entry>Brak</entry> </row> <row> <entry>php_imap.dll</entry> <entry>funkcje <link linkend="ref.imap">IMAP</link>, POP3 i NNTP</entry> <entry>PHP 3: php3_imap4r1.dll</entry> </row> <row> <entry>php_ingres.dll</entry> <entry>funkcje <link linkend="ref.ingres">Ingres II</link></entry> <entry>Wymaga: bibliotek Ingres II</entry> </row> <row> <entry>php_interbase.dll</entry> <entry>funkcje <link linkend="ref.ibase">InterBase</link></entry> <entry>Wymaga: gds32.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_java.dll</entry> <entry>rozszerzenie <link linkend="ref.java">Java</link></entry> <entry>Wymaga: jvm.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_ldap.dll</entry> <entry>funkcje <link linkend="ref.ldap">LDAP</link></entry> <entry>Wymaga: libsasl.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_mhash.dll</entry> <entry>funkcje <link linkend="ref.mhash">Mhash</link></entry> <entry>Brak</entry> </row> <row> <entry>php_ming.dll</entry> <entry>funkcje <link linkend="ref.ming">Ming</link> dla Flasha</entry> <entry>Brak</entry> </row> <row> <entry>php_msql.dll</entry> <entry>funkcje <link linkend="ref.msql">mSQL</link></entry> <entry>Wymaga: msql.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php3_msql1.dll</entry> <entry>klient mSQL 1</entry> <entry>Brak</entry> </row> <row> <entry>php3_msql2.dll</entry> <entry>klient mSQL 2</entry> <entry>Brak</entry> </row> <row> <entry>php_mssql.dll</entry> <entry>funkcje <link linkend="ref.mssql">MSSQL</link></entry> <entry>Wymaga: ntwdblib.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php3_mysql.dll</entry> <entry>funkcje <link linkend="ref.mysql">MySQL</link></entry> <entry>Wbudowany w PHP 4</entry> </row> <row> <entry>php3_nsmail.dll</entry> <entry>funkcje poczty Netscape</entry> <entry>Brak</entry> </row> <row> <entry>php3_oci73.dll</entry> <entry>funkcje Oracle</entry> <entry>Brak</entry> </row> <row> <entry>php_oci8.dll</entry> <entry>funkcje <link linkend="ref.oci8">Oracle 8</link></entry> <entry>Wymaga: biblioteki klienta Oracle 8</entry> </row> <row> <entry>php_openssl.dll</entry> <entry>funkcje <link linkend="ref.openssl">OpenSSL</link></entry> <entry>Wymaga: libeay32.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_oracle.dll</entry> <entry>funkcje <link linkend="ref.oracle">Oracle</link></entry> <entry>Wymaga: biblioteki klienta Oracle 7</entry> </row> <row> <entry>php_pdf.dll</entry> <entry>funkcje <link linkend="ref.pdf">PDF</link></entry> <entry>Brak</entry> </row> <row> <entry>php_pgsql.dll</entry> <entry>funkcje <link linkend="ref.pgsql">PostgreSQL</link></entry> <entry>Brak</entry> </row> <row> <entry>php_printer.dll</entry> <entry>funkcje <link linkend="ref.printer">Drukarki</link></entry> <entry>brak</entry> </row> <row> <entry>php_sablot.dll</entry> <entry>funkcje <link linkend="ref.xslt">XSLT</link></entry> <entry>Wymaga: sablot.dll (do³±czony do dystrybucji)</entry> </row> <row> <entry>php_snmp.dll</entry> <entry>funkcje <link linkend="ref.snmp">SNMP</link></entry> <entry>tylko NT!</entry> </row> <row> <entry>php_sybase_ct.dll</entry> <entry>funkcje <link linkend="ref.sybase">Sybase</link></entry> <entry>Wymaga: biblioteki klienta Sybase</entry> </row> <row> <entry>php_yaz.dll</entry> <entry>funkcje <link linkend="ref.yaz">YAZ</link></entry> <entry>Brak</entry> </row> <row> <entry>php_zlib.dll</entry> <entry>funkcje kompresji <link linkend="ref.zlib">ZLib</link></entry> <entry>Brak</entry> </row> </tbody> </tgroup> </table> </para> </sect2> </sect1> <sect1 id="install.apache"> <title>Serwery-Apache</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP z serwerem Apache, zarówno na systemach <link linkend="install.apache.unix">Unix</link> i <link linkend="install.apache.windows">Windows</link>. </para> <sect2 id="install.apache.unix"> <title>Szczegó³y instalacji PHP z Apache na systemach Unix.</title> <para> Mo¿esz wybraæ parametry do dodania do <command>configure</command> w linii 8 z <link linkend="install.configure">Kompletnej listy opcji konfiguracji</link>. </para> <example id="install.apache.unix.longer"> <title> Instrukcja instalacji (wersja jako modu³ Apache) </title> <programlisting> 1. gunzip apache_1.3.x.tar.gz 2. tar xvf apache_1.3.x.tar 3. gunzip php-x.x.x.tar.gz 4. tar xvf php-x.x.x.tar 5. cd apache_1.3.x 6. ./configure --prefix=/www 7. cd ../php-x.x.x 8. ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars 9. make 10. make install 11. cd ../apache_1.3.x 12. dla PHP 3: ./configure --activate-module=src/modules/php3/libphp3.a dla PHP 4: ./configure --activate-module=src/modules/php4/libphp4.a 13. make 14. make install Zamiast tego kroku mo¿esz poprostu skopiowaæ plik binarny httpd przebijaj±c istniej±cy plik. Przedtem upewnij siê, ¿e serwer jest zastopowany. 15. cd ../php-x.x.x 16. dla PHP 3: cp php3.ini-dist /usr/local/lib/php3.ini dla PHP 4: cp php.ini-dist /usr/local/lib/php.ini Mo¿esz wyedytowaæ swój plik .ini aby ustawiæ opcje PHP. Je¶li chcesz u¿yæ innej lokalizacji, u¿yj --with-config-file-path=/path w punkcie 8. 17. Wyedytuj swój plik httpd.conf lub srm.conf i dodaj: Dla PHP 3: AddType application/x-httpd-php3 .php3 Dla PHP 4: AddType application/x-httpd-php .php W tym miejscu mo¿esz wybraæ dowolne rozszerzenie. .php jest tym sugerowanym. Mo¿esz nawet u¿yæ rozszerzenie .html . 18. U¿yj zwyk³ej procedury dla uruchomienia serwera Apache. (Musisz zatrzymaæ i ponownie uruchomiæ serwer, nie tylko spowodowaæ prze³adowanie serwera u¿ywaj±c sygna³ HUP lub USR1.) </programlisting> </example> <para> Zale¿nie od wersji Apache i rodzaju Uniksa, jest wiele mo¿liwo¶ci aby zatrzymaæ i ponownie uruchomiæ serwer. Poni¿ej znajduj± siê typowe polecenia s³u¿±ce do reinstalacji serwera dla ró¿nych wariantów Apache/Uniksa. Powiniene¶ zamieniæ <literal>/path/to/</literal> na ¶cie¿kê do w³a¶ciwych aplikacji na swoich systemach. <informalexample> <programlisting> 1. Kilka wariantów Linuksa i SysV: /etc/rc.d/init.d/httpd restart 2. U¿ywaj±c skrypty apachectl: /path/to/apachectl stop /path/to/apachectl start 3. httpdctl i httpsdctl (U¿ywaj±c OpenSSL), podobnie do apachectl: /path/to/httpsdctl stop /path/to/httpsdctl start 4. U¿ywaj±c mod_ssl, lub innego serwera SSL, mo¿esz rêcznie zatrzymaæ i uruchomniæ serwer: /path/to/apachectl stop /path/to/apachectl startssl </programlisting> </informalexample> Lokalizacje binariów apachectl i http(s)dctl mog± siê ró¿niæ. Je¶li twój system ma polecenia <literal>locate</literal> lub <literal>whereis</literal> albo <literal>which</literal>, mog± one pomóc w szukaniu programów contrl serwera. </para> <para> Ró¿ne przyk³ady kompilacji PHP dla Apache: <informalexample> <programlisting> /configure --with-apxs --with-pgsql </programlisting> </informalexample> </para> <para> Stworzony zostanie wspó³dzielona biblioteka <filename>libphp4.so </filename> które jest ³adowana przez Apache u¿ywaj±c linii LoadModule w pliku <filename>httpd.conf</filename>. W pliku <filename>libphp4.so </filename> zostanie zawarte wsparcie dla biblioteki PostgreSQL. </para> <para> <informalexample> <programlisting> /configure --with-apxs --with-pgsql=shared </programlisting> </informalexample> </para> <para> Tu tak¿e zostanie stworzona biblioteka wspó³dzielona <filename>libphp4.so</filename>, ale zostanie stworzona tak¿e wspó³dzielona biblioteka <filename>pgsql.so</filename> która mo¿e byæ za³adowana do PHP u¿ywaj±c dyrektywy 'extension' w pliku <filename>php.ini</filename> lub poprzez u¿ycie w skrypcie funkcji <function>dl</function>. </para> <para> <informalexample> <programlisting> /configure --with-apache=/path/to/apache_source --with-pgsql </programlisting> </informalexample> </para> <para> Stworzona zostanie biblioteka <filename>libmodphp4.a</filename>, plik <filename>mod_php4.c</filename> i kilka dodatkowych plików, które zostan± skopiowane do katalogu <literal>src/modules/php4</literal> który znajduje siê w drzewie ¼róde³ Apache. Potem skompiluj Apache u¿ywaj±c <literal>--activate-module=src/modules/php4/libphp4.a</literal> a system budowania Apache stworzy <filename>libphp4.a</filename> który zostanie do³±czony statycznie do pliku binarnego <filename>httpd</filename>. Obs³uga PostgreSQLa zostanie w³±czona bezpo¶rednio do pliku binarnego <filename>httpd</filename>, a wiêc wynikiem bêdzie pojedyñczy plik binarny <filename>httpd</filename> który zawiera ca³e Apache i ca³e PHP. </para> <para> <informalexample> <programlisting> /configure --with-apache=/path/to/apache_source --with-pgsql=shared </programlisting> </informalexample> </para> <para> To samo co powy¿ej, ale zamiast do³±czania obs³ugi PostgreSQLL bezpo¶rednio do ostatecznego pliku <filename>httpd</filename> dostaniesz wspó³dzielon± bibliotekê <filename>pgsql.so</filename> któr± mo¿esz za³adowaæ do PHP ko¿ystaj±c z pliku <filename>php.ini</filename> lub bezpo¶rednio u¿ywaj±c <function>dl</function>. </para> <para> Wybieraj±c sposób budowania PHP powiniene¶ rozwa¿yæ wszystkie wady i zalety ka¿dej metody. Budowanie jako obiekt wspó³dzielony oznacza, ¿e mo¿esz kompilowaæ osobno Apache i nie musisz rekompilowaæ wszystkiego je¶li chcesz dodaæ lub zmieniæ PHP. Wbudowywanie PHP w Apache (metoda statyczna) oznacza, ¿e PHP bêdzie siê ³adowa³o i uruchamia³o szybciej. Aby uzyskaæ wiêcej informacji, zobacz stronê <ulink url="&url.apachedso;">Apache na stronie wsparcia DSO</ulink>. </para> </sect2> <sect2 id="install.apache.windows"> <title>Instalacja PHP na systemie Windows z Apache 1.3.x</title> <simpara> Istniej± 2 sposoby aby skonfigurowaæ PHP do pracy z Apache 1.3.x na systemie Windows. Pierwszy to wykorzystanie binariów CGI (php.exe), a drugi to u¿ycie DLLa modu³u Apache. W obu przypadkach musisz zatrzymaæ serwer Apache i wyedytowaæ plik <filename>srm.conf</filename> lub <filename>httpd.conf</filename> aby przygotowaæ Apache do pracy z PHP. </simpara> <simpara> Pomimo ¿e istnieje kilka sposobów konfiguracji PHP w Apache, te poni¿sze powinny wystarczyæ ka¿demu pocz±tkuj±cemu. Aby uzyskaæ wiêcej informacji o dyrektywach konfiguracyjnych przejrzyj dokumentacjê Apache'a. </simpara> <para> Je¶³i odzipowa³e¶ pakiet PHP do C:\php\ tak jak zosta³o to opisane w rozdziale <link linkend="install.windows.manual">Rêczny proces instalacji </link>, musisz dodaæ do pliku konfiguracyjnego Apache te linie aby ustawiæ binaria CGI: <itemizedlist> <listitem> <simpara> <literal> ScriptAlias /php/ "c:/php/" </literal> </simpara> </listitem> <listitem> <simpara> <literal> AddType application/x-httpd-php .php .phtml </literal> </simpara> </listitem> <listitem> <simpara> <literal> Action application/x-httpd-php "/php/php.exe" </literal> </simpara> </listitem> </itemizedlist> Druga z powy¿szych linii mo¿e znajdowaæ siê w aktualnych wersjach <filename>httpd.conf</filename>, ale jest wykomentowana. Po zmianie pliku konfiguracyjnego trzeba zrestartowaæ serwer, na przyk³ad <literal>NET STOP APACHE</literal> a potem <literal>NET START APACHE</literal>, je¶li uruchamiasz Apache jako Us³ugê Windows, lub u¿yj normalnych skrótów. </para> <para> Je¶li chcesz u¿ywaæ PHP w postaci modu³u Apache, upewnij siê ¿e plik <filename>php4ts.dll</filename> znajduje siê w katalogu windws/system (dla Windows 9x/Me) lub winnt/system32 (dla Windows NT/2000), nadpisuj±c jakiekolwiek starsze pliki. Potem powiniene¶ dodaæ poni¿sze 2 linie do pliku konfiguracyjnego Apache: <itemizedlist> <listitem> <simpara> <literal> LoadModule php4_module c:/php/sapi/php4apache.dll </literal> </simpara> </listitem> <listitem> <simpara> <literal> AddType application/x-httpd-php .php .phtml </literal> </simpara> </listitem> </itemizedlist> </para> <note> <simpara> W Apache 1.3.22 dla Windows, domy¶lny plik konfiguracyjny (<filename>httpd.conf-dist-win</filename>) ma domy¶lnie do³±czon± dyrektywê <literal>ClearModuleList</literal>. Je¶li ta dyrektywa znajduje siê w pliku konfiguracyjnym, musisz dodaæ <literal>AddModule mod_php4.c</literal> do listy <literal>AddModule</literal>. W przeciwnym razie PHP nie bêdzie zarejestrowane jako modu³ Apache. </simpara> </note> <simpara> Aby u¿yæ opcji pod¶wietlania kodu, po prostu stwórz skrypt PHP i wstaw do niego: <literal>&lt;?php show_source ("original_php_script.php"); ?> </literal>. Zamieñ <literal>original_php_script.php</literal> na nazwê pliku którego ¼ród³o chcesz pokazaæ. (Jest to jedyny sposób na zrobienie tego, poniewa¿ pod systemem Windows nie ma opcji .phps). </simpara> <note> <simpara> Na Win-Apache wszystkie znaki backslash ('\') w ¶cie¿kach, jak na przyk³ad "c:\directory\file.ext", musz± byæ zamienione na znaki slash ('/'), czyli "c:/directory/file.ext". </simpara> </note> </sect2> </sect1> <sect1 id="install.commandline"> <title>Serwery-CGI/Linia poleceñ</title> <para> Domy¶lnie PHP jest budowane jako program CGI. Jest to interpreter z lini± poleceñ, który mo¿e byæ u¿yty do przetwarzania CGI, lub skryptowania nie zwi±zanego z WWW. Je¶li twój serwer jest obs³ugiwany przez PHP w postaci modu³u, powiniene¶ wybraæ to rozwi±zanie ze wzglêdu na wydajno¶æ. Jednak¿e wersja CGI umo¿liwia u¿ytkownikom serwera Apache uruchamiaæ strony u¿ywaj±ce PHP z poziomu ró¿nych u¿ytkowników. Przeczytaj rozdzia³ <link linkend="security">Bezpieczeñstwo</link> je¶li zamierzasz uruchomiæ PHP jako CGI. </para> <sect2 id="install.commandline.testing"> <title>Testowanie</title> <simpara> Je¶li zbudowa³e¶ PHP jako program CGI, mo¿esz przetestowaæ swoj± wersjê u¿ywaj±c polecenia <command>make test</command>. Przetestowanie skompilowanej przez siebie wersji jest zasadniczo dobrym pomys³em. Test umo¿liwia wczesne wykrycie problemów z PHP, które mog³yby ujawniæ siê pó¼niej. </simpara> </sect2> <sect2 id="install.commandline.benchmarking"> <title>Benchmarking</title> <simpara> Je¶li zbudowa³e¶ PHP 3 jako program CGI, mo¿esz sprawdziæ jego wydajno¶æ wydaj±c polecenie <command>make bench</command>. Zauwa¿, ¿e je¶li PHP dzia³a domy¶lnie w <link linkend="features.safe-mode">Trybie Bezpiecznym</link>, benchmark mo¿e siê nie skoñczyæ je¶li trwa wiêcej ni¿ dozwolone 30 sekund. Dzieje siê tak dlatego, ¿e w trybie bezpiecznym nie mo¿na u¿yæ funkcji <function>set_time_limit</function>. U¿yj opcji konfiguracji <link linkend="ini.max-execution-time">max_execution_time</link> aby ustawiæ maksymalny czas wykonywania dla twoich skryptów. <command>make bench</command> ignoruje <link linkend="configuration.file">plik konfiguracyjny</link>. </simpara> <note> <simpara> <command>make bench</command> jest dostêpne tylko dla PHP 3. </simpara> </note> </sect2> </sect1> <sect1 id="install.fhttpd"> <title>Serwery-fhttpd</title> <para> Aby zbudowaæ PHP jako modu³ fhttpd, odpowiedz "yes" na pytanie "Build as an fhttpd module?" (opcja konfiguracji <option><link linkend="install.configure.with-fhttpd"> --with-fhttpd</link>=<replaceable>DIR</replaceable></option>) i okre¶l katalog z fhttpd. Domy¶lnym katalogiem jest <filename class="directory">/usr/local/src/fhttpd</filename>. Je¶li korzystasz z fhttpd, zbudowanie PHP jako modu³ zwiêkszy wydajno¶æ, kontrolê i umo¿liwi zdalne uruchamianie. </para> </sect1> <sect1 id="install.caudium"> <title>Serwery-Caudium</title> <para> PHP 4 mo¿e byæ zbudowane jako modu³ Pike dla serwera Caudium. Zauwa¿, ¿e ta opcja nie jest mo¿liwa w PHP 3. Wype³nij poni¿sze instrukcje aby zainstalowaæ PHP 4 dla Caudium. </para> <example id="install.caudium.instructions"> <title>Instrukcje Instalacji dla Caudium</title> <programlisting> 1. Upewnij siê, ¿e Caudium zosta³o zainstalowane przed rozpoczêciem instalacji PHP 4. Aby PHP 4 dzia³a³o prawid³owo, potrzebny jest Pike 7.0.268 lub nowszy. Dla przyk³adu za³ó¿my, ¿e Caudium jest zainstalowany w katalogu /opt/caudium/server/. 2. Zmieñ katalog na php-x.y.z (gdzie x.y.z to numer wersji). 3. ./configure --with-caudium=/opt/caudium/server 4. make 5. make install 6. Zrestartuj Caudium je¶li aktualnie jest uruchomiony.. 7. Zaloguj siê fo graficznego interfejsu konfiguracyjnego i przejd¼ do serwerów wirtualnych do których chcesz dodaæ obs³ugê PHP 4. 8. Wybierz Add Module i znajd¼ i dodaj modu³ PHP 4 Script Support. 9. Je¶li w dokumentacji napisane jest 'PHP 4 interpreter isn't available', upewnij siê, ¿e zrestartowa³e¶ serwer. Je¶li tak, sprawd¼ /opt/caudium/logs/debug/default.1 pod k±tem b³êdów zwi±zanych z <filename>PHP4.so</filename>. Sprawd¼ tak¿e czy plik <filename>caudium/server/lib/[wersja-pike]/PHP4.so</filename> istnieje. 10. Skonfiguruj modu³ PHP Script Support je¶li to konieczne. </programlisting> </example> <para> Mo¿esz oczywi¶cie skompilowaæ modu³ Caudium z obs³ug± dla ró¿nych rozszerzeñ dostêpnych w PHP 4. Zobacz <link linkend="install.configure">kompletn± listê opcji konfiguracji </link>. </para> <note> <para> Kompiluj±c PHP 4 z obs³ug± MySQL musisz siê upewniæ, ¿e u¿yty zosta³ normalny kod klienta MySQL. W przeciwnym przypadku mog± wyst±piæ konflikty je¶li Pike ma ju¿ obs³ugê MySQL'a. Robi siê to przez opre¶laj±c katalog instalacji MySQL przy ustawianiu <link linkend="install.configure.with-mysql">opcji --with-mysql </link>. </para> </note> </sect1> <sect1 id="install.iis"> <title>Serwery-IIS/PWS</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce specyficznej dla IIS IIS (Microsoft Internet Information Server) instalacji PHP na <link linkend="install.iis.iis3">PWS/IIS 3</link>, <link linkend="install.iis.pws4">PWS 4 lub nowszym</link> i <link linkend="install.iis.iis4">IIS 4 lub nowszym</link>. </para> <sect2 id="install.iis.iis3"> <title>Windows i PWS/IIS 3</title> <simpara> Zalecan± metod± konfiguracji tych serweró jest u¿ycie plików rejestru do³±czonych do dystrybucji PHP 4 (pws-php4cgi.reg). Mo¿esz chcieæ wyedytowaæ ten plik aby siê upewniæ, ¿e rozszerzenia i katalogi instalacji PHP pasuj± do twojej konfiguracji. Mo¿esz tak¿e wykonaæ poni¿sze kroki aby przeprowadziæ instalacjê rêcznie. </simpara> <warning> <para> Poni¿sze kroki prowadz± do bezpo¶redniej pracy na rejestrze Windows. Jeden b³±d mo¿e pozostawiæ system w stanie niestabilnym. Wysoce zalecane jest zrobienie kopii zapasowej rejestru. Zespó³ PHP nie bêdzie odpowiedzialny w wypadku uszkodzenia rejestru. </para> </warning> <para> <itemizedlist> <listitem> <simpara> Uruchom Regedit. </simpara> </listitem> <listitem> <simpara> Przejd¼ do: <literal>HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap</literal>. </simpara> </listitem> <listitem> <simpara> W menu Edycja wybierz: <literal>Nowy->Warto¶æ ci±gu</literal>. </simpara> </listitem> <listitem> <simpara> Wpisz rozszerzenia, które chcesz aby by³y przypisane do PHP, np. <literal>.php</literal> </simpara> </listitem> <listitem> <simpara> Podwójnie kliknij na nowej warto¶ci ci±gu i wpisz ¶cie¿kê do <literal>php.exe</literal> w warto¶ci pola, np. <literal>c:\php\php.exe</literal>. </simpara> </listitem> <listitem> <simpara> Ponów te kroki dla ka¿dego rozszerzenia, które chcesz przypisaæ do skryptów PHP. </simpara> </listitem> </itemizedlist> </para> <para> Poni¿sze kroki nie wp³ywaj± na serwer WWW i stosuje siê je tylko je¶li chcesz aby istnia³a mo¿liwo¶æ uruchamiania twoich skryptów PHP z linii poleceñ (np. uruchamiaj±c <filename>c:\myscripts\test.php</filename>) lub przez podwójne klikniêcie na nich w okienku katalogu. Mo¿esz pomin±æ te kroki je¶li chcesz, ¿eby podwójne klikniêcie na skrypcie wywo³ywa³o edytor. </para> <para> <itemizedlist> <listitem> <simpara> Teraz przejd¼ do: <literal>HKEY_CLASSES_ROOT</literal> </simpara> </listitem> <listitem> <simpara> Z menu Edycja wybierz: <literal>Nowy->Klucz</literal>. </simpara> </listitem> <listitem> <simpara> Nazwij klucz rozszerzeniem które ustawi³e¶ w poprzednim punkcie, np. <literal>.php</literal> </simpara> </listitem> <listitem> <simpara> Zaznacz nowy klucz i w prawym panelu podwójnie kliknij na "warto¶æ domy¶³na" i wpisz <literal>phpfile</literal>. </simpara> </listitem> <listitem> <simpara> Powtórz ostatni krok dla ka¿dego rozszerzenia które ustawi³e¶ w poprzednich punktach. </simpara> </listitem> <listitem> <simpara> Teraz stwórz kolejny <literal>Nowy->Klucz</literal> pod <literal>HKEY_CLASSES_ROOT</literal> i nazwij go <literal>phpfile</literal>. </simpara> </listitem> <listitem> <simpara> Zaznacz nowy klucz <literal>phpfile</literal> i w prawym panelu podwójnie kliknij na "warto¶æ domy¶lna" i wpisz <literal>PHP Script</literal>. </simpara> </listitem> <listitem> <simpara> Kliknij prawym przyciskiem na kluczu <literal>phpfile</literal> i wybierz <literal>Nowy->Klucz</literal>, nazwij go <literal>Shell</literal>. </simpara> </listitem> <listitem> <simpara> Kliknij prawym przyciskiem na kluczu <literal>Shell</literal> i wybierze <literal>Nowy->Klucz</literal>, nazwij go <literal> open</literal>. </simpara> </listitem> <listitem> <simpara> Kliknij prawym przyciskiem na kluczu <literal>open</literal> i wybierz <literal>Nowy->Klucz</literal>, nazwij to <literal>command</literal>. </simpara> </listitem> <listitem> <simpara> Zaznacz nowy klucz <literal>command</literal>, w prawym panelu podwójnie kliknij na "warto¶æ domy¶lna" i wpisz ¶cie¿kê do <filename>php.exe</filename>, np. <literal>c:\php\php.exe -q %1 </literal>. Nie zapomnij o <literal>%1</literal>. </simpara> </listitem> <listitem> <simpara> Wyjd¼ z progamu Regedit. </simpara> </listitem> <listitem> <simpara> Je¶li u¿ywasz PWS na systemie windows, uruchom system ponownie aby prze³adowaæ rejestr. </simpara> </listitem> </itemizedlist> </para> <simpara> U¿ytkownicy serwerów PWS i IIS 3 maj± teraz w pe³ni funkcjonalny system. U¿ytkownicy IIS 4 mog± skorzystaæ ze sprytnego <ulink url="&url.iiscfg;">narzêdzia</ulink> autorstwa Stevena Genusa aby skonfigurowaæ swoje mapowania skryptów. </simpara> </sect2> <sect2 id="install.iis.pws4"> <title>Windows i PWS 4 lub nowszy</title> <simpara> Instaluj±c PHP na systemie Windows z PWS 4 lub nowszym, masz do wyboru 2 mo¿liwo¶ci. Albo zainstalowaæ PHP jako binaria CGI, lub jako modu³ dll ISAPI. </simpara> <para> Je¶li wybierzesz binaria CGI, wykonaj poni¿sz± instrukcjê. If you choose the CGI binary, do the following: <itemizedlist> <listitem> <simpara> Wyedytuj za³±czony plik <filename>pws-php4cgi.reg</filename> (zajrzyj do katalogu <filename>sapi</filename>) aby ustaliæ po³o¿enie twojego pliku php.exe. Znaki slash ('\') powinny zostaæ zamienione na sekwencje escape, na przyk³ad: <literal>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] ".php"="c:\\php\\php.exe"</literal> </simpara> </listitem> <listitem> <simpara> W PWS Manager, kliknij prawym przyciskiem na katalogu, do którego chcesz dodaæ obs³ugê PHP, i wybierz <literal>Properties</literal>. Zaznacz pole 'Execute' i potwierd¼. </simpara> </listitem> </itemizedlist> </para> <para> Je¶³i wybierzesz modu³ ISAPI, wykonaj poni¿sz± instrukcjê: <itemizedlist> <listitem> <simpara> Wyedytuj za³±cziony plik <filename>pws-php4isapi.reg</filename> (zajrzyj do katalogu <filename>sapi</filename>) aby ustaliæ po³o¿enie twojego pliku <filename>php4isapi.dll</filename>. Znaki slash ('\') powinny byæ zamienione na sekwencje escape, na przyk³ad: <literal>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script Map] ".php"="c:\\php\\sapi\\php4isapi.dll"</literal> </simpara> </listitem> <listitem> <simpara> W PWS Manager, kliknij prawym przyciskiem na katalogu, do którego chcesz dodaæ obs³ugê PHP, i wybierz <literal>Properties</literal>. Zaznacz pole 'Execute' i potwierd¼. </simpara> </listitem> </itemizedlist> </para> </sect2> <sect2 id="install.iis.iis4"> <title>Windows NT/2000 i IIS 4 lub nowszy</title> <simpara> Aby zainstalowaæ PHP na systemie NT/2000 Server z serwerm WWW IIS 4 lub nowszym, wype³nij poni¿sze instrukcje. Masz dwie mo¿liwo¶ci korzystania z PHP: u¿ywaj±c binariów CGI (<filename>php.exe</filename>) lub modu³u ISAPI. </simpara> <simpara> W obu przypadkach, musisz uruchomiæ Microsoft Management Console (mo¿e istnieæ jako 'Internet Services Manager', w Windows NT 4.0 Option Pack lub w Control Panel=&gt;Administrative Tools w Windows 2000). Potem kliknij prawym przyciskiem na wê¼le twojego serwera WWW (najprawdopodobniej bêdzie to 'Default Web Server'), i wybierz 'Properties'. </simpara> <para> Je¶li chcesz u¿ywaæ binariów CGI, wykonaj poni¿sze kroki: <itemizedlist> <listitem> <simpara> W 'Home Directory', 'Virtual Directory', lub 'Directory', kliknij na 'Configuration', a pó¼niej wybierz zak³adkê App Mappings. </simpara> </listitem> <listitem> <simpara> Wybierz Add, a w polu Executable, wpisz: <literal>c:\php\php.exe</literal> (zak³adaj±c, ¿e odzipowa³e¶ PHP do c:\php\). </simpara> </listitem> <listitem> <simpara> W polu Extension wpisz rozszerzenia nazw plików, które chcesz skojarzyæ ze skryptami PHP. Pozostaw 'Method exclusions' niewype³nione i zaznacz pole 'Script engine'. Mo¿esz tak¿e chcieæ zaznaczyæ pole 'Check that file exists' - za cenê ma³ego zmniejszenia wydajno¶ci IIS (lub PWS) bêdzie sprawdza³ czy skrypt istnieje i ustawi autentykacjê przed uruchamianiem PHP. Oznacza to, ¿e dosteniesz standardowy komunikat b³êdu 404 zamiast b³êdów CGI informuj±cych, ¿e PHP nie wys³a³o ¿adnych danych. </simpara> <simpara> Musisz wykonaæ powy¿szy krok dla ka¿dego rozszerzenia, które chcesz skojarzyæ ze skryptami PHP. Najczê¶ciej spotykane s± rozszerzenia <literal>.php</literal> and <literal>.phtml</literal>, jednak¿e dla wstecznej kompatybilno¶ci dobrze jest dodaæ tak¿e rozszerzenie <literal>.php3</literal>. </simpara> </listitem> <listitem> <simpara> Skonfiguruj odpowiednio kwerstie bezpieczeñstwa (robi siê to korzystaj±c z programu Internet Service Manager) i je¶li twój NT Server u¿ywa system plików NTFS, dodaj prawa wykonywania dla I_USR_ do katalogu, który zawiera <literal>php.exe</literal>. </simpara> </listitem> </itemizedlist> </para> <para> Aby u¿yæ modu³ ISAPI, wykonaj poni¿sze polecenia: <itemizedlist> <listitem> <simpara> Je¶li nie chcesz Autentyfikacji HTTP u¿ywaj±c PHP, mo¿esz (i powiniene¶) pomin±æ ten krok. W ISAPI Filters, dodaj nowy filtr ISAPI. U¿yj PHP jako nazwê filtra, i dopisz ¶cie¿kê do pliku <filename>php4isapi.dll</filename> </simpara> </listitem> <listitem> <simpara> W 'Home Directory', kliknij na 'Configuration'. Dodaj nowy wpis do Application Mappings. U¿yj ¶cie¿kê do php4isapi.dll jako Executable, dopisz <literal>.php</literal> jako rozszerzenie, zostaw pole 'Method exclusions' puste, zaznacz pole 'Script engine'. </simpara> </listitem> <listitem> <simpara> Ca³kowicie zatrzymaj IIS (NET STOP iisadmin) </simpara> </listitem> <listitem> <simpara> Uruchom ponownie IIS (NET START w3svc) </simpara> </listitem> </itemizedlist> </para> </sect2> </sect1> <sect1 id="install.netscape-enterprise"> <title>Serwery-Netscape i iPlanet</title> <para> Rozdzia³ ten zawiera wskazówki dotycz±ce instalacji PHP na serwerach Netscape and iPlanet na systemach <link linkend="install.netscape.sun">Sun Solaris</link> i <link linkend="install.netscape.windows">Windows</link>. </para> <para> You can find more information about setting up PHP for the Netscape Enterprise Server here: <ulink url="&url.netscape.nsapi;">&url.netscape.nsapi;</ulink> </para> <sect2 id="install.netscape.sun"> <title>Instalacja PHP z Netscape na Sun Solaris</title> <para> Aby zbudowaæ PHP z serwerami NES lub iPlanet, wejd¼ do katalogu, który poda³by¶ jako parametr opcji <option><link linkend="install.configure.with-nsapi">--with-nsapi</link> = <replaceable>KATALOG</replaceable></option>. Zazwyczaj jest to <filename class="directory">/opt/netscape/suitespot/</filename>. Przeczytaj tak¿e <filename>/php-xxx-version/sapi/nsapi/nsapi-readme.txt</filename>. </para> <para> <example id="install.netscape-enterprise.solaris"> <title>Przyk³ad instalacji dla Netscape Enterprise na Solaris</title> <programlisting> Instrukcje dla Sun Solaris 2.6 z Netscape Enterprise Server 3.6 Od: bhager@invacare.com 1. Zainstaluj poni¿sze pakiety z www.sunfreeware.com lub innego serwisu: flex-2_5_4a-sol26-sparc-local gcc-2_95_2-sol26-sparc-local gzip-1.2.4-sol26-sparc-local perl-5_005_03-sol26-sparc-local bison-1_25-sol26-sparc-local make-3_76_1-sol26-sparc-local m4-1_4-sol26-sparc-local autoconf-2.13 automake-1.4 mysql-3.23.24-beta (je¶li potrzebujesz wsparcie dla MySQL) tar-1.13 (GNU tar) 2. Upewnij siê, ¿e zmienna PATH zawiera w³a¶ciwe katalogi PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin export PATH 3. gunzip php-x.x.x.tar.gz (je¶li masz plik .gz, je¶li nie przejd¼ do punktu 4) 4. tar xvf php-x.x.x.tar 5. cd ../php-x.x.x 6. Dla poni¿szego kroku upewnij siê, ¿e serwer Netscape jest zainstalowany w /opt/netscape/suitespot/. W przeciwnym wypadku zmieñ ¶cie¿kê na w³a¶ciw±: ./configure --with-mysql=/usr/local/mysql --with-nsapi=/opt/netscape/suitespot/ --enable-track-vars --enable-libgcc 7. make 8. make install </programlisting> </example> Po wykonaniu podstawowej instalacji i przeczytaniu w³a¶ciwego pliku readme, niezbêdne mo¿e siê okazaæ wykanie dodatkowych kroków konfiguracyjnych. </para> <para> Najprawdopodobniej niezbêdne mo¿e siê okazaæ dodanie ¶cie¿ek do zmiennej ¶rodowiskowej aby Netscape móg³ znale¼æ biblioteki wspó³dzielone. Najlepiej, ¿eby by³o to robione w skryptach startowych serwera Netscape. U¿ytkownicy Windowsów prawdopodobnie mog± pomin±æ ten krok. Skrypt startowy zazwyczaj znajduje siê w: <filename class="directory">/¶cie¿ka/do/serwera/https-servername/start</filename> </para> <para> Mo¿e siê tak¿e okazaæ potrzebna edycja plików konfiguracyjnych, które znajduj± siê w: <filename class="directory">/¶cie¿ka/do/serwera/https-servername/config/</filename>. </para> <example id="install.netscape-enterprise.configure"> <title> Przyk³ad konfiguracji dla Netscape Enterprise </title> <programlisting> Instrukcje konfiguracji Netscape Enterprise Server Od: bhager@invacare.com 1. Dodaj poni¿sz± liniê do mime.types: type=magnus-internal/x-httpd-php exts=php 2. Dodaj poni¿sze linie do obj.conf. shlib mo¿e siê ró¿niæ zale¿nie od systemu operacyjnego; dla systemu Unix bêdzie to co¶ w stylu /opt/netscape/suitespot/bin/libphp4.so. Powiniene¶ umie¶ciæ poni¿sze linie po inicjalizacji typów mime. Init fn="load-modules" funcs="php4_init,php4_close,php4_execute,php4_auth_trans" shlib="/php4/nsapiPHP4.dll" Init fn=php4_init errorString="Failed to initialize PHP!" &lt;object name="default"&gt; . . . .#UWAGA nastêpna linia powinna siê znajdowaæ po wszystkich liniach .#'ObjectType i przed wszystkimi 'AddLog' Service fn="php4_execute" type="magnus-internal/x-httpd-php" . . &lt;/Object&gt; &lt;Object name="x-httpd-php"&gt; ObjectType fn="force-type" type="magnus-internal/x-httpd-php" Service fn=php4_execute &lt;/Object&gt; Konfiguracja autentyfikacji Autentyfikacja PHP nie mo¿e byæ u¿yta z ¿adn± inn± autentyfikacj±. CA£A AUTENTYFIKACJA JEST PRZEKAZYWANA DO SKRYPTU PHP. Aby skonfigurowaæ autentyfikacjê PHP dla ca³ego serwera, dodaj poni¿sz± liniê: &lt;Object name="default"&gt; AuthTrans fn=php4_auth_trans . . . . &lt;/Object&gt; Aby w³±czyæ autentyfikacjê PHP w pojedyñczym katalogu, dodaj poni¿sz± liniê: &lt;Object ppath="d:\¶cie¿ka\do\autentyfikowanego\katalgu\*"&gt; AuthTrans fn=php4_auth_trans &lt;/Object&gt; </programlisting> </example> <para> Je¶li u¿ywasz Netscape Enterprise 4.x powiniene¶ u¿yæ poni¿sz± konfiguracjê: </para> <example> <title>Przyk³ad konfiguracji dla Netscape Enterprise 4.x</title> <programlisting> Umie¶æ poni¿sze ponie po inicjalizacji typów mime, a wszystko inne jest takie same jak w przyk³adzie powy¿ej. Od: Graeme Hoose (GraemeHoose@BrightStation.com) Init fn="load-modules" shlib="/path/to/server4/bin/libphp4.so" funcs="php4_init,php4_close,php4_execute,php4_auth_trans" Init fn="php4_init" LateInit="yes" </programlisting> </example> </sect2> <sect2 id="install.netscape.windows"> <title>Instajacja PHP dla Netscape na Windows</title> <para> Aby zainstalowaæ PHP jako CGI (dla Netscape Enterprise Server, iPlanet, byæ mo¿e Fastrack), wykonaj poni¿sze czynno¶ci: </para> <itemizedlist> <listitem> <simpara> Skopiuj <filename>php4ts.dll</filename> do twojego katalogu systemowego (katalog w którym zainstalowa³e¶ Windows) </simpara> </listitem> <listitem> <para> Stwórz powi±zanie plików z linii poleceñ. Napisz poni¿sze dwie linie: <programlisting> assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %* </programlisting> </para> </listitem> <listitem> <simpara> W Netscape Enterprise Administration Server stwórz atrapê katalogu shellcgi i usuñ go po chwili (ten krok dodaje 5 wa¿nych linii do pliku <filename>obj.conf</filename> i pozwala serwerowi na obs³ugê skryptów shellcgi). </simpara> </listitem> <listitem> <simpara> W Netscape Enterprise Administration Server stwórz nowy typ mime (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php). </simpara> </listitem> <listitem> <simpara> Zrób to dla ka¿dej instancji serwera na której chcesz uruchomiæ PHP. </simpara> </listitem> </itemizedlist> <para> Wiêcej szczegó³ów o ustawianiu PHP jako plik wykonywalny CGI mo¿na znale¼æ pod adresem: <ulink url="&url.netscape.cgi;">&url.netscape.cgi;</ulink> </para> <para> Aby zainstalowaæ PHP jako NSAPI (dla Netscape Enterprise Server, iPlanet, byæ mo¿e Fastrack), wykonaj poni¿sze kroki: </para> <itemizedlist> <listitem> <simpara> Skopiuj <filename>php4ts.dll</filename> do swojego katalogu systemowego (katalog w którym zainstalowany jest Windows) </simpara> </listitem> <listitem> <para> Stwórz skojarzenia plików z linii poleceñ. Wykonaj dwa poni¿sze polecenia: <programlisting> assoc .php=PHPScript ftype PHPScript=c:\php\php.exe %1 %* </programlisting> </para> </listitem> <listitem> <simpara> W Netscape Enterprise Administration Server stwórz nowy typ mime (Category: type, Content-Type: magnus-internal/x-httpd-php, File Suffix:php). </simpara> </listitem> <listitem> <para> Zatrzymaj us³ugi WWW i wyedytuj <filename>obj.conf</filename>. Na koñcu sekcji Ini, umie¶æ te dwie linie (konicznie po inicjalizacji typów mime!): <programlisting> Init fn="load-modules" funcs="php4_init,php4_close,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll" Init fn="php4_init" errorString="Failed to initialise PHP!" </programlisting> </para> </listitem> <listitem> <para> W sekcji <literal>&lt; Object name="default" &gt;</literal>, umie¶æ poni¿sz± liniê po wszystkich liniach 'ObjectType' i przed wszystkimi liniami 'AddLog': <programlisting> Service fn="php4_execute" type="magnus-internal/x-httpd-php" </programlisting> </para> </listitem> <listitem> <para> Na koñcu pliku stwórz nowy obiekt o nazwie <literal>x-httpd-php</literal> dodaj±c poni¿sze linie: <programlisting> &lt;Object name="x-httpd-php"&gt; ObjectType fn="force-type" type="magnus-internal/x-httpd-php" Service fn=php4_execute &lt;/Object&gt; </programlisting> </para> </listitem> <listitem> <simpara> Zrestartuj us³ugi WWW i nanie¶ zmiany </simpara> </listitem> <listitem> <simpara> Zrób to dla ka¿dej instancji serwera WWW na których chcesz uruchomiæ PHP </simpara> </listitem> </itemizedlist> <para> Wiêcej informacji o ustawianiu PHP jako filtr NSAPI mo¿esz znale¼æ pod adresem: <ulink url="&url.netscape.nsapi;">&url.netscape.nsapi;</ulink> </para> </sect2> </sect1> <sect1 id="install.omnihttpd"> <title>Serwery-OmniHTTPd Server</title> <para> Ten rozdzia³ zawiera wskazówki dotycz±ce instalacji PHP z serwerem OmniHTTPd. </para> <sect2 id="install.omnihttpd.windows"> <title>OmniHTTPd 2.0b1 i wy¿sze dla Windows</title> <simpara> Aby zmusiæ PHP do dzia³ania z OmniHTTPd musisz wykonaæ poni¿sze kroki. Jest to ustawienie z PHP w postaci pliku wykonywalnego CGI. OmniHTTPd obs³uguje SAPI, ale testy wykaza³y, ¿e po³±czenie modu³u PHP ISAPI z OmniHTTPd jest niestabilne. </simpara> <para> <itemizedlist> <listitem> <para> Step 1: Zainstaluj serwer OmniHTTPd. </para> </listitem> <listitem> <para> Step 2: Kliknij prawym przyciskiem na niebieskiej ikonie OmniHTTPd znajduj±cej siê przy zegarku i wybierz <literal>Properties</literal> </para> </listitem> <listitem> <para> Step 3: Kliknij na <literal>Web Server Global Settings</literal> </para> </listitem> <listitem> <para> Step 4: W zak³adce 'External' wpisz: <literal>virtual = .php | actual = c:\path-to-php-dir\php.exe</literal>, i kliknij na przycisk Add. </para> </listitem> <listitem> <para> Step 5: W zak³adce <literal>Mime</literal> wpisz: <literal>virtual = wwwserver/stdcgi | actual = .php</literal>, i kliknij na przycisk Add. </para> </listitem> <listitem> <para> Step 6: Kliknij na <literal>OK</literal> </para> </listitem> </itemizedlist> </para> <simpara> Powtarzaj kroki 2 - 6 dla ka¿dego rozszerzenia które chcesz przypisaæ do PHP. </simpara> <note> <para> Niektóre pakiety OmniHTTPd mog± byæ dostarczane z wbudowan± obs³ug± PHP. Przy instalacji mo¿esz wybraæ 'custom setup' (tryb instalacji, gdzie wiele parametrów mo¿e byæ ustalane przez u¿ytkownika) i odznaczyæ komponent PHP. Zalecamy u¿ycie najnowszych binariów PHP. Niektóre serwery OmniHTTPd s± dostarczane z wersj± beta PHP 4, wiêc nie powiniene¶ wybieraæ wbudowanej obs³ugi, ale zainstalowaæ swoj± w³asn±. Je¶li serwer jest ju¿ zainstalowany, u¿yj przycisku Replace w kroku 4 i 5 aby ustaliæ nowe, poprawne informacje. </para> </note> </sect2> </sect1> <sect1 id="install.oreilly"> <title>Serwery-Oreilly Website Pro</title> <para> This section contains notes and hints specific to Oreilly Website Pro. </para> <sect2 id="install.oreilly.windows"> <title>Oreilly Website Pro 2.5 i nowsze dla Windows</title> <simpara> Ta lista opisuje jak skonfigurowaæ PHP w postaci binariów CGI lub modu³u ISAPI do pracy z serwerem Oreilly Website Pro na systemie Windows. </simpara> <para> <itemizedlist> <listitem> <para> Wyedytuj Server Properties i wybierz zak³adke "Mapping". </para> </listitem> <listitem> <para> Z listy wybierz "Associations" i wpisz wybrane rozszerzenie (<literal>.php</literal>) i ¶cie¿kê do pliku exe (np. <filename>c:\php\php.exe</filename>) lub pliku DLL ISAPI (np. <filename>c:\php\sapi\php4isapi.dll</filename>). </para> </listitem> <listitem> <para> Wynierz "Content Types", dodaj to samo rozszerzenie (<literal>.php</literal>) i wpisz typ zawarto¶ci. Je¶li u¿ywasz pliku wykonywalnego CGI, wpisz 'wwwserver/shellcgi', je¶li wybra³e¶ modu³ ISAPI, wpisz 'wwwserver/isapi' (bez apostrofów). </para> </listitem> </itemizedlist> </para> </sect2> </sect1> <sect1 id="install.xitami"> <title>Serwery-Xitami</title> <para> Ten rozdzia³ zawiera wskazówki specyficzne dla Xitami. </para> <sect2 id="install.xitami.windows"> <title>Xitami dla Windows</title> <simpara> Ta lista opisuje jak skonfigurowaæ PHP w postaci binariów CGI do pracy z Xitami pod Windows. </simpara> <para> <itemizedlist> <listitem> <para> Upewnij siê, ¿e serwer pracuje, i wejd¼ przegl±dark± WWW na konsolê administracyjn± Xitami (zazwyczaj <literal>http://127.0.0.1/admin </literal>), i kliknij na 'Configuration'. </para> </listitem> <listitem> <para> Przejd¼ do 'Filters' i dodaj rozszerzenie, które powinno byæ przetwarzane przez PHP (np. .php) do pola 'File extensions'. </para> </listitem> <listitem> <para> W 'Filter command or script dopisz ¶cie¿kê i nazwê twojego pliku wykonywalnego PHP, np. <literal>c:\php\php.exe</literal>. </para> </listitem> <listitem> <para> Kliknij na ikonê 'Save'. </para> </listitem> </itemizedlist> </para> </sect2> </sect1> <sect1 id="install.otherhttpd"> <title>Serwery-Inne serwery WWW</title> <para> PHP mo¿e byæ skonfigurowane do pracy z wielona serwerami WWW. Przejrzyj <link linkend="install.configure.servers">Opcje zwi±zane z serwerami</link>, gdzie mo¿esz znale¼æ pe³n± listê parametrów dla 'configure' zwi±zanych z serwerami. PHP w postaci binariów CGI jest kompatybilne z prawie wszystkimi serwerami WWW obs³uguj±cymi interfejs CGI. </para> </sect1> <sect1 id="install.problems"> <title>Problemy?</title> <sect2> <title>Przeczytaj FAQ</title> <simpara> Niektóre problemy s± bardziej popularne ni¿ inne. Tej najczê¶ciej spotykane s± wpisane do PHP FAQ, które mo¿na znale¼c pod adresem <ulink url="&url.php.faq;">&url.php.faq;</ulink> </simpara> </sect2> <sect2 id="install.otherproblems"> <title>Inne problemy</title> <simpara> Je¶li w dalszym ci±gu nie wiesz co zrobiæ, byæ mo¿e kto¶ z listy dyskusyjnej po¶wiêconej instalacji PHP bêdzie móg³ ci pomóc. Powinienej sprawdziæ najpierw archiwum, bo byæ mo¿e kto¶ ju¿ odpowiedzia³ na twoje pytanie. Archiwa znajduj± siê w dziale 'Support' na stronie <ulink url="&url.php;">&url.php;</ulink>. Aby zapisaæ siê na listê dyskusyjn± dotycz±c± instalacji PHP, wy¶lij pusty list na adres <ulink url="mailto:&email.php.install.subscribe;">&email.php.install.subscribe;</ulink>. Adresem jesty dyskusyjnej jest <literal>&email.php.install;</literal>. </simpara> <simpara> Je¶li chcesz uzyskaæ pomoc na li¶cie dyskusyjnej, postaraj siê byæ precyzyjny i podaj niezbêdne szczegó³y dotycz±ce twojego ¶rodowiska (system operacyjny, wersja PHP, serwer WWW, czy PHP dzia³a jako CGI czy jako modu³, itp.), i kod, aby inni mogli odtworzyæ i sprawdziæ twój problem. </simpara> </sect2> <sect2 id="install.bugreports"> <title>Raporty o b³êdach</title> <simpara> Je¶li uwa¿asz, ¿e znalaz³e¶ b³±d w PHP, zg³o¶ go. Programi¶ci PHP prawdopodobnie nie wiedz± i nim, wiêc je¶li go nie zg³osisz, to najprawdopodobniej nie bêdzie usuniêty. Mo¿esz zg³aszaæ b³êdy korzystaj±c z systemu zg³aszania b³êdów znajduj±cego siê pod adresem <ulink url="&url.php.bugs;">&url.php.bugs;</ulink>. </simpara> <simpara> Przeczytaj <ulink url="&url.php.bugdosdonts;">Co-i-jak-z-b³êdami</ulink> przed wys³aniem jakiegokolwiek raportu o b³êdzie! </simpara> </sect2> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/chapters/intro.xml +++ phpdoc/pl/chapters/intro.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="introduction"> <title>Wprowadzenie</title> <sect1 id="intro-whatis"> <title>Czym jest PHP?</title> <simpara> PHP (oficjalnie "PHP: Hypertext Preprocessor") jest zagnie¿d¿onym w HTML jezykiem skryptowym dzia³aj±cym po stronie serwera. </simpara> <para> Prosta odpowied¼, ale co to znaczy? Przyk³ad: </para> <para> <example> <title>Wprowadzaj±cy przyk³ad</title> <programlisting role="php"> &lt;html> &lt;head> &lt;title>Przyk³ad&lt;/title> &lt;/head> &lt;body> &lt;?php echo "Cze¶æ! Jestem skryptem PHP!"; ?> &lt;/body> &lt;/html> </programlisting> </example> </para> <para> Zauwa¿ jak bardzo ró¿ni siê to od skryptów CGI pisanych w innych jêzykach, takich jak C czy Perl -- zamiast pisaæ program, zawieraj±cy mnóstwo komend tylko do wypisania HTML, piszesz kod HTML zawieraj±cy troche zagnie¿d¿onego kodu, który robi co¶ konkretnego (w powy¿szym przypadku wypisuje jaki¶ tekst). Kod PHP jest zawarty pomiêdzy specjalnymi <link linkend="language.basic-syntax.phpmode">znacznikami otwieraj±cymi i zamykaj±cymi</link> które pozwalaj± na wchodzenie do i wychodzenie z trybu PHP. </para> <para> PHP ró¿ni siê od skryptów wykonywanych po stronie klienta takich jak np. JavaScript tym, ¿e ca³y kod PHP wykonywany jest na serwerze. Je¶li masz na serwerze skrypt podobny do przedstawionego wy¿ej, klient dostanie tylko rezultat wykonania skryptu, bez mo¿liwo¶ci stwierdzenia jak wygl±da generuj±cy go kod. Mo¿esz nawet skonfigurowaæ serwer WWW, tak aby wszystkie pliki HTML by³y przetwarzane przez PHP. A wtedy nie ma sposobu, aby u¿ytkownik móg³ stwierdziæ jakie asy trzymasz w rêkawie. </para> </sect1> <sect1 id="intro-whatcando"> <title>Co potrafi PHP?</title> <para> Mówi±c najpro¶ciej, PHP potrafi wszystko to, co ka¿dy inny skrypt CGI, czyli zbieraæ dane z formularzy, generowaæ dynamiczne strony oraz wysy³aæ i odczytywaæ cookies (ciasteczka). </para> <para> Prawdopodobnie najmocniejsz± i najbardziej znacz±c± cech± PHP jest obs³uga szerokiej gamy baz danych. Pisanie strony powi±zaniej z baz± danych jest niesamowicie proste. Nastêpuj±ce bazy danych s± aktualnie obs³ugiwane przez PHP: <blockquote> <simplelist columns="3"> <member>Adabas D</member> <member>dBase</member> <member>Empress</member> <member>FilePro (tylko do odczytu)</member> <member>Hyperwave</member> <member>IBM DB2</member> <member>Informix</member> <member>Ingres</member> <member>InterBase</member> <member>FrontBase</member> <member>mSQL</member> <member>Direct MS-SQL</member> <member>MySQL</member> <member>ODBC</member> <member>Oracle (OCI7 i OCI8)</member> <member>Ovrimos</member> <member>PostgreSQL</member> <member>Solid</member> <member>Sybase</member> <member>Velocis</member> <member>Unix dbm</member> </simplelist> </blockquote> </para> <para> PHP obs³uguje równie¿ inne serwisy u¿ywaj±ce protoko³ów takich jak IMAP, SNMP, NNTP, POP3, HTTP i wiele innych. Mo¿esz tak¿e otwieraæ surowe gniazda sieciowe i u¿ywaæ innych protoko³ów. </para> <!-- <figure> <title>Wewnêtrzna struktura</title> <graphic fileref="../images/php3_internal_structure.gif"/> </figure> <figure> <title>Schemat ¿±dania</title> <graphic fileref="../images/php3_request_scheme.gif"/> </figure> --> </sect1> <sect1 id="intro-history"> <title>Krótka historia PHP</title> <simpara> PHP wymy¶li³ jesieni± 1994 &link.rasmus;. Wczesne niepublikowane wersje by³y u¿ywane na jego stronie do ¶ledzenia kto czyta jego CV on-line. Pierwsza wersja u¿ywana przez innych by³a dostêpna na pocz±tku roku 1995 i by³a znana jako Personal Home Page Tools. Sk³ada³a siê z bardzo prostego parsera, który rozumia³ bardzo niewiele makr, oraz z paru narzêdzi, które by³y wtedy popularnie u¿ywane na stronach domowych, czyli ksiêga go¶ci, licznik i pare innych drobiazgów. W po³owie 1995 parser zosta³ przerobiony i nazwany PHP/FI Version 2. FI by³o czê¶ci± innego pakietu stworzonego przez Rasmusa do interpretowania danych z formularzy HTML. Rasmus po³±czy³ skrypty z Personal Home Page tools z Form Interpreter oraz doda³ obs³ugê mSQL i tak narodzi³ siê PHP/FI. PHP/FI zacz±³ rozwijaæ siê w niewiarygodnym tempie, kiedy ludzie zaczêli dodawaæ swój kod. </simpara> <simpara> Trudno podaæ dok³adne statystyki, ale szacuje siê, ¿e pod koniec 1996 PHP/FI by³o u¿ywane przez co najmniej 15,000 serwisów na ca³ym ¶wiecie. Do po³owy 1997 liczba ta zwiêkszy³a sie do ponad 50,000. W po³owie 1997 nast±pi³a tak¿e zmiana w rozwoju PHP. PHP przesta³ byæ osobistym projektem Ramsusa do którego do³±czy³a garstka ludzi, sta³ siê znacznie bardziej zorganizowanym projektem zespo³owym. Parser zosta³ napisany od zera przez Zeeva Suraskiego i Andi'ego Gutmansa. Ten w³a¶nie praser zosta³ podstaw± dla PHP Version 3. Spora czê¶æ kodu PHP/FI zosta³a wykorzystana w PHP3, ale te¿ wiele zosta³o napisane zupe³nie od nowa. </simpara> <simpara> Najnowsza wersja u¿ywa silnika <ulink url="&url.zend;">Zend</ulink> zapewniaj±cego wiêksz± wydajno¶æ, obs³uguje jeszcze wiêcej zewnêtrznych bibliotek i rozszerzeñ i dzia³a jako natywny modu³ z wiêkszo¶ci± popularnych serwerów WWW. Dzi¶ (1/2001) PHP 3 lub PHP 4 dostarczane jest razem z komercyjnymi produktami, takimi jak StrongHold - serwer WWW firmy RedHat. Skromnie szacuj±c na podstawie ekstrapolacji z danych <ulink url="&url.netcraft;">NetCraftu</ulink> (zobacz te¿ <ulink url="&url.netcraft-survey;">Netcraft Web Server Survey</ulink>) PHP jest u¿ywane przez ponad 5,100,000 sajtów na ca³ym ¶wiecie. Dla porównania, to trochê wiêcej ni¿ liczba serwerów dzia³aj±cych na oprogramowaniu Microsoft IIS. </simpara> <!-- <figure> <title>NetCraft Webserver Survey</title> <graphic fileref="../images/phpstats-199911.gif"/> </figure> --> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/features/cookies.xml +++ phpdoc/pl/features/cookies.xml <?xml encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="features.cookies"> <title>Ciasteczka (cookies)</title> <para> PHP obs³uguje ciasteczka HTTP (cookies). Jest to mechanizm s³u¿±cy do przechowywania danych w przegl±darce i w ten sposób ¶ledzenia lub identyfikowania powracaj±cych u¿ytkowników. Mo¿na je ustawiaæ u¿ywaj±c funkcji <function>setcookie</function>. Ciasteczka stanowi± czê¶æ nag³ówka HTTP, wiêc funkcja <function>setcookie</function> musi byæ wywo³ywana zanim jakiekolwiek dane zostan± wys³ane do przegl±darki. Wystêpuje tu to samo ograniczenie, co w przypadku <function>header</function>. </para> <para> Ka¿de ciasteczko wys³ane do ciebie od klienta, bêdzie automatycznie przekszta³cone w zmienn± PHP, podobnie, jak przy u¿yciu metod POST i GET. Je¶li chcesz przypisaæ wiele warto¶ci do pojedynczego ciasteczka, po prostu dodaj <emphasis>[]</emphasis> do nazwy ciasteczka. Po wiêcej detali siêgnij do funkcji <function>setcookie</function>. </para> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/features/images.xml +++ phpdoc/pl/features/images.xml <?xml encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="features.images"> <title>Tworzenie i manipulacja obrazkami</title> <simpara> PHP nie ogranicza siê jedynie do generowania kodu HTML. Mo¿e równie¿ s³u¿yæ do tworzenia i manipulacji plikami graficznymi w ró¿nych formatach: gif, png, jpg, wbmp i xpm. PHP potrafi wys³aæ obrazek strumieniem do przegl±darki. Aby u¿yæ funkcji operuj±cych na obrazkach, nale¿y skompilowaæ PHP z obs³ug± biblioteki GD. GD i PHP mog± potrzebowaæ równie¿ innych bibliotek, w zale¿no¶ci od tego z jakim formatem graficznym chcesz pracowaæ. GD od wersji 1.6 nie obs³uguje formatu GIF. </simpara> <para> <example> <title>Tworzenie orazka PNG za pomoc± PHP</title> <programlisting role="php"> &lt;?php Header("Content-type: image/png"); $string=implode($argv," "); $im = imageCreateFromPng("images/button1.png"); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImagePng($im); ImageDestroy($im); ?> </programlisting> </example> Ten przyk³ad powinien byæ wywo³any ze strony przy u¿yciu &lt;img src=&quot;button.php?tekst&quot;&gt; Powy¿szy skrypt button.php pobiera "tekst", umieszcza go na obrazku, którym w tym przypadku jest &quot;images/button1.png&quot;, i zwraca wynikowy obrazek. Jest to bardzo wygodny sposób unikniêcia tworzenia nowych przycisków graficznych za ka¿dym razem gdy chcesz zmieniæ tekst na nich. Za pomoc± tej metody s± one generowane dynamicznie. </para> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/features/remote-files.xml +++ phpdoc/pl/features/remote-files.xml <?xml encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="features.remote-files"> <title>Korzystanie ze zdalnych plików</title> <para> Je¿eli PHP zostanie skonfigurowany z w³±czon± obs³ug± &quot;URL fopen wrapper&quot;, bêdzie mo¿na u¿ywaæ adresów HTTP i FTP w wiêkszo¶ci funkcji, które jako parametr przyjmuj± nazwê pliku, w³±czaj±c w to instrukcje <function>require</function> i <function>include</function>. Obs³uga &quot;URL fopen wrapper&quot; jest w³±czona domy¶lnie, chyba, ¿e dodasz opcjê <option>--disable-url-fopen-wrapper</option> do ./configure (w wersjach do 4.0.3) lub ustawisz <parameter>allow_url_fopen</parameter> na <literal>off</literal> w pliku php.ini (w nowszych wersjach). </para> <para> <note> <para> Nie mo¿esz u¿ywaæ zdalnych plików w <function>include</function> i <function>require</function> w systemie Windows. </para> </note> </para> <para> Mo¿esz wykorzystaæ tê w³asno¶æ aby otworzyæ plik na zdalnym serwrze, przetworzyæ jego zawarto¶æ i u¿yæ wyników w zapytaniu do bazy danych, lub po prostu wy¶wietliæ plik dostosowuj±c jego wygl±d do swojej strony. </para> <para> <example> <title>Pobieranie tytu³u zdalnej strony</title> <programlisting role="php"> <![CDATA[ <?php $file = fopen ("http://www.php.net/", "r"); if (!$file) { echo "<p>Nie mo¿na otworzyæ zdalnego pliku.\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); /* Zadzia³a tylko wtedy, gdy tytu³ i jego znaczniki s± w tej samej linii */ if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?> ]]> </programlisting> </example> </para> <para> Mo¿esz równie¿ zapisywaæ pliki na serwerach FTP, je¶li po³±czysz siê jako u¿ytkownik z odpowiednimi prawami dostepu i je¶li plik wcze¶niej nie istnia³. Aby po³±czyæ siê jako u¿ytkownik inny ni¿ 'anonymous', musisz przes³aæ nazwê u¿ytkonika (i najprawdopodobniej has³o) w URLu, np. 'ftp://uzytkownik:haslo@ftp.example.com/sciezka/do/pliku'. Mo¿esz u¿yæ tej samej sk³adni przy dostêpie do plików przez HTTP, je¶li wymagana jest autoryzacja. </para> <para> <example> <title>Zapisywanie danych na zdalnym serwerze.</title> <programlisting role="php"> <![CDATA[ <?php $file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w"); if (!$file) { echo "<p>Nie mo¿na otworzyæ zdalnego pliku do zapisu.\n"; exit; } /* Tutaj zapisujemy dane. */ fputs ($file, "$HTTP_USER_AGENT\n"); fclose ($file); ?> ]]> </programlisting> </example> </para> <para> <note> <para> Byæ mo¿e powy¿szy przyk³ad nasun±³ ci pomys³, by u¿yæ tej metody do zdalnego zapisywania logów, ale, jak wspomniano wy¿ej, mo¿esz tworzyæ jedynie nowe pliki. Aby zrealizowaæ zdalne logowanie powiniene¶ przyjrzeæ siê funkcji <function>syslog</function>. </para> </note> </para> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/functions/http.xml +++ phpdoc/pl/functions/http.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <reference id="ref.http"> <title>Funkcje obs³ugi HTTP</title> <titleabbrev>HTTP</titleabbrev> <partintro> <simpara> Te funkcje pozwalaj± ci operowaæ na danych wysy³anych do przegl±darki internetowej ju¿ na poziomie protoko³u HTTP. </simpara> </partintro> <refentry id="function.header"> <refnamediv> <refname>header</refname> <refpurpose>Wysy³a surowy nag³owek HTTP</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>header</function></funcdef> <paramdef>string <parameter>tre¶æ_nag³ówka</parameter></paramdef> <paramdef>bool <parameter><optional>zamieñ</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Funkcja <function>header</function> s³u¿y do wys³ania surowego nag³ówka HTTP przed wys³aniem zawarto¶ci dokumentu <acronym>HTML</acronym>. Zajrzyj do <ulink url="&spec.http1.1;">Specyfikacji HTTP 1.1</ulink> aby dowiedzieæ siê wiêcej na temat nag³ówków HTTP. </para> <para> Opcjonalny parametr <parameter>replace</parameter> okre¶la, czy podany nag³ówek ma zast±piæ nag³ówek tego samego typu przygotowany przez serwer, czy dodaæ jeszcze jeden. Domy¶lnie, oryginalny nag³ówek zostanie zast±piony, ale je¶li ustawisz ten argument na &false;, to nowy nag³ówek zostanie dodany do ju¿ istniej±cych. Na przyk³ad: <informalexample> <programlisting role="php"> header('www-authenticate: Negociate'); header('www-authenticate: NTLM',false); </programlisting> </informalexample> </para> <para> W PHP s± dwa specjalne wywo³ania funkcji <function>header</function>. Pierwszym z nich jest &quot;Location&quot;. To wywo³anie, nie tylko wysy³a ten nag³ówek do przegl±darki, ale tak¿e zwraca do serwera Apache status PRZEKIEROWANIA. Z punktu widzenia pisz±cego skrypt PHP nie jest to najistostniejsze, jednak dla osób, które rozumiej± zasadê dzia³ania Apache'a mo¿e byæ to istotne. <informalexample> <programlisting role="php"> header ("Location: http://www.php.net/"); /* Przekieruj przegl±darkê na stronê g³ówn± PHP */ exit; /* Upewnij siê, ¿e kod poni¿ej nie zostanie wykonany po przekierowaniu. */ </programlisting> </informalexample> </para> <note> <para> Protokó³ HTTP 1.1 wymaga URL-i bezwzglêdnych w nag³ówku <ulink url="&spec.http1.1;/rfc2616-sec14.html#sec14.30">Location:</ulink> w³±cznie z okre¶leniem protoko³u, nazwy hosta and i bezwzglêdnej scie¿ki dostêpu. Niektóre klienty mog± akceptowaæ wzglêdne URL-e, jednak zdecydowanie nie powinienie¶ bazowaæ na tym. Zwykle u¿ywa siê $HTTP_SERVER_VARS['HTTP_HOST'], $HTTP_SERVER_VARS['PHP_SELF'] i funkcji <function>dirname</function> by wygenerowaæ bezwglêdnego URL-a: <informalexample> <programlisting> header ("Location: http://".$HTTP_SERVER_VARS['HTTP_HOST'] ."/".dirname($HTTP_SERVER_VARS['PHP_SELF']) ."/".$relative_url); </programlisting> </informalexample> </para> </note> <para> Drugim specjalnym wywo³aniem funkcji jest ka¿dy nag³ówek zaczynaj±cy siê od ci±gu znaków &quot;HTTP/&quot; (wielko¶æ liter nie gra roli). Na przyk³ad, je¶li dyrektywa konfiguracyjna ErrorDocument 404 twojego Apache-a wskazuje na skrypt PHP, by³oby dobrze przekonaæ siê, czy ten skrypt faktycznie generuje 404. Pierwsz± rzecz±, któr± powiniene¶ zrobiæ w swoim skrypcie jest wtedy: <informalexample> <programlisting role="php"> header ("HTTP/1.0 404 Not Found"); </programlisting> </informalexample> </para> <para> Skrypty PHP czêsto s³u¿± do generowania dynamicznych dokumentów HTML, które nie mog± byæ buforowane przez klienta czy serwer proxy. Pamiêæ cache w wiêkszo¶ci tych urz±dzeñ da siê wy³±czyæ dziêki: <informalexample> <programlisting role="php"> header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // data w przesz³o¶ci header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // ci±gle modyfikowany header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 </programlisting> </informalexample> </para> <para> Pamiêtaj, ¿e funkcja <function>header</function> mo¿e byæ wywo³ywana jedynie do momentu nim jakakolwiek tre¶æ zostanie wys³ana, czyli zarówno znaczniki HTML, puste linie jak i wynik pracy PHP. Jest to bardzo czêsty b³±d, gdzie skrypty z funkcjami <function>include</function>, <function>require</function> itp. maj± spacje albo puste linie przed wywo³aniem funkcji <function>header</function>. Problem ten pojawia siê równie¿ w skryptach opartych na pojedynczym pliku PHP/HTML. <informalexample> <programlisting role="php"> &lt;?php require("user_logging.inc") ?> &lt;?php header ("Content-Type: audio/x-pn-realaudio"); ?> // skrypt nie dzia³a - zauwa¿ puste linie pomiêdzy instrukcjami </programlisting> </informalexample> </para> <para> Zobacz te¿ <function>headers_sent</function> </para> </refsect1> </refentry> <refentry id="function.headers-sent"> <refnamediv> <refname>headers_sent</refname> <refpurpose>Zwraca &true; je¶li nag³ówki zosta³y ju¿ wys³ane</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>headers_sent</function></funcdef> <void/> </funcprototype> </funcsynopsis> <para> Ta funkcja zwraca &true; je¶li nag³ówki HTTP ju¿ zosta³y wys³ane, lub &false; w przeciwnym wypadku. </para> <para> Zobacz te¿ <function>header</function> </para> </refsect1> </refentry> <refentry id="function.setcookie"> <refnamediv> <refname>setcookie</refname> <refpurpose>Wysy³a ciasteczko</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>setcookie</function></funcdef> <paramdef>string <parameter>nazwa</parameter></paramdef> <paramdef>string <parameter><optional>warto¶æ</optional></parameter> </paramdef> <paramdef>int <parameter><optional>data_wa¿no¶ci</optional></parameter> </paramdef> <paramdef>string <parameter><optional>¶cie¿ka</optional></parameter> </paramdef> <paramdef>string <parameter><optional>domena</optional></parameter> </paramdef> <paramdef>int <parameter><optional>bezpieczne</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>setcookie</function> okre¶la ciasteczko (ang. cookie) do wys³ania z nag³ówkami HTTP. Ciasteczko musi byæ wys³ane <emphasis>zanim </emphasis> jakiekolwiek inne nag³ówki zostan± wys³ane (to jest ograniczenie ciasteczek, nie PHP). To wymaga od ciebie umieszczenia wywo³añ tej funkcji przed znacznikami <literal>&lt;html></literal> czy <literal>&lt;head></literal>. </para> <para> Wszystkie argumenty poza <parameter>nazwa</parameter> s± opcjonalne. Je¶li tylko argument nazwa jest obecny, ciasteczko o takie nazwie zostanie usuniête z klienta. Mo¿esz te¿ opu¶ciæ argumenty za pomoc± pustego ³añcucha (<emphasis>&quot;&quot;</emphasis>). Argumenty <parameter>data_wa¿no¶ci </parameter> i <parameter>bezpieczne</parameter> s± liczbami ca³kowitymi i nie mo¿na ich opu¶ciæ wstawiaj±c pusty ³añcuch. Zamiast niego u¿yj liczby zero (<emphasis>0</emphasis>). Argument <parameter>data_wa¿no¶ci</parameter> jest regularnym uniksowym znacznikiem czasu, takim jak zwracany przez funkcje <function>time</function> lub <function>mktime </function>. Argument <parameter>bezpieczne</parameter> oznacza, ¿e ciasteczko mo¿e byæ przekazywane tylko poprzez bezpieczne po³±czenie HTTPS. </para> <para> Czêste pu³apki: <itemizedlist> <listitem> <simpara> Ciasteczka nie bêd± widziane do nastêpnego prze³adowania strony dla której maj± byæ widoczne. </simpara> </listitem> <listitem> <simpara> Ciasteczko mo¿e byæ usuniête tylko z tymi parametrami, z jakimi je ustawiono. </simpara> </listitem> </itemizedlist> </para> <simpara> W PHP 3, wielokrotne wywo³ania <function>setcookie</function> w jednym skrypcie wykonywane by³y w odwrotnej kolejno¶ci. Je¶li chcesz usun±æ jedno ciastko przed wprowadzeniem kolejnego, powiniene¶ umie¶ciæ wprowadzenie nowego przed usunêciem starego. W PHP 4 , wielokrotne wywo³ania <function>setcookie</function> wykonywane s± we w³a¶ciwej kolejno¶ci. </simpara> <para> Parê przyk³adów - jak wysy³aæ ciasteczka: <example> <title><function>setcookie</function> wysy³a przyk³adowe ciasteczka </title> <programlisting role="php"> setcookie ("TestCookie", "Test Value"); setcookie ("TestCookie", $value,time()+3600); /* traci wa¿no¶æ za godzinê */ setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1); </programlisting> </example> </para> <para> A teraz, jak usun±æ ciasteczka z poprzedniego przyk³adu: <example> <title>Kasowanie ciasteczek </title> <programlisting role="php"> setcookie ("TestCookie"); // ustaw datê wa¿no¶ci na godzinê wstecz setcookie ("TestCookie", "", time() - 3600); setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1); </programlisting> </example> Kiedy chcesz skasowaæ ciasteczko, upewnij siê, ¿e data wa¿no¶ci jest w przesz³o¶ci, co uruchomi mechanizm kasowania ciasteczka w przegl±darce. </para> <para> Zwróæ uwagê, ¿e zawarto¶æ ciasteczka jest automatycznie kodowana do formatu URL przy wysy³aniu, a po odebraniu automatycznie dekodowana i przypisywana do zmiennej o tej samej nazwie co ciasteczko. Aby poznaæ zawarto¶æ przyk³adowego ciasteczka ze skryptu, zastosuj poni¿szy przyk³ad: <informalexample> <programlisting role="php"> echo $TestCookie; echo $HTTP_COOKIE_VARS["TestCookie"]; </programlisting> </informalexample> </para> <para> Mo¿na te¿ tworzyæ tablice z³o¿one z ciasteczek za pomoc± zapisu tablicowego w nazwie ciasteczka. Powoduje to utworzenie tylu ciasteczek, ile jest elemetów tablicy, a po otrzymaniu takiego ciasteczka, jego warto¶ci umieszczane s± w tablicy o nazwie takiej jak ciasteczko. <informalexample> <programlisting role="php"> setcookie ("cookie[three]", "cookiethree"); setcookie ("cookie[two]", "cookietwo"); setcookie ("cookie[one]", "cookieone"); if (isset ($cookie)) { while (list ($name, $value) = each ($cookie)) { echo "$name == $value&lt;br>\n"; } } </programlisting> </informalexample> </para> <para> Wiêcej informacji na temat ciasteczek znajdziesz w specyfikacji Netscape'a na stronie <ulink url="&spec.cookies;">&spec.cookies;</ulink>. </para> <simpara> Microsoft Internet Explorer 4 z zainstalowanym Service Pack 1 nie radzi sobie poprawnie z ciasteczkami, które maj± ustawiony parametr ¶cie¿ka. </simpara> <simpara> Netscape Communicator 4.05 i Microsoft Internet Explorer 3.x obs³uguj± niepoprawnie ciasteczka, w których ¶cie¿ka i data_wa¿no¶ci nie s± ustawione. </simpara> </refsect1> </refentry> </reference> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/functions/mail.xml +++ phpdoc/pl/functions/mail.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <reference id="ref.mail"> <title>Funkcje obs³ugi poczty elektronicznej</title> <titleabbrev>Mail</titleabbrev> <partintro> <simpara> <function>mail</function> pozwala ci wysy³aæ listy e-mail. </simpara> </partintro> <refentry id="function.mail"> <refnamediv> <refname>mail</refname> <refpurpose>wy¶lij e-maila</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>mail</function></funcdef> <paramdef>string <parameter>do</parameter></paramdef> <paramdef>string <parameter>temat</parameter></paramdef> <paramdef>string <parameter>tre¶æ</parameter></paramdef> <paramdef>string <parameter><optional>dodatkowe_nag³ówki</optional></parameter> </paramdef> <paramdef>string <parameter><optional>dodatkowe_parametry</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <simpara> <function>mail</function> automatycznie wysy³a wiadomo¶æ okre¶lon± w <parameter>tre¶æ</parameter> do odbiorcy okre¶lonego w <parameter>do</parameter>. Mo¿na wys³aæ wiadomo¶æ do kilku odbiorców na raz, wypisuj±c ich adresy po przecinku w argumencie <parameter>do</parameter>. Poprzez tê funkcjê mo¿na te¿ wys³aæ listy zawieraj±ce za³±czniki lub inne typy wiadomo¶ci. Jest to mo¿liwe dziêki kodowaniu MIME - po wiêcej informacji, zajrzyj <ulink url="http://www.zend.com/zend/spotlight/sendmimeemailpart1.php" >http://www.zend.com/zend/spotlight/sendmimeemailpart1.php</ulink> lub RFC 1896 (Visit <ulink url="http://www.rfc-editor.org/" >http://www.rfc-editor.org/</ulink>). </simpara> <para> <function>mail</function> zwraca &true; je¶li uda³o siê wys³aæ e-mail, w przeciwnym wypadku zwraca &false;. </para> <para> <example> <title>Wysy³anie e-maila.</title> <programlisting> mail("rasmus@lerdorf.on.ca", "Temat listu", "Linia 1\nLinia 2\nLinia 3"); </programlisting> </example></para> <simpara> Je¶li zostanie podany czwarty argument, bêdzie on dopisany na koñcu nag³ówka wiadomo¶ci. Ten argument wykorzystuje siê do wstawienia dodatkowych nag³ówków. Dodatkowe nag³ówki rozdziela siê znakiem nowego wiersza. </simpara> <note> <para> W systemach Win32, trzeba u¿yæ <literal>\r\n</literal> aby rozdzieliæ nag³ówki. Nale¿y tak¿e zwróciæ uwagê na nag³ówki cc: i bcc:, przy których rozró¿niana jest wielko¶æ liter i z tego powodu, w systemach Win32 powinny byæ pisane jako <literal>Cc:</literal> i <literal>Bcc:</literal>. </para> </note> <simpara> Po podaniu pi±tego argumentu, PHP doda jego zawarto¶æ do wywo³ania serwera poczty wychodz±cej (mailera). Potrzebne jest to do prawid³owego ustawienia nag³ówka Return-Path przy wysy³aniu za pomoc± programu sendmail. </simpara> <para> <example> <title>Wysy³anie listu z dodatkowymi nag³ówkami.</title> <programlisting> mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion()); </programlisting> </example> Za pomoc± pi±tego argumentu mo¿na wys³aæ dodatkowe parametry do serwera poczty wychodz±cej. W poni¿szym przyk³adzie ustawiamy w³a¶ciwy nag³ówek Return-Path dla sendmaila. Normalnie sendmail doda nag³ówek X-Authentication-Warning po u¿yciu parametru -f, poniewa¿ serwer www prawdopodobnie nie zalicza siê do zaufanych u¿ytkowników. Aby pozbyæ siê powy¿szego ostrze¿enia, nale¿y dodaæ serwer www do listy zaufanych u¿ytkowników w pliku konfiguracyjnym sendmaila. </para> <note> <para> Pi±ty argument dodano w PHP 4.0.5. </para> </note> <para> <example> <title>Wysy³anie listu z dodatkowymi nag³ówkami i prze³±cznikami.</title> <programlisting> mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVER_NAME"); </programlisting> </example> Mo¿na tez u¿yæ zwyk³ych operacji na ³añcuchach znaków do tworzenia z³o¿onych wiadomo¶ci e-mail. <example> <title>Wysy³anie z³o¿onego e-maila.</title> <programlisting> /* adresaci */ $recipient .= "Mary &lt;mary@u.college.edu>" . ", " ; //zwróæ uwagê na przecinek $recipient .= "Kelly &lt;kelly@u.college.edu>" . ", "; $recipient .= "ronabop@php.net"; /* temat */ $subject = "Birthday Reminders for August"; /* wiadomo¶æ */ $message .= "The following email includes a formatted ASCII table\n"; $message .= "Day \t\tMonth \t\tYear\n"; $message .= "3rd \t\tAug \t\t1970\n"; $message .= "17rd\t\tAug \t\t1973\n"; /* mo¿na dodaæ sygnaturê rozdzielaj±c± */ $message .= "--\r\n"; //sygnatura rozdzielaj±ca $message .= "Birthday reminder copylefted by public domain"; /* dodatkowe nag³ówki na okoliczno¶æ b³êdów, From cc, bcc, itp. */ $headers .= "From: Birthday Reminder &lt;birthday@php.net>\n"; $headers .= "X-Sender: &lt;birthday@php.net>\n"; $headers .= "X-Mailer: PHP\n"; // program pocztowy $headers .= "X-Priority: 1\n"; // wa¿na wiadomo¶æ! $headers .= "Return-Path: &lt;birthday@php.net>\n"; // adres zwrotny dla b³êdów /* Je¶li chcesz wys³aæ list w formacie html, odkomentuj poni¿sze linie */ // $headers .= "Content-Type: text/html; charset=iso-8859-1\n"; // typy MIME $headers .= "cc: birthdayarchive@php.net\n"; // CC do kogo $headers .= "bcc: birthdaycheck@php.net, birthdaygifts@php.net"; // BCC do kogo /* a teraz wy¶lij */ mail($recipient, $subject, $message, $headers); </programlisting> </example> </para> <note> <para> Upewnij siê, ¿e nie ma nowej linii (ani spacji) po argumentach do lub temat, bo mo¿e to wywo³ywaæ dziwne rezultaty. </para> </note> </refsect1> </refentry> <refentry id="function.ezmlm-hash"> <refnamediv> <refname>ezmlm_hash</refname> <refpurpose>Oblicza warto¶æ hash potrzebn± dla EZMLM</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>ezmlm_hash</function></funcdef> <paramdef>string <parameter>adres_e-mail</parameter></paramdef> </funcprototype> </funcsynopsis> <simpara> <function>ezmlm_hash</function> oblicza warto¶æ hash potrzebn± przy przechowywaniu list adresatów programu EZMLM w bazie danych MySQL. </simpara> <para> <example> <title>Obliczanie warto¶ci hash i dodawanie nowego u¿ytkownika</title> <programlisting> $user = "kris@koehntopp.de"; $hash = ezmlm_hash ($user); $query = sprintf ("INSERT INTO sample VALUES (%s, '%s')", $hash, $user); $db->query($query); // wykorzystanie interfejsu PHPLIB db </programlisting> </example> </para> </refsect1> </refentry> </reference> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/functions/mysql.xml +++ phpdoc/pl/functions/mysql.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <reference id="ref.mysql"> <title>Funkcje MySQL</title> <titleabbrev>MySQL</titleabbrev> <partintro> <simpara> Funkcje te umo¿liwiaj± dostêp do serwerów baz danych MySQL. Aby je uaktywniæ musisz skompilowaæ php z obs³ug± MySQL u¿ywaj±c opcji <option role="configure">--with-mysql</option>. Je¶li u¿yjesz tej opcji bez podania ¶cie¿ki do MySQL, php wykorzysta w³asne biblioteki klienta. U¿ytkownicy, którzy uruchamiaj± inne aplikacje korzystaj±ce z MySQL (na przyk³ad równocze¶nie php3 i php4 jako modu³y apache, lub modu³ auth-mysql) powinni zawsze podawaæ ¶cie¿kê do MySQL: <option role="configure">--with-mysql=/sciezka/do/mysql</option>. To wymusi na php u¿ycie bibliotek zainstalowanych przez MySQL, co pozwoli unikn±æ konfliktów. </simpara> <simpara> Wiêcej informacji o MySQL mo¿na znale¼æ na <ulink url="&url.mysql;">&url.mysql;</ulink>. </simpara> <simpara> Dokumentacja do MySQL znajduje siê pod adresem <ulink url="&url.mysql.docs;">&url.mysql.docs;</ulink>. </simpara> <para> Ten prosty przyk³ad demonstruje jak siê po³±czyæ, wykonaæ zapytanie, wy¶wietliæ wyniki i roz³±czyæ z baz± MySQL. <example> <title>Przyk³ad wykorzystania funkcji MySQL</title> <programlisting role="php"> &lt;?php $link = mysql_connect("mysql_host", "mysql_login", "mysql_password") or die ("Could not connect"); print ("Connected successfully"); mysql_select_db ("my_database") or die ("Could not select database"); $query = "SELECT * FROM my_table"; $result = mysql_query ($query) or die ("Query failed"); // printing HTML result print "&lt;table&gt;\n"; while ($line = mysql_fetch_array($result)) { print "\t&lt;tr&gt;\n"; while(list($col_name, $col_value) = each($line)) { print "\t\t&lt;td&gt;$col_value&lt;/td&gt;\n"; } print "\t&lt;/tr&gt;\n"; } print "&lt;/table&gt;\n"; mysql_close($link); ?&gt; </programlisting> </example> </para> </partintro> <refentry id="function.mysql-affected-rows"> <refnamediv> <refname>mysql_affected_rows</refname> <refpurpose>Zwraca ilo¶æ wierszy przetworzonych w poprzedniej operacji MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_affected_rows</function></funcdef> <paramdef>resource <parameter> <optional>link_identifier</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_affected_rows</function> zwraca ilo¶æ wierszy przetworzonych w ostatniej operacji INSERT, UPDATE lub DELETE na serwerze skojarzonym z podanym identyfikatorem po³±czenia. Je¿eli identyfikator po³±czenia nie zosta³ podany, domy¶lnie wykorzystywane jest ostatnie po³±czenie otwarte przez <function>mysql_connect</function>. </para> <note> <para> Przy korzystaniu z transakcji, funkcjê <function>mysql_affected_rows</function> nale¿y wywo³aæ po operacjach INSERT, UPDATE lub DELETE, a nie po zatwierdzeniu (commit). </para> </note> <para> Je¿eli ostatnim zapytaniem by³o DELETE bez u¿ycia WHERE, wszystkie rekordy zosta³y usuniête z tabeli, ale funkcja zwróci zero. </para> <note> <para> Podczas operacji UPDATE, MySQL nie aktualizuje kolumn w których nowa warto¶æ jest identyczna z poprzedni±. Mo¿liwe jest zatem, ¿e zwrócona przez <function>mysql_affected_rows</function> liczba nie bêdzie odpowiadaæ liczbie wierszy pasuj±cych do zapytania, ale tych, które zosta³y faktycznie zmienione. </para> </note> <para> <function>mysql_affected_rows</function> nie ma zastosowania do operacji SELECT, lecz tylko do operacji, które modyfikuj± rekordy. Aby uzyskaæ liczbê wierszy zwróconych przez SELECT, u¿yj funkcji <function>mysql_num_rows</function>. </para> <para> Je¶li ostatnie zapytanie nie powiod³o siê, funkcja zwróci -1. </para> <para> Patrz tak¿e: <function>mysql_num_rows</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-change-user"> <refnamediv> <refname>mysql_change_user</refname> <refpurpose> Zmienia u¿ytkownika zalogowanego w aktywnym po³±czeniu </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_change_user</function></funcdef> <paramdef>string <parameter>u¿ytkowinkr</parameter></paramdef> <paramdef>string <parameter>has³o</parameter></paramdef> <paramdef>string <parameter> <optional>baza</optional> </parameter> </paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_change_user</function> zmienia u¿ytkownika zalogowanego w aktywnym po³±czeniu lub w po³±czeniu, którego identyfikator podano. Je¿eli podano nazwê bazy, zostanie ona ustawiona, w przeciwnym przypadku zostanie ustawiona bie¿±ca. Je¿eli nowa kombinacja u¿ytkownik/has³o bêdzie nieprawid³owa, bie¿±cy u¿ytkownik pozostanie aktywny. </para> <!-- what is returned? bool -> succes/failure i suppose? --> <!-- in PHP 3 int and in PHP 4 bool --> <note> <para> Tê funkcjê dodano w PHP 3.0.13 i wymaga ona MySQL w wersji 3.23.3 lub pó¼niejszej. </para> </note> </refsect1> </refentry> <refentry id="function.mysql-close"> <refnamediv> <refname>mysql_close</refname> <refpurpose>Zamyka po³±czenie z serwerem MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>mysql_close</function></funcdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: &true; w przypadku sukcesu lub &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_close</function> zamyka po³±czenie z serwerem MySQL skojarzone z podanym identyfikatorem po³±czenia. Je¿li <parameter>identyfikator_po³±czenia</parameter> nie zosta³ podany, domy¶lnie wykorzystywane jest ostatnie po³±czenie. </para> <para> Zwykle nie jest potrzebne u¿ywanie <function>mysql_close</function>, jako ¿e po³±czenia niepodtrzymywane s± automatycznie zamykane po zakoñczeniu wykonywania skryptu. Patrz tak¿e <link linkend="language.types.resource.self-destruct">freeing resources</link>. </para> <note> <para> <function>mysql_close</function> nie zamyka po³±czeñ podtrzymywanych nawi±zanych za pomoc± funkcji <function>mysql_pconnect</function>. </para> </note> <example> <title>MySQL close</title> <programlisting role="php"> &lt;?php $link = mysql_connect ("kraemer", "marliesle", "secret") or die ("Could not connect"); print ("Connected successfully"); mysql_close ($link); ?&gt; </programlisting> </example> <para> Patrz tak¿e: <function>mysql_connect</function> i <function>mysql_pconnect</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-connect"> <refnamediv> <refname>mysql_connect</refname> <refpurpose>Otwiera po³±czenie z serwerem MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_connect</function></funcdef> <paramdef>string <parameter> <optional>host <optional>:port</optional> <optional>:/sciezka/do/gniazda</optional> </optional> </parameter> </paramdef> <paramdef>string <parameter> <optional>u¿ytkownik</optional> </parameter> </paramdef> <paramdef>string <parameter> <optional>has³o</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca identyfikator po³±czenia w przypadku powodzenia, lub &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_connect</function> nawi±zuje po³±czenie z serwerem MySQL. Je¶li nie podano argumentów, przyjmowane s± nastêpuj±ce warto¶ci domy¶lne: <parameter>host:port</parameter> = 'localhost:3306', <parameter>u¿ytkownik</parameter> = nazwa u¿ytkownika bêd±cego w³a¶cicielem procesu serwera, <parameter>has³o</parameter> = puste has³o. </para> <para> Argument <parameter>host</parameter> mo¿e równie¿ zawieraæ numer portu, np. &quot;host:port&quot; lub ¶cie¿kê do gniaza np. &quot;:/sciezka/do/gniazda&quot; dla localhosta. <note> <para> Obs³ugê &quot;:port&quot; dodano w PHP 3.0B4. </para> <para> Obs³ugê &quot;:/sciezka/do/gniazda&quot; dodano w PHP 3.0.10. </para> <para> Mo¿esz pomin±æ wy¶wietlenie komunikatu b³êdu przy niepowodzeniu poprzedzaj±c nazwê funkcji znakiem '@'. </para> </note> </para> <para> Przy drugim wywo³aniu <function>mysql_connect</function> z tymi samymi argumentami, nie bêdzie nawi±zywane nowe po³±czenie, lecz zwrócony zostanie identyfikator ju¿ otwartego po³±czenia. </para> <para> Po³±czenie z serwerem zostanie zamkniête zaraz po zakoñczeniu wykonywania skryptu, chyba ¿e zostanie zamkniête wcze¶niej przez odpowiednie wywo³anie <function>mysql_close</function>. </para> <example> <title>MySQL connect</title> <programlisting role="php"> &lt;?php $link = mysql_connect ("localhost", "username", "secret") or die ("Could not connect"); print ("Connected successfully"); mysql_close ($link); ?&gt; </programlisting> </example> <para> Patrz tak¿e <function>mysql_pconnect</function> i <function>mysql_close</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-create-db"> <refnamediv> <refname>mysql_create_db</refname> <refpurpose>Tworzy bazê MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_create_db</function></funcdef> <paramdef>string <parameter>nazwa_bazy</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_create_db</function> tworzy now± bazê na serwerze skojarzonym z podanym identyfikatorem po³±czenia. </para> <!-- returns?? bool -> succes? --> <example> <title>tworzenie bazy MySQL</title> <programlisting role="php"> &lt;?php $link = mysql_pconnect ("kron", "jutta", "geheim") or die ("Could not connect"); if (mysql_create_db ("my_db")) { print ("Database created successfully\n"); } else { printf ("Error creating database: %s\n", mysql_error ()); } ?&gt; </programlisting> </example> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_createdb</function>. </para> <para> Patrz tak¿e: <function>mysql_drop_db</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-data-seek"> <refnamediv> <refname>mysql_data_seek</refname> <refpurpose>Przesuwa wewnêtrzny wska¼nik wyniku</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>mysql_data_seek</function></funcdef> <paramdef>resource <parameter>identyfikator_wyniku</parameter></paramdef> <paramdef>int <parameter>numer_wiersza</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: &true; w przypadku sukcesu lub &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_data_seek</function> przesuwa wewnêtrzny wska¼nik wiersza wyniku operacji MySQL skojarzony z podanym identyfikatorem wyniku na podany numer wiersza. Nastêpne wywo³anie <function>mysql_fetch_row</function> zwróci ten wiersz. </para> <para> <parameter>numer_wiersza</parameter> liczony jest od 0. </para> <example> <title>mysql_data_seek</title> <programlisting role="php"> &lt;?php $link = mysql_pconnect ("kron", "jutta", "geheim") or die ("Could not connect"); mysql_select_db ("samp_db") or die ("Could not select database"); $query = "SELECT last_name, first_name FROM friends"; $result = mysql_query ($query) or die ("Query failed"); # fetch rows in reverse order for ($i = mysql_num_rows ($result) - 1; $i >=0; $i--) { if (!mysql_data_seek ($result, $i)) { echo "Cannot seek to row $i\n"; continue; } if(!($row = mysql_fetch_object ($result))) continue; echo ("$row-&gt;last_name $row-&gt;first_name&lt;BR&gt;\n"; } mysql_free_result ($result); ?&gt; </programlisting> </example> </refsect1> </refentry> <refentry id="function.mysql-db-name"> <refnamediv> <refname>mysql_db_name</refname> <refpurpose>Pobiera dane wynikowe</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_db_name</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>wiersz</parameter></paramdef> <paramdef>mixed <parameter> <optional>pole</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_db_name</function> przyjmuje jako pierwszy parametr wska¼nik wyniku zwrócony przez <function>mysql_list_dbs</function>. Parametr <parameter>wiersz</parameter> dzia³a jako indeks wyniku. </para> <para> Je¶li wyst±pi b³±d, zwrócona zostanie warto¶æ &false;. U¿yj <function>mysql_errno</function> i <function>mysql_error</function> by poznaæ przyczynê b³êdu. </para> <example> <title>mysql_db_name</title> <programlisting role="php"> &lt;?php error_reporting(E_ALL); mysql_connect('dbhost', 'username', 'password'); $db_list = mysql_list_dbs(); $i = 0; $cnt = mysql_num_rows($db_list); while ($i &lt; $cnt) { echo mysql_db_name($db_list, $i) . "\n"; $i++; } ?&gt; </programlisting> </example> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_dbname</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-db-query"> <refnamediv> <refname>mysql_db_query</refname> <refpurpose>Wysy³a zapytanie do bazy MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_db_query</function></funcdef> <paramdef>string <parameter>baza</parameter></paramdef> <paramdef>string <parameter>zapytanie</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: dodatni identyfikator wyniku MySQL wskazuj±cy na wynik zapytania, lub &false; w przypadku b³êdu. </para> <para> <function>mysql_db_query</function> wybiera bazê i wykonuje na niej zapytanie. Je¿eli opcjonalny identyfikator po³±czenia nie zosta³ podany, funkcja bêdzie próbowaæ znale¼æ otwarte po³±czenie z serwerem MySQL. Je¿eli to siê nie powiedzie, bêdzie próbowaæ je stworzyæ tak, jakby wywo³ane zosta³o <function>mysql_connect</function> bez argumentów. </para> <para> Patrz tak¿e: <function>mysql_connect</function> i <function>mysql_query</function>. </para> <para> <note> <simpara> Od PHP 4.0.6 odradza sie stosowania tej funkcji. Nie u¿ywaj jej. W zamian korzystaj z <function>mysql_select_db</function> i <function>mysql_query</function>. </simpara> </note> </para> </refsect1> </refentry> <refentry id="function.mysql-drop-db"> <refnamediv> <refname>mysql_drop_db</refname> <refpurpose>Usuwa bazê MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>mysql_drop_db</function></funcdef> <paramdef>string <parameter>nazwa_bazy</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: &true; w przypadku sukcesu lub &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_drop_db</function> usuwa ca³± bazê z serwera skojarzonego z podanym identyfikatorem po³±czenia. </para> <para> Patrz tak¿e: <function>mysql_create_db</function>. Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_dropdb</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-errno"> <refnamediv> <refname>mysql_errno</refname> <refpurpose> Zwraca numer komunikatu b³êdu z ostatniej operacji MySQL </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_errno</function></funcdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca numer b³êdu ostatniej operacji MySQL lub <literal>0</literal> (zero) je¶li wyst±pi b³±d. </para> <para> B³êdy pochodz±ce z klienta bazy MySQL ju¿ nie powoduj± wy¶wietlania ostrze¿eñ. Zamiast tego, u¿yj <function>mysql_errno</function> by uzyskaæ numer b³êdu. We¼ pod uwagê, ¿e ta funkcja zwraca numer b³êdu z ostatnio u¿ytej funkcji MySQL (wy³±czaj±c <function>mysql_error</function> i <function>mysql_errno</function>), dlatego je¶li jej u¿ywasz, upewnij siê, by zrobiæ to przed u¿yciem nastêpnej funkcji MySQL. <informalexample> <programlisting role="php"> &lt;?php mysql_connect("marliesle"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; mysql_select_db("nonexistentdb"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; $conn = mysql_query("SELECT * FROM nonexistenttable"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; ?&gt; </programlisting> </informalexample> </para> <para> Patrz tak¿e: <function>mysql_error</function> </para> </refsect1> </refentry> <refentry id="function.mysql-error"> <refnamediv> <refname>mysql_error</refname> <refpurpose> Zwraca tekst komunikatu b³êdu z ostatniej operacji MySQL </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_error</function></funcdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca tekst komunikatu b³êdu z ostatnio u¿ytej funkcji MySQL, lub <literal>''</literal> (pusty ³añcuch) je¶li wyst±pi b³±d. </para> <para> B³êdy pochodz±ce z klienta bazy MySQL ju¿ nie powoduj± wy¶wietlania ostrze¿eñ. Zamiast tego, u¿yj <function>mysql_error</function> by uzyskaæ komunikat b³êdu. We¼ pod uwagê, ¿e ta funkcja zwraca komunikat b³êdu z ostatnio u¿ytej funkcji MySQL (wy³±czaj±c <function>mysql_error</function> i <function>mysql_errno</function>), dlatego je¶li jej u¿ywasz, upewnij siê, by zrobiæ to przed u¿yciem nastêpnej funkcji MySQL. <informalexample> <programlisting role="php"> &lt;?php mysql_connect("marliesle"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; mysql_select_db("nonexistentdb"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; $conn = mysql_query("SELECT * FROM nonexistenttable"); echo mysql_errno().": ".mysql_error()."&lt;BR>"; ?&gt; </programlisting> </informalexample> </para> <para> Patrz tak¿e: <function>mysql_errno</function> </para> </refsect1> </refentry> <refentry id="function.mysql-escape-string"> <refnamediv> <refname>mysql_escape_string</refname> <refpurpose> Dodaje znaki unikowe na u¿ytek mysql_query </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_escape_string</function></funcdef> <paramdef>string <parameter>³añcuch_bez_znaków_unikowych</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Ta funkcja wstawi znaki unikowe do <parameter>³añcuch_bez_znaków_unikowych</parameter>, aby bezpiecznym by³o umieszczenie go w <function>mysql_query</function>. </para> <note> <simpara> <function>mysql_escape_string</function> nie dotyczy znaków <literal>%</literal> i <literal>_</literal>. </simpara> </note> </refsect1> </refentry> <refentry id="function.mysql-fetch-array"> <refnamediv> <refname>mysql_fetch_array</refname> <refpurpose> Zapisuje wiersz wyniku w tablicy asocjacyjnej, numerycznej lub w obu </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>array <function>mysql_fetch_array</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter> <optional>typ_wyniku</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca tablicê zawieraj±c± pobrany wiersz, lub &false; je¿eli nie ma wiêcej wierszy w <parameter>wynik</parameter>. </para> <para> <function>mysql_fetch_array</function> jest rozszerzon± wersj± <function>mysql_fetch_row</function>. Oprócz zapisywania danych w indeksach numerycznych, zapisuje je te¿ w indeksach przyporz±dkowuj±cych (asocjacyjnych), u¿ywaj±c nazw pól jako kluczy. </para> <para> Je¿eli dwie lub wiêcej kolumn wyniku ma te same nazwy, ostatnia kolumna bêdzie brana pod uwagê. Dostêp do innych kolumn o tej samej nazwie jest mo¿liwy jedynie przez indeksowanie numeryczne lub przez stworzenie aliasa. <informalexample> <programlisting> select t1.f1 as foo t2.f1 as bar from t1, t2 </programlisting> </informalexample> </para> <para> Godne uwagi jest to, ¿e u¿ycie <function>mysql_fetch_array</function> NIE jest znacz±co wolniejsze od u¿ycia <function>mysql_fetch_row</function>, a jest bardziej funkcjonalne. </para> <para> Opcjonalny drugi argument <parameter>result_type</parameter> w funkcji <function>mysql_fetch_array</function> jest sta³± i mo¿e przyjmowaæ nastêpuj±ce warto¶ci: MYSQL_ASSOC, MYSQL_NUM i MYSQL_BOTH. (funkcjonalno¶æ tê dodano w PHP 3.0.7) </para> <para> Po dalsze szczegó³y patrz tak¿e <function>mysql_fetch_row</function> i <function>mysql_fetch_assoc</function>. </para> <example> <title><function>mysql_fetch_array</function></title> <programlisting role="php"> &lt;?php mysql_connect ($host, $user, $password); $result = mysql_db_query ("database","select user_id, fullname from table"); while ($row = mysql_fetch_array ($result)) { echo "user_id: ".$row["user_id"]."&lt;br>\n"; echo "user_id: ".$row[0]."&lt;br>\n"; echo "fullname: ".$row["fullname"]."&lt;br>\n"; echo "fullname: ".$row[1]."&lt;br>\n"; } mysql_free_result ($result); ?&gt; </programlisting> </example> </refsect1> </refentry> <refentry id="function.mysql-fetch-assoc"> <refnamediv> <refname>mysql_fetch_assoc</refname> <refpurpose> Zapisuje wiersz wyniku w tablicy asocjacyjnej </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>array <function>mysql_fetch_assoc</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Zwraca tablicê zawieraj±c± pobrany wiersz, lub &false; je¿eli nie ma wiêcej wierszy w <parameter>wynik</parameter>. </para> <para> U¿ycie <function>mysql_fetch_assoc</function> jest równoznaczne z wywo³aniem <function>mysql_fetch_array</function> podaj±c jako drugi argument MYSQL_ASSOC. Zwraca jedynie tablicê asocjacyjn±. Pocz±tkowo tak w³a¶nie zachowywa³a siê funkcja <function>mysql_fetch_array</function>. Je¶li oprócz indeksowania asocjacyjnego potrzebujesz tak¿e numeryczne, u¿yj funkcji <function>mysql_fetch_array</function>. </para> <para> Je¿eli dwie lub wiêcej kolumn wyniku ma te same nazwy, ostatnia kolumna bêdzie brana pod uwagê. Dostêp do innych kolumn o tej samej nazwie jest mo¿liwy przy u¿yciu funkcji <function>mysql_fetch_array</function>, która wprowadzi równie¿ indeksowanie numeryczne. </para> <para> Godne uwagi jest to, ¿e u¿ycie <function>mysql_fetch_assoc</function> NIE jest znacz±co wolniejsze od u¿ycia <function>mysql_fetch_row</function>, a jest bardziej funkcjonalne. </para> <para> Po dalsze szczegó³y patrz tak¿e <function>mysql_fetch_row</function> i <function>mysql_fetch_array</function>. </para> <example> <title><function>mysql_fetch_assoc</function></title> <programlisting role="php"> &lt;?php mysql_connect ($host, $user, $password); $result = mysql_db_query ("database","select * from table"); while ($row = mysql_fetch_assoc ($result)) { echo $row["user_id"]; echo $row["fullname"]; } mysql_free_result ($result); ?&gt; </programlisting> </example> </refsect1> </refentry> <refentry id="function.mysql-fetch-field"> <refnamediv> <refname>mysql_fetch_field</refname> <refpurpose> Pobiera z wyniku informacje o kolumnie i zwraca jako obiekt </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>object <function>mysql_fetch_field</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter> <optional>ofset_pola</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca obiekt zawieraj±cy informacje o polu. </para> <para> <function>mysql_fetch_field</function> pozwala uzyskaæ informacje o polach w danym wyniku zapytania. Je¿eli ofset pola nie zosta³ podany, zwracane zostanie nastêpne pole nie pobrane jeszcze przez <function>mysql_fetch_field</function>. </para> <para> W³a¶ciwo¶ci obiektu: <itemizedlist> <listitem> <simpara> name - nazwa kolumny </simpara> </listitem> <listitem> <simpara> table - nazwa tabeli do której nale¿y kolumna </simpara> </listitem> <listitem> <simpara> max_length - maksymalna d³ugo¶æ kolumny </simpara> </listitem> <listitem> <simpara> not_null - 1 je¿eli pole nie mo¿e byæ puste (&null;) </simpara> </listitem> <listitem> <simpara> primary_key - 1 je¿eli kolumna jest kluczem podstawowym </simpara> </listitem> <listitem> <simpara> unique_key - 1 je¿eli kolumna jest kluczem unikatowym </simpara> </listitem> <listitem> <simpara> multiple_key - 1 je¿eli kolumna jest kluczem nieunikatowym </simpara> </listitem> <listitem> <simpara> numeric - 1 je¿eli kolumna jest liczbowa </simpara> </listitem> <listitem> <simpara> blob - 1 je¿eli kolumna jest typu BLOOB </simpara> </listitem> <listitem> <simpara> type - typ kolumny </simpara> </listitem> <listitem> <simpara> unsigned - 1 je¿eli kolumna jest bez znaku (plus lub minus) </simpara> </listitem> <listitem> <simpara> zerofill - 1 je¿eli kolumna jest wype³niona zerami </simpara> </listitem> </itemizedlist> </para> <example> <title><function>mysql_fetch_field</function></title> <programlisting role="php"> &lt;?php mysql_connect ($host, $user, $password) or die ("Could not connect"); $result = mysql_db_query ("database", "select * from table") or die ("Query failed"); # get column metadata $i = 0; while ($i &lt; mysql_num_fields ($result)) { echo "Information for column $i:&lt;BR>\n"; $meta = mysql_fetch_field ($result); if (!$meta) { echo "No information available&lt;BR>\n"; } echo "&lt;PRE> blob: $meta->blob max_length: $meta->max_length multiple_key: $meta->multiple_key name: $meta->name not_null: $meta->not_null numeric: $meta->numeric primary_key: $meta->primary_key table: $meta->table type: $meta->type unique_key: $meta->unique_key unsigned: $meta->unsigned zerofill: $meta->zerofill &lt;/PRE>"; $i++; } mysql_free_result ($result); ?&gt; </programlisting> </example> <para> Patrz tak¿e <function>mysql_field_seek</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-fetch-lengths"> <refnamediv> <refname>mysql_fetch_lengths</refname> <refpurpose> Pobiera d³ugo¶æ ka¿dego pola w wierszu wyniku </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>array <function>mysql_fetch_lengths</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: Tablicê zawieraj±c± d³ugo¶æ ka¿dego pola z wiersza ostatnio pobranego przez <function>mysql_fetch_row</function>, lub &false;, je¿eli wyst±pi b³±d. </para> <para> <function>mysql_fetch_lengths</function> zapisuje w tablicy d³ugo¶ci wszystkich pól z ostatniego wiersza pobranego przez funkcje <function>mysql_fetch_row</function>, <function>mysql_fetch_array</function> i <function>mysql_fetch_object</function> zaczynaj±c od ofsetu 0. </para> <para> Patrz tak¿e: <function>mysql_fetch_row</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-fetch-object"> <refnamediv> <refname>mysql_fetch_object</refname> <refpurpose>Zapisuje wiersz wyniku jako obiekt</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>object <function>mysql_fetch_object</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter> <optional>typ_wyniku</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: obiekt, którego w³a¶ciwo¶ci zawieraj± pobrany wiersz, lub &false;, je¿eli nie ma wiêcej wierszy. </para> <para> Funkcja <function>mysql_fetch_object</function> jest podobna do <function>mysql_fetch_array</function> z jedn± ró¿nic± - zamiast tablicy zwracany jest obiekt. Oczywi¶cie oznacza to, ¿e dane dostêpne s± tylko przez podanie nazw pól, a nie przed podanie ofsetu (liczby nie s± dopuszczalne jako nazwy w³a¶ciwo¶ci). </para> <para> Opcjonalny argument <parameter>result_typ</parameter> jest sta³± i mo¿e przyjmowaæ nastêpuj±ce warto¶ci: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH. </para> <para> Szybko¶æ tej funkcji jest identyczna jak <function>mysql_fetch_array</function> i prawie taka sama jak <function>mysql_fetch_row</function> (ró¿nica jest nieznaczna). <example> <title><function>mysql_fetch_object</function></title> <programlisting role="php"> &lt;?php mysql_connect ($host, $user, $password); $result = mysql_db_query ("database", "select * from table"); while ($row = mysql_fetch_object ($result)) { echo $row->user_id; echo $row->fullname; } mysql_free_result ($result); ?&gt; </programlisting> </example> </para> <para> Patrz tak¿e: <function>mysql_fetch_array</function> i <function>mysql_fetch_row</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-fetch-row"> <refnamediv> <refname>mysql_fetch_row</refname> <refpurpose>Zapisuje wiersz wyniku w tablicy wyliczeniowej</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>array <function>mysql_fetch_row</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: Tablicê zawieraj±c± wiersz lub &false; je¿eli nie ma wiêcej wierszy w <parameter>wynik</parameter>. </para> <para> <function>mysql_fetch_row</function> pobiera jeden wiersz danych z wyniku skojarzonego z podanym identyfikatorem wyniku. Wiesz zwracany jest jako tablica. Komórki s± umieszczone pod oddzielnymi ofsetami, zaczynaj±c od 0. </para> <para> Kolejne wywo³anie <function>mysql_fetch_row</function> zwróci nastêpny wiersz z wyniku, lub &false; je¿eli nie ma wiêcej wierszy. </para> <para> Patrz tak¿e: <function>mysql_fetch_array</function>, <function>mysql_fetch_object</function>, <function>mysql_data_seek</function>, <function>mysql_fetch_lengths</function> i <function>mysql_result</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-flags"> <refnamediv> <refname>mysql_field_flags</refname> <refpurpose> Pobiera flagi dla danego pola w wyniku </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_field_flags</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>ofset_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_field_flags</function> zwraca flagi podanego pola. Flagi s± przedstawiane jako pojedyncze s³owa oddzielone spacj± tak, by mo¿na by³o je rodzieliæ za pomoc± funkcji <function>explode</function>. </para> <para>Nastêpuj±ce flagi s± przedstawiane je¿eli wersja MySQLa jest na tyle aktualna by je obs³u¿yæ: "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp". </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_fieldflags</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-name"> <refnamediv> <refname>mysql_field_name</refname> <refpurpose>Podaje nazwê danego pola w wyniku</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_field_name</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>indeks_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_field_name</function> zwraca nazwê danego pola. <parameter>wynik</parameter> musi byæ poprawnym identyfikatorem wyniku, a <parameter>indeks_pola</parameter> powinien zawieraæ liczbowy indeks pola. </para> <note> <para> <parameter>indeks_pola</parameter> liczy siê od 0. </para> <para> Indeksem trzeciego pola bêdzie liczba 2, czwartego 3 i tak dalej... </para> </note> <para> <example> <title><function>mysql_field_name</function></title> <programlisting role="php"> // The users table consists of three fields: // user_id // username // password. $res = mysql_db_query("users", "select * from users", $link); echo mysql_field_name($res, 0) . "\n"; echo mysql_field_name($res, 2); </programlisting> </example> </para> <para> Powy¿szy przyk³ad da nastêpuj±cy wynik: <informalexample> <programlisting> user_id password </programlisting> </informalexample> </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_fieldname</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-len"> <refnamediv> <refname>mysql_field_len</refname> <refpurpose>Zwraca d³ugo¶æ danego pola</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_field_len</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>ofset_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_field_len</function> zwraca d³ugo¶æ danego pola. </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_fieldlen</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-seek"> <refnamediv> <refname>mysql_field_seek</refname> <refpurpose>Przesuwa wska¼nik wyniku do wybranego pola</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_field_seek</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>ofset_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Przesuwa siê na wybrane pole. Je¿eli kolejne wywo³anie <function>mysql_fetch_field</function> nie bêdzie zawieraæ indeksu pola, wtedy zwrócone zostanie to pole. </para> <para> Patrz tak¿e: <function>mysql_fetch_field</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-table"> <refnamediv> <refname>mysql_field_table</refname> <refpurpose> Pobiera nazwê tabeli w której znajduje siê dane pole </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_field_table</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>ofset_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Pobiera nazwê tabeli w której znajduje siê dane pole </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_fieldtable</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-field-type"> <refnamediv> <refname>mysql_field_type</refname> <refpurpose> Pobiera typ podanego pola </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_field_type</function></funcdef> <paramdef>iresource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>ofset_pola</parameter></paramdef> </funcprototype> </funcsynopsis> <para> Funkcja <function>mysql_field_type</function> jest podobna do <function>mysql_field_name</function>. Argumenty s± identyczne, ale zwracany jest typ pola. Bêdzie to jeden z "int", "real", "string", "blob" lub innych opisanych w dokumentacji <ulink url="&url.mysql.docs;">MySQL</ulink>. <example> <title>typy pól MySQL</title> <programlisting role="php"> &lt;?php mysql_connect ("localhost:3306"); mysql_select_db ("wisconsin"); $result = mysql_query ("SELECT * FROM onek"); $fields = mysql_num_fields ($result); $rows = mysql_num_rows ($result); $i = 0; $table = mysql_field_table ($result, $i); echo "Your '".$table."' table has ".$fields." fields and ".$rows." records &lt;BR>"; echo "The table has the following fields &lt;BR>"; while ($i &lt; $fields) { $type = mysql_field_type ($result, $i); $name = mysql_field_name ($result, $i); $len = mysql_field_len ($result, $i); $flags = mysql_field_flags ($result, $i); echo $type." ".$name." ".$len." ".$flags."&lt;BR>"; $i++; } mysql_close(); ?&gt; </programlisting> </example> </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_fieldtype</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-free-result"> <refnamediv> <refname>mysql_free_result</refname> <refpurpose>Zwalnia pamiêæ zajmowan± przez wynik</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_free_result</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_free_result</function> zwolni ca³± pamiêæ przydzielon± podanemu wska¼nikowi wyniku. </para> <para> <function>mysql_free_result</function> u¿ywa siê tylko w wypadkach obawy zajêcia zbyt du¿ej ilo¶ci pamiêci przez zapytania zwracaj±ce du¿e ilo¶ci danych. Ca³a pamiêæ przydzielona wynikowi skojarzonemu z podanym identyfikatorem wyniku bêdzie automatycznie zwolniona. <!-- TODO and as of PHP4 before, see freeing resources --> </para> <!-- returns?? --> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_freeresult</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-insert-id"> <refnamediv> <refname>mysql_insert_id</refname> <refpurpose> Podaje numer id wygenerowany podczas ostatniej operacji INSERT </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_insert_id</function></funcdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_insert_id</function> zwraca ID wygenerowane dla pola z w³asno¶ci± AUTO_INCREMENT. Funkcja zwróci ID wygenerowane automatycznie przez ostatni± operacjê INSERT u¿ywaj±c± podanego <parameter>identyfikatora_po³±czenia</parameter>. Je¿eli <parameter>identyfikator_po³±czenia</parameter> nie zosta³ podany, wykorzystywane jest ostatnio otwarte po³±czenie. </para> <para> <function>mysql_insert_id</function> zwróci 0 je¶li ostatnie zapytanie nie generowa³o warto¶ci AUTO_INCREMENT. Je¶li chcesz przechowaæ zwrócony przez tê funkcjê wynik, upewnij siê, ¿e wywo³ujesz j± zaraz po zapytaniu generuj±cym now± warto¶æ. </para> <note> <para> Funkcja MySQL <literal>LAST_INSERT_ID()</literal> zawsze zawiera ostatnio wygenerowane ID, a zwracana warto¶c nie jest czyszczona pomiêdzy kolejnymi zapytaniami. </para> </note> <warning> <para> <function>mysql_insert_id</function> konwertuje typ warto¶ci otrzymanej od natywnej funkcji MySQL C API <literal>mysql_insert_id()</literal> na typ <literal>long</literal>. Je¶li kolumna AUTO_INCREMENT jest typu BIGINT, warto¶æ zwracana przez <function>mysql_insert_id</function> bêdzie niepoprawna. Nale¿y u¿yæ wewnêtrznej funkcji MySQL <literal>LAST_INSERT_ID()</literal>. </para> </warning> </refsect1> </refentry> <refentry id="function.mysql-list-dbs"> <refnamediv> <refname>mysql_list_dbs</refname> <refpurpose> Pobiera nazwy baz dostêpnych na serwerze MySQL </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_list_dbs</function></funcdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_list_dbs</function> zwróci wynik zawieraj±cy nazwy baz dostêpnych na serwerze skojarzonym z identyfikatorem po³±czenia. ¯eby uzyskaæ nazwy za wska¼nika wyniku nale¿y u¿yæ funkcji <function>mysql_tablename</function>. </para> <para> <example> <title><function>mysql_list_dbs</function></title> <programlisting role="php"> $link = mysql_connect('localhost', 'myname', 'secret'); $db_list = mysql_list_dbs($link); while ($row = mysql_fetch_object($db_list)) { echo $row->Database . "\n"; } </programlisting> </example> </para> <para> Powy¿szy przyk³ad da nastêpuj±cy wynik: <informalexample> <programlisting> baza1 baza2 baza3 ... </programlisting> </informalexample> </para> <note> <para> Powy¿szy kod bêdzie równie dobrze dzia³a³ z funkcj± <function>mysql_fetch_row</function> lub innymi podobnymi. </para> </note> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_listdbs</function>. </para> <para> Patrz tak¿e <function>mysql_db_name</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-list-fields"> <refnamediv> <refname>mysql_list_fields</refname> <refpurpose>Pobiera informacje o polach tabeli MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_list_fields</function></funcdef> <paramdef>string <parameter>baza</parameter></paramdef> <paramdef>string <parameter>tabela</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_list_fields</function> pobiera informacje o danej tabeli. Argumentami s± nazwa bazy i nazwa tabeli. Zwracany jest wska¼nik wyniku, który mo¿e zostaæ u¿yty z funkcjami <function>mysql_field_flags</function>, <function>mysql_field_len</function>, <function>mysql_field_name</function> i <function>mysql_field_type</function>. </para> <!-- this is very outdated, and now incorrect <para> A result identifier is a positive integer. The function returns -1 if a error occurs. A string describing the error will be placed in <literal>$phperrmsg</literal>, and unless the function was called as <literal>@mysql()</literal> then this error string will also be printed out. </para> --> <para> <example> <title><function>mysql_list_fields</function></title> <programlisting role="php"> $link = mysql_connect('localhost', 'myname', 'secret'); $fields = mysql_list_fields("database1", "table1", $link); $columns = mysql_num_fields($fields); for ($i = 0; $i &lt; $columns; $i++) { echo mysql_field_name($fields, $i) . "\n";; } </programlisting> </example> </para> <para> Powy¿szy przyk³ad da nastêpuj±cy wynik: <informalexample> <programlisting> pole1 pole2 pole3 ... </programlisting> </informalexample> </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_listfields</function>. </para> <!-- TODO: this is equiv. with 'select * from $table where &false;,' which implies you can better use the field-research functions on a real query, that saves you one mysql-query. --> </refsect1> </refentry> <refentry id="function.mysql-list-tables"> <refnamediv> <refname>mysql_list_tables</refname> <refpurpose>Pobiera listê tabel z bazy MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_list_tables</function></funcdef> <paramdef>string <parameter>baza</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_list_tables</function> przyjmuje jako argument nazwê bazy i zwraca wska¼nik wyniku podobnie jak funkcja <function>mysql_db_query</function>. ¯eby uzyskaæ nazwy tabel za wska¼nika wyniku nale¿y u¿yæ funkcji <function>mysql_tablename</function>. </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_listtables</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-num-fields"> <refnamediv> <refname>mysql_num_fields</refname> <refpurpose>Zwraca liczbê pól w wyniku</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_num_fields</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_num_fields</function> zwraca liczbê pól w wyniku. </para> <para> Patrz tak¿e: <function>mysql_db_query</function>, <function>mysql_query</function>, <function>mysql_fetch_field</function>, <function>mysql_num_rows</function>.</para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_numfields</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-num-rows"> <refnamediv> <refname>mysql_num_rows</refname> <refpurpose>Zwraca liczbê wierszy w wyniku</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_num_rows</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_num_rows</function> zwraca liczbê wierszy w wyniku. Tê funkcjê stosuje siê tylko do operacji SELECT. Aby pobraæ ilo¶æ wierszy przetworzonych w operacjach INSERT, UPDATE lub DELETE nale¿y u¿yæ funkcji <function>mysql_affected_rows</function>. <example> <title><function>mysql_num_rows</function></title> <programlisting role="php"> &lt;?php $link = mysql_connect("localhost", "username", "password"); mysql_select_db("database", $link); $result = mysql_query("SELECT * FROM table1", $link); $num_rows = mysql_num_rows($result); echo "$num_rows Rows\n"; ?&gt; </programlisting> </example> </para> <para> Patrz tak¿e: <function>mysql_affected_rows</function>, <function>mysql_connect</function>, <function>mysql_select_db</function> i <function>mysql_query</function>. </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_numrows</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-pconnect"> <refnamediv> <refname>mysql_pconnect</refname> <refpurpose> Otwiera podtrzymywane po³±czenie z serwerem MySQL </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_pconnect</function></funcdef> <paramdef>string <parameter> <optional>host <optional>:port</optional> <optional>:/sciezka/do/gniazda</optional> </optional> </parameter> </paramdef> <paramdef>string <parameter><optional>u¿ytkownik</optional></parameter> </paramdef> <paramdef>string <parameter><optional>has³o</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca identyfikator po³±czenia w przypadku powodzenia, lub &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_connect</function> nawi±zuje po³±czenie z serwerem MySQL. Je¶li nie podano argumentów, przyjmowane s± nastêpuj±ce warto¶ci domy¶lne: <parameter>host:port</parameter> = 'localhost:3306', <parameter>u¿ytkownik</parameter> = nazwa u¿ytkownika bêd±cego w³a¶cicielem procesu serwera, <parameter>has³o</parameter> = puste has³o. </para> <para> Argument <parameter>host</parameter> mo¿e równie¿ zawieraæ numer portu, np. &quot;host:port&quot; lub ¶cie¿kê do gniaza np. &quot;:/sciezka/do/gniazda&quot; dla localhosta. <note> <para> Obs³ugê &quot;:port&quot; dodano w PHP 3.0B4. </para> <para> Obs³ugê &quot;:/sciezka/do/gniazda&quot; dodano w PHP 3.0.10. </para> </note> </para> <!-- TODO move the story to features.persistent, and refer to that --> <para> <function>mysql_pconnect</function> zachowuje siê prawie jak <function>mysql_connect</function> z dwoma zasadniczymi ró¿nicami. </para> <para> Pierwsza, podczas ³±czenia funkcja najpierw spróbuje znale¼æ po³±czenie (podtrzymywane) ju¿ otwarte dla tego samego hosta, u¿ytkownika i has³a. Je¿eli je znajdzie, jego identyfikator zostanie zwrócony zamiast otwierania nowego po³±czenia. </para> <para> Druga, po³±czenie z serwerem SQL nie zostanie zamkniête po zakoñczeniu wykonywania skryptu. Zamiast tego po³±czenie pozostanie otwarte do pó¼niejszego u¿ycia (<function>mysql_close</function> nie zamyka po³±czeñ nawi±zanych za pomoc± <function>mysql_pconnect</function>). </para> <para> Dlatego te¿ ten typ po³±czeñ nazywany jest 'podtrzymywanym'. </para> </refsect1> </refentry> <refentry id="function.mysql-query"> <refnamediv> <refname>mysql_query</refname> <refpurpose>Wysy³a zapytanie do serwera MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_query</function></funcdef> <paramdef>string <parameter>zapytanie</parameter></paramdef> <paramdef>resource <parameter><optional>identyfikator_po³±czenia</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_query</function> wysy³a zapytanie do aktywnej bazy na serwerze skojarzonym z podanym identyfikatorem po³±czenia. Je¿eli <parameter>identyfikator_po³±czenia</parameter> nie zosta³ podany, wykorzystywane jest ostatnio otwarte po³±czenie. Je¿eli ¿adne po³±czenie nie jest otwarte, podjêta zostanie próba ustanowienia go, poprzez wywo³anie <function>mysql_connect</function> bez argumentów. </para> <note> <para> Zapytanie nie powinno koñczyæ siê znakiem ¶rednika. </para> </note> <para> <function>mysql_query</function> zwraca &true; (nie-zero) lub &false; informuj±c czy zapytanie zakoñczy³o siê sukcesem lub te¿ nie. Zwrócona warto¶æ &true; oznacza, ¿e zapytanie by³o prawid³owe i mo¿e byæ wykonane przez serwer. Nie mówi natomiast nic o liczbie przetworzonych lub zwróconych wierszy. Jest równie¿ mo¿liwe, ¿e zapytanie zostanie wykonane poprawnie, nie przetwarzaj±c lub zwracaj±c ¿adnych wierszy. </para> <para> Nastêpuj±ce zapytanie jest niepoprawne sk³adniowo, dlatego <function>mysql_query</function> zwróci &false;: <example> <title><function>mysql_query</function></title> <programlisting role="php"> &lt;?php $result = mysql_query ("SELECT * WHERE 1=1") or die ("Invalid query"); ?&gt; </programlisting> </example> </para> <para> Nastêpuj±ce zapytanie jest niepoprawne semantycznie, je¿eli <literal>my_col</literal> nie jest kolumn± w tabeli <literal>my_tbl</literal>, dlatego <function>mysql_query</function> zwróci &false;: <example> <title><function>mysql_query</function></title> <programlisting role="php"> &lt;?php $result = mysql_query ("SELECT my_col FROM my_tbl") or die ("Invalid query"); ?&gt; </programlisting> </example> </para> <para> <function>mysql_query</function> zwróci &false; równie¿ wtedy, gdy nie bêdzie praw dostêpu do tabel wyszczególnionych w zapytaniu. </para> <para> Przyjmuj±c, ¿e zapytanie siê powiod³o, mo¿na u¿yæ <function>mysql_num_rows</function> by uzyskaæ informacjê o liczbie wierszy zwróconych w instrukcji SELECT, lub <function>mysql_affected_rows</function> w celu uzyskania liczby wierszy przetworzonych przez instrukcje DELETE, INSERT, REPLACE i UPDATE. </para> <para> Po operacji SELECT, <function>mysql_query</function> zwróci nowy identyfikator wyniku, który mo¿na przekazaæ do funkcji <function>mysql_result</function>. Po zakoñczeniu operacji na wyniku, mo¿na zwolniæ zasoby przez niego wykorzystywane wywo³uj±c <function>mysql_free_result</function>. Po zakoñczeniu dzia³ania skryptu pamiêæ i tak bêdzie automatycznie zwolniona. </para> <para> Patrz tak¿e: <function>mysql_affected_rows</function>, <function>mysql_db_query</function>, <function>mysql_unbuffered_query</function>, <function>mysql_free_result</function>, <function>mysql_result</function>, <function>mysql_select_db</function> i <function>mysql_connect</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-unbuffered-query"> <refnamediv> <refname>mysql_unbuffered_query</refname> <refpurpose> Wysy³a zapytanie do serwera MySQL nie pobieraj±c i buforuj±c wyniku </refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>resource <function>mysql_unbuffered_query</function></funcdef> <paramdef>string <parameter>zapytanie</parameter></paramdef> <paramdef>resource <parameter><optional>identyfikator_po³±czenia</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_unbuffered_query</function> wysy³a <parameter>zapytanie</parameter> SQL do serwera MySQL nie pobieraj±c i buforuj±c wyniku, jak to czyni <function>mysql_query</function>. Po pierwsze, zauwa¿alnie oszczêdza to pamiêæ, je¶li zapytania SQL generuj± du¿e wyniki. Po drugie, mo¿na pracowaæ na zbiorze wynikowym ju¿ po odebraniu od bazy pierwszego wiersza. Nie trzeba czekaæ, a¿ zakoñczy siê dzia³anie zapytania. Przy pracy z kilkoma po³±czeniami do bazy, nale¿y dodaæ opcjonalny parametr <parameter>identyfikator_po³±czenia</parameter>. </para> <note> <para> Oprócz korzy¶ci, funkcja <function>mysql_unbuffered_query</function> wprowadza pewne ograniczenia: nie mo¿na u¿yæ funkcji <function>mysql_num_rows</function> na zbiorze wyników zwróconym przez <function>mysql_unbuffered_query</function>. Trzeba tak¿e pobraæ wszystkie wiersze wyniku niebuforowanego zapytania SQL przed wys³aniem kolejnego. </para> </note> <para> Patrz tak¿e: <function>mysql_query</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-result"> <refnamediv> <refname>mysql_result</refname> <refpurpose>Zwraca dane wynikowe</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>mixed <function>mysql_result</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>wiersz</parameter></paramdef> <paramdef>mixed <parameter> <optional>pole</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_result</function> zwraca zawarto¶æ jednej komórki z <parameter>wyniku</parameter>. Jako argument <parameter>pole</parameter> mo¿na podaæ ofset, nazwê pola lub nazwê tabeli z nazw± pola (tabela.pole). Je¿eli nazwa kolumny zosta³a zast±piona synonimem ('select foo as bar from...'), nale¿y u¿yæ tej nazwy zamiast rzeczywistej. </para> <para> Przy pracy z du¿ymi wynikami, powinno siê rozwa¿yæ u¿ycie jednej z funkcji pobieraj±cych ca³y wiersz (patrz ni¿ej). Jako, ¿e funkcje te zwracaj± zawarto¶æ kilku komórek w jednym wywo³aniu, s± one ZNACZNIE szybsze ni¿ <function>mysql_result</function>. Podanie przesuniêcia (offset) w argumencie pole jest znacznie szybsze ni¿ podanie nazwy pola lub konstrukcji tabela.pole. </para> <para> Wywo³ania <function>mysql_result</function> nie powinny byæ mieszane z wywo³aniami innych funkcji operuj±cych na wyniku. </para> <para> Zalecane wydajniejsze akternatywy: <function>mysql_fetch_row</function>, <function>mysql_fetch_array</function> i <function>mysql_fetch_object</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-select-db"> <refnamediv> <refname>mysql_select_db</refname> <refpurpose>Wybiera bazê MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>bool <function>mysql_select_db</function></funcdef> <paramdef>string <parameter>nazwa_bazy</parameter></paramdef> <paramdef>resource <parameter> <optional>identyfikator_po³±czenia</optional> </parameter> </paramdef> </funcprototype> </funcsynopsis> <para> Zwraca: &true; w przypadku sukcesu, &false; je¶li wyst±pi b³±d. </para> <para> <function>mysql_select_db</function> ustawia aktywn± bazê danych na serwerze okre¶lonym przez podany identyfikator po³±czenia. Je¿eli identyfikator nie zostanie podany, wykorzystane zostanie ostatnio otwarte po³±czenie. Je¿eli ¿adne po³±czenie nie jest otwarte, funkcja spróbuje je nawi±zaæ wywo³uj±c <function>mysql_connect</function>. </para> <para> Kolejne wywo³ania funkcji <function>mysql_query</function> bêd± dotyczy </para> <para> Patrz tak¿e: <function>mysql_connect</function>, <function>mysql_pconnect</function> i <function>mysql_query</function>. </para> <para> Aby zachowaæ zgodno¶æ z poprzednimi wersjami, mo¿na u¿yæ równie¿ <function>mysql_selectdb</function>. </para> </refsect1> </refentry> <refentry id="function.mysql-tablename"> <refnamediv> <refname>mysql_tablename</refname> <refpurpose>Zwraca nazwê tabeli</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_tablename</function></funcdef> <paramdef>resource <parameter>wynik</parameter></paramdef> <paramdef>int <parameter>i</parameter></paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_tablename</function> przyjmuje jako parametry wska¼nik wyniku zwrócony przez <function>mysql_list_tables</function> oraz indeks, zwracaj±c nazwê tabeli. Liczbê tabel zwróconych w wyniku mo¿na okre¶liæ u¿ywaj±c funkcji <function>mysql_num_rows</function>. <example> <title>Przyk³ad u¿ycia <function>mysql_tablename</function></title> <programlisting role="php"> &lt;?php mysql_connect ("localhost:3306"); $result = mysql_list_tables ("wisconsin"); $i = 0; while ($i &lt; mysql_num_rows ($result)) { $tb_names[$i] = mysql_tablename ($result, $i); echo $tb_names[$i] . "&lt;BR>"; $i++; } ?&gt; </programlisting> </example> </para> </refsect1> </refentry> <refentry id="function.mysql-get-client-info"> <refnamediv> <refname>mysql_get_client_info</refname> <refpurpose>Pobiera informacje o kliencie MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_get_client_info</function></funcdef> <void/> </funcprototype> </funcsynopsis> <para> <function>mysql_get_client_info</function> zwraca ci±g znaków zawieraj±cy wersjê bibliotek klienta MySQL. </para> <para> <function>mysql_get_client_info</function> dodano w PHP 4.0.5. </para> </refsect1> </refentry> <refentry id="function.mysql-get-host-info"> <refnamediv> <refname>mysql_get_host_info</refname> <refpurpose>Pobiera informacje o ho¶cie MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>string <function>mysql_get_host_info</function></funcdef> <paramdef>resource <parameter><optional>identyfikator_po³±czenia</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_get_host_info</function> zwraca ci±g znaków opisuj±cy typ po³±czenia wykorzystywany przez <parameter>identyfikator_po³±czenia</parameter>, w³±czaj±c to nazwê serwera. Je¿eli <parameter>identyfikator_po³±czenia</parameter> nie zostanie podany, wykorzystane zostanie ostatnio otwarte po³±czenie. </para> <para> <function>mysql_get_host_info</function> dodano w PHP 4.0.5. </para> </refsect1> </refentry> <refentry id="function.mysql-get-proto-info"> <refnamediv> <refname>mysql_get_proto_info</refname> <refpurpose>Pobiera informacje o protokole MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_get_proto_info</function></funcdef> <paramdef>resource <parameter><optional>identyfikator_po³±czenia</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_get_proto_info</function> zwraca wersjê protoko³u, u¿ywanego przez <parameter>identyfikator_po³±czenia</parameter>. Je¿eli <parameter>identyfikator_po³±czenia</parameter> nie zostanie podany, wykorzystane zostanie ostatnio otwarte po³±czenie. </para> <para> <function>mysql_get_proto_info</function> dodano w PHP 4.0.5. </para> </refsect1> </refentry> <refentry id="function.mysql-get-server-info"> <refnamediv> <refname>mysql_get_server_info</refname> <refpurpose>Pobiera informacje o serwerze MySQL</refpurpose> </refnamediv> <refsect1> <title>Opis</title> <funcsynopsis> <funcprototype> <funcdef>int <function>mysql_get_server_info</function></funcdef> <paramdef>resource <parameter><optional>identyfikator_po³±czenia</optional></parameter> </paramdef> </funcprototype> </funcsynopsis> <para> <function>mysql_get_server_info</function> zwraca wersjê serwera, u¿ywanego przez <parameter>identyfikator_po³±czenia</parameter>. Je¿eli <parameter>identyfikator_po³±czenia</parameter> nie zostanie podany, wykorzystane zostanie ostatnio otwarte po³±czenie. </para> <para> <function>mysql_get_server_info</function> dodano w PHP 4.0.5. </para> </refsect1> </refentry> </reference> <!-- 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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/language/basic-syntax.xml +++ phpdoc/pl/language/basic-syntax.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="language.basic-syntax"> <title>Podstawowa sk³adnia</title> <!-- UWAGA: Ostatnia modyfikacja: 2001-05-16 13:00 GMT T³umaczenie : 2001-10-12 18:48 GMT the language part is currently under heavy revision. Please do not not make any heavy (i.e. structural) modifications to this part for a moment. You'd also better not start any translation yet. Comments are always welcome at phpdoc@lists.php.net Progress: intro : DOESN'T EXIST - yet? new chapter, with some introductionary remarks? Will be discussed on the ML soon. basic-syntax: FINISHED except maybe moving the 'advanced escaping' to a better place? TODO: - nada types : Being revised. Added all new types Boolean and Integer are more or less finished. The rest isn't. TODO: - why is $foo[bar] bad syntax? - what's the difference between unset($bla) and $bla = NULL; (it is different!) - $obj->{expr} syntax - (unset) cast????? - $bla = unset <== should've been nuked, don't mention it - $str{offset} syntax, rather than $str[offset] - read notes and apply when any of them are useful - remove notes which have been included here. - ... the rest: Not yet started with. TODO: - ? oop : has been revised by Kristian, DONE. --> <sect1 id="language.basic-syntax.phpmode"> <title>Wyskakiwanie z HTMLa</title> <para> Kiedy PHP zaczyna przetwarzaæ plik, po prostu wy¶wietla tekst, który napotka. Zatem, je¶li zmienisz rozszerzenie pliku HTML na .php, ten plik bêdzie dzia³a³ nadal. </para> <para> Je¶li chcesz wstawiæ komendy PHP w jakim¶ miejscu w swoim dokumencie musisz to zasygnalizowaæ, wchodz±c w "tryb PHP" którym¶ ze sposobów podanych poni¿ej: </para> <para> <example> <title>Mo¿liwo¶ci wyskoczenia z HTMLa</title> <programlisting> 1. &lt;? echo ("To jest najprostszy test, instrukcja SGML\n"); ?&gt; &lt;?= wyra¿enie ?&gt; To jest skrót takiej formy: "&lt;? echo wyra¿enie ?&gt;" 2. &lt;?php echo("Je¶li chcesz u¿ywaæ dokumentów XHTML i XML, rób to tak\n"); ?&gt; 3. &lt;script language="php"&gt; echo ("Niektóre edytory (jak FrontPage) nie lubi± instrukcji wchodz±cych w 'tryb PHP'"); &lt;/script&gt; 4. &lt;% echo ("Mo¿esz tak¿e u¿yæ znaczników w stylu ASP"); %&gt; &lt;%= $variable; # To jest skrót takiej formy: "&lt;%echo .." %&gt; </programlisting> </example> </para> <para> Pierwszy sposób jest dostêpny tylko kiedy zosta³y w³±czone krótkie znaczniki. Mo¿na to zrobiæ <!-- funkcjê <function>short_tags</function>,--> wpisuj±c <link linkend="ini.short-open-tag">short_open_tag</link> do pliku konfiguracyjnego PHP albo kompiluj±c PHP dodaj±c --enable-short-tags do <command>configure</command>. </para> <para> Drugi sposób jest preferowany, zapewnia on nastêpnej generacji XHTMLa ³atw± implementacjê w PHP. </para> <para> Czwarty sposób jest dostêpny tylko kiedy znaczniki ASP zosta³y w³±czone poprzez uaktywnianie opcji konfiguracyjnej <link linkend="ini.asp-tags">asp_tags</link>. <note> <para>Obs³uga dla znaczników ASP zosta³a dodana w wersji 3.0.4.</para> </note></para> <para> Znacznik zamykaj±cy blok bêdzie dodawa³ koñcow± now± liniê, je¶li taka istnieje. </para> <para> <!-- TODO: find a better place for this para --> PHP pozawala ci u¿ywaæ takich struktur: <example><title>Zaawansowane wyskakiwanie</title> <programlisting role="php"> &lt;?php if (wyrazenie-logiczne) { ?&gt; &lt;strong&gt;prawda &lt;/strong&gt; &lt;?php } else { ?&gt; &lt;strong&gt;fa³sz &lt;/strong&gt; &lt;?php } ?&gt; </programlisting></example> Powy¿szy kod dzia³a, poniewa¿ PHP traktuje tekst pomiêdzy ?&gt; i &lt;?php jak gdyby by³a to funkcja <function>echo</function>. <!-- without the parsing if vars, that is (hopefully?) obvious --> </para> </sect1> <sect1 id="language.basic-syntax.instruction-separation"> <title>Oddzielanie instrukcji</title> <simpara> Instrukcje s± oddzielane tak samo jak w C czy Perlu - nale¿y koñczyæ ka¿de wyra¿enie ¶rednikiem. </simpara> <para> Znacznik zamykaj±cy (?&gt;) tak¿e koñczy instrukcjê, wiêc poni¿sze przyk³ady s± równowa¿ne: <informalexample> <programlisting> &lt;?php echo "To jest test"; ?> &lt;?php echo "To jest test" ?> </programlisting> </informalexample></para></sect1> <sect1 id="language.basic-syntax.comments"> <title>Kometarze</title> <para> PHP obs³uguje komentarze w stylu C, C++ oraz komentarze u¿ywane w pow³okach uniksowych ("#"): <informalexample><programlisting> &lt;?php echo "To jest test"; // to jest kometarz jednoliniowy w stylu C++ /* to jest komentarz wieloliniowy a tutaj inna komentowana linia */ echo "To jest jeszcze jeden test"; echo "Ostatni test"; # to jest kometarz w stylu shell'a ?> </programlisting> </informalexample></para> <simpara> Komentarze typu jednoliniowego maj± zasiêg do koñca linii w której siê znajduj± lub do koñca bloku kodu PHP, zale¿nie co wyst±pi pierwsze. </simpara> <informalexample><programlisting> &lt;h1>To jest &lt;?php # echo "prosty";?> przyk³ad.&lt;/h1> &lt;p>Powy¿szy kod wypisze zdanie "To jest przyk³ad." </programlisting></informalexample> <simpara> Powniene¶ uwa¿aæ by nie zagnie¿d¿aæ komentarzy w stylu C++ (szczególnie komentarzy wieloliniowych), co mo¿e siê staæ kiedy komentujesz d³u¿szy blok kodu.</simpara> <informalexample><programlisting> &lt;?php /* echo "To jest test"; /* ten komentarz spowoduje problem */ */ ?> </programlisting></informalexample></sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/language/constants.xml +++ phpdoc/pl/language/constants.xml <?xml encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="language.constants"> <title>Constants</title> <simpara> A constant is a identifier (name) for a simple value. As the name suggests, that value cannot change during the execution of the script (the magic constants <constant>__FILE__</constant> and <constant>__LINE__</constant> are the only exception). A constant is case-sensitive by default. By convention constants are always uppercase. </simpara> <para> The name of a constant follows the same rules as any label in PHP. A valid constant name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: <literal>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</literal> <!-- TODO: Example of valid & invalid constant names --> </para> <note> <simpara> For our purposes here, a letter is a-z, A-Z, and the ASCII characters from 127 through 255 (0x7f-0xff). </simpara> </note> <simpara> The scope of a constant is global. </simpara> <sect1 id="language.constants.syntax"> <title>Syntax</title> <simpara> You can define a constant by using the <function>define</function>-function. Once a constant is defined, it can never be changed or undefined. </simpara> <simpara> Only scalar data (<type>boolean</type>, <type>integer</type>, <type>double</type> and <type>string</type>) can be contained in constants. </simpara> <simpara> You can get the value of a constant by simply specifying its name. Unlike with variables, you should <emphasis>not</emphasis> prepend a constant with a <literal>$</literal>. You can also use the function <function>constant</function>, to read a constant's value, if you are to obtain the constant's name dynamically. Use <function>get_defined_constants</function> to get a list of all defined constants. </simpara> <note> <simpara> Constants and (global) variables are in a different namespace. This implies that for example &true; and <varname>$TRUE</varname> are generally different. </simpara> </note> <simpara> If you use an undefined constant, PHP assumes that you mean the name of the constant itself. A <link linkend="features.error-handling">notice</link> will be issued when this happens. Use the <function>defined</function>-function if you want to know if a constant is set. </simpara> <para> This are the differences with variables: <itemizedlist> <listitem> <simpara> Constants do not have a dollar sign (<literal>$</literal>) before them; </simpara> </listitem> <listitem> <simpara> Constants may be defined and accessed anywhere without regard to variable scoping rules; </simpara> </listitem> <listitem> <simpara> Constants may not be redefined or undefined once they have been set; and </simpara> </listitem> <listitem> <simpara> Constants may only evaluate to scalar values. </simpara> </listitem> </itemizedlist> </para> <para> <example> <title>Defining Constants</title> <programlisting> &lt;?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." echo Constant; // outputs "Constant" and issues a notice. ?&gt; </programlisting> </example> </para> </sect1> <sect1 id="language.constants.predefined"> <title>Predefined constants</title> <para> The predefined constants (always available) are: <variablelist> <varlistentry> <term>__FILE__ (case-insensitive)</term> <listitem> <simpara> The name of the script file presently being parsed. If used within a file which has been included or required, then the name of the included file is given, and not the name of the parent file. </simpara> </listitem> </varlistentry> <varlistentry> <term>__LINE__ (case-insensitive)</term> <listitem> <simpara> The number of the line within the current script file which is being parsed. If used within a file which has been included or required, then the position within the included file is given. </simpara> </listitem> </varlistentry> <varlistentry> <term>PHP_VERSION</term> <listitem> <simpara> The string representation of the version of the PHP parser presently in use; e.g. '4.0.7-dev'. </simpara> </listitem> </varlistentry> <varlistentry> <term>PHP_OS</term> <listitem> <simpara> The name of the operating system on which the PHP parser is executing;. Possible values may be : "AIX", "Darwin" (MacOS), "Linux", "SunOS", "WIN32", "WINNT". Note: other values may be available too. </simpara> </listitem> </varlistentry> <varlistentry> <term>&true; (case-insensitive)</term> <listitem> <simpara> A &true; value (see the <type>boolean</type> type). </simpara> </listitem> </varlistentry> <varlistentry> <term>&false; (case-insensitive)</term> <listitem> <simpara> A &false; value (see the <type>boolean</type> type). </simpara> </listitem> </varlistentry> <varlistentry> <term>&null; (case-insensitive)</term> <listitem> <simpara> A &null; value (see the <type>null</type> type). </simpara> </listitem> </varlistentry> <varlistentry> <term>E_ERROR</term> <listitem> <simpara> Denotes an error other than a parsing error from which recovery is not possible. </simpara> </listitem> </varlistentry> <varlistentry> <term>E_WARNING</term> <listitem> <simpara> Denotes a condition where PHP knows something is wrong, but will continue anyway; these can be caught by the script itself. An example would be an invalid regexp in <function>ereg</function>. </simpara> </listitem> </varlistentry> <varlistentry> <term>E_PARSE</term> <listitem> <simpara> The parser choked on invalid syntax in the script file. Recovery is not possible. </simpara> </listitem> </varlistentry> <varlistentry> <term>E_NOTICE</term> <listitem> <simpara> Something happened which may or may not be an error. Execution continues. Examples include using an unquoted string as an array index, or accessing a variable which has not been set. </simpara> </listitem> </varlistentry> <varlistentry> <term>E_ALL</term> <listitem> <simpara> All of the E_* constants rolled into one. If used with <function>error_reporting</function>, will cause any and all problems noticed by PHP to be reported. </simpara> </listitem> </varlistentry> </variablelist> </para> <para> The <literal>E_*</literal> constants are typically used with the <function>error_reporting</function> function for setting the error reporting level. See all these constants at <link linkend="features.error-handling">Error handling</link>. <example> <title>Using __FILE__ and __LINE__</title> <programlisting> &lt;?php function report_error($file, $line, $message) { echo "An error occured in $file on line $line: $message."; } report_error(__FILE__, __LINE__, "Something went wrong!"); ?&gt; </programlisting> </example> </para> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/language/expressions.xml +++ phpdoc/pl/language/expressions.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="language.expressions"> <title>Wyra¿enia</title> <simpara> Wyra¿enia s± nawa¿niejszymi elementami sk³adowymi PHP. W PHP prawie wszystko co napiszesz jest wyra¿eniem. Najprostsz± i najdok³adniejsz± definicj± wyra¿enia jest "wszystko co ma warto¶æ". </simpara> <simpara> Najbardziej podstawow± form± wyra¿eñ s± sta³e i zmienna. Je¶li napiszesz "$a = 5" przypisujesz '5' do '$a'. '5' ma oczywi¶cie warto¶æ 5, lub innymi s³owy '5' jest wyra¿eniem o warto¶ci 5 (w tym przypadku, '5' jest sta³± liczb± ca³kowit±).</simpara> <simpara> Po tym przypisaniu mo¿esz siê spodziwaæ, ¿e warto¶ci± $a jest tak¿e 5, wiêc je¶li napiszesz "$b = $a" mo¿esz siê spodziewaæ, ¿e bêdzie to równoznaczne z napisaniem "$b = 5". Innymi s³owy, $a jest wyra¿eniem o warto¶ci 5. Je¶li wszystko dzia³a prawid³owo, to wszystko bêdzie tak jak siê spodziewa³e¶.</simpara> <para> Trochê bardziej z³o¿onymi przyk³adami wyra¿eñ s± funkcje. Przyjrzyj siê poni¿szej funkcji: <informalexample> <programlisting> function foo () { return 5; } </programlisting> </informalexample></para> <simpara> Zak³adaj±c ¿e oswoi³e¶ siê z koncepcj± funkcji (je¶li nie, przejrzyj najpierw rozdzia³ o funkcjach), mo¿esz za³o¿yæ, ¿e napisanie <literal>$c = foo()</literal> jest równoznaczne z napisaniem <literal>$c = 5</literal>, i masz raciê. Funkcje s± wyra¿eniami o warto¶ci któr± zwracaj±. Poniewa¿ foo() zwraca 5, warto¶ci± wyra¿enia 'foo()' jest 5. Zazwyczaj funkcje nie zwracaj± statycznej warto¶ci, ale co¶ obliczaj±. </simpara> <simpara> Oczywi¶cie warto¶ci w PHP nie musz± byæ liczbami ca³kowitymi, i bardzo czêsto nie s± nimi. PHP obs³uguje 3 skalarne warot¶ci danych: warto¶ci ca³kowite, warto¶ci rzeczywiste i ci±gi znaków (string) (warto¶ci skalarne to takie, których nie mo¿esz 'rozbiæ' na mniejsze kawa³ki, w przeciwieñstwie do np. tablic). PHP obs³uguje tak¿e dwa z³o¿one (nieskalarne) typy danych: tablice i obiekty. Ka¿d± z tych warto¶ci mo¿na przypisaæ do zmiennych lub mo¿e byæ zwrócona przez funkcjê. </simpara> <simpara> Jak narazie, u¿ytkownicy PHP/FI 2 nie powinni odczuæ ¿adnej zmiany. Jednak¿e PHP rozwija wyra¿enia znacznie bardziej, podobnie jak wiele innych jêzyków programowania. PHP jest jêzykiem zorientowanym na wyra¿enia, co oznacza ¿e prawie wszystko jest wyra¿eniem. Przyjrzyj siê przyk³adowi który ju¿ analizowali¶my, '$a = 5'. £atwo jest zauwa¿yæ, ¿e s± tu dwie warto¶ci. Warto¶æ sta³ej ca³kowitej '5', a tak¿e warto¶æ $a, która zostanie zamieniona na 5. Ale tak naprawdê jest tu jeszcze jedna warto¶æ, któr± jest warto¶æ operacji przypisania. Przypisanie przyjmuje warto¶æ przypisywanej warto¶ci, w tym przypadku 5. W praktyce oznacza to, ¿e '$a = 5', niezale¿nie co to robi, jest wyra¿eniem o warto¶ci 5. Wynika z tego, ¿e napisanie '$b = ($a = 5)' jest równoznaczne napisaniu '$a = 5; $b = 5;' (¶rednik oznacza koniec instrukcji). Poniewa¿ przypisania s± przetwarzane od prawej do lewej, mo¿esz tak¿e napisaæ '$b = $a = 5'.</simpara> <simpara> Kolejnym dobrym przyk³adem orientacji wyra¿eniowej jest pre- i postinkrementacja i dekrementacja. U¿ytkownicy PHP/FI 2 i wielu innych jêzyków mog± byæ ju¿ zaznajomieni z notacj± zmienna++ i zmienna--. S± to operatory inkrementacji i dekrementacji. W PHP/FI 2 instrukcja '$a++' nie ma warto¶ci (nie jest wyra¿eniem), wiêc nie mo¿esz jej przypisaæ lub u¿yæ w jakikolwiek sposób. PHP rozszerza mo¿liwo¶ci inkrementacji/dekrementacji robi±c tak¿e z nich wyra¿enia, podobnie jak w C. W PHP, tak jak w C, sa dwa typy inkrementacji: preinkrementacja i postinkrementacja. I pre- i postinkrementacja zwiêkszaj± warto¶æ zmiannej, wiêc efekt w stosunku do zmiennej jest taki sam. Ró¿nica jest w warto¶ci wyra¿enia inkrementacji. Preinkrementacja, która jest oznaczana jako '++$zmienna', zwraca zwiêkszon± warto¶æ (PHP zwiêksza zmienn± przed odczytaniem warto¶ci, dlatego nazywa siê to 'pre-inkrementacj±'). Postinkrementacja, która jest oznaczana jako '$zmienna++', zwraca orginaln± warto¶æ $zmienna przed zwiêkszeniem jej warto¶ci (PHP zwiêksza warto¶æ po odczytaniu jej warto¶ci, st±d nazwa 'post-inkrementacja').</simpara> <simpara> Popularnym typem wyra¿eñ s± wyra¿enia porównania. Te wyra¿enia zwracaj± warto¶æ 0 lub 1, oznaczaj±c odpowiednio &false; lub &true;. PHP obs³uguje &gt; (wiêkszy), &gt;= (wiêkszy lub równy), == (równy), != (nie równy), &lt; (mniejszy) i &lt;= (mniejszy lub równy). Wyra¿enia te s± powszechnie u¿ywane przy sprawdzaniu warunków, jak na przyk³ad instrukcje <literal>if</literal>.</simpara> <simpara> Ostatnim przyk³adem, którym bêdziemy siê tu zajmowaæ s± po³±czone wyra¿enia operacji i przypisania. Ju¿ wiesz, ¿e je¶li chcesz zwiêkszyæ warto¶æ zmiennej $a o 1, mo¿esz po prostu napisaæ '$a++' lub '++$a'. Ale co je¶li chcesz dodaæ do niej wiêcej ni¿ jeden, na przyk³ad 3? Móg³by¶ napisaæ wielokrotnie '$a++', ale nie jest to sposób ani efektywny ani wygodny. Czê¶ciej spotykane jest u¿ywanie instrukcji '$a = $a + 3'. '$a + 4' zwraca warto¶æ zmiennej $a plus 3, która jest przypisywana spowrotem do $a, co oznacza zwiêkszenie warto¶ci zmiennej $a o 3. W PHP, tak jak kilku innych jêzykach jak na przyk³ad C, mo¿esz napisaæ to krócej, co z czasem stanie siê tak¿e bardziej przejrzyste i ³atwiejsze do zrozumienia. Dodanie 4 do bie¿±cej warto¶ci $a mo¿e byæ zapisane jako '$a += 4'. Oznacza to dok³adnie "we¼ warto¶æ $a, dodaj do niej 3 i przypisz j± spowrotem do $a". Oprócz bycia krótsz± i bardziej przejrzyst±, instrukcja ta jest tak¿e szybsza w wykonaniu. Warto¶æ '$a += 5', tak jak warto¶æ zwyk³ego przypisania, jest przypisywan± warto¶ci±. Zauwa¿, ¿e NIE jest to 4, ale po³±czona warot¶æ $a i 4 (jest to warto¶æ która jest przypisywana do $a). Dowolne dwuoperandowe operatory mog± byæ u¿yte w trybie operacji-przypisania, na przyk³ad '$a -= 5' (odejmij 5 od warto¶ci $a), '$b *= 7' (pomnó¿ warto¶æ $b przez 7), itp. </simpara> <para> Jest jeszcze jedno wyra¿enie, które mo¿e siê wydaæ dziwne je¶li nie widzia³e¶ go w innych jêzykac, trójoperandowy operator warunkowy: <informalexample><programlisting> $pierwsze ? $drugie : $trzecie </programlisting></informalexample> Je¶li warto¶ci± pierwszego podwyra¿enia jest &true; (rózna od zera), to zwracany jest drugie podwyra¿anie, i jest to wynik wyra¿enia warunkowego. W przeciwnym wypadku, zwracana jest warto¶æ trzeciego podwyra¿enia. </para> <para> Poni¿szy przyk³ad powinien pomóc w lepszym zrozumieniu pre- i postinkrementacji i ogólnie koncepcji wyra¿eñ: <informalexample> <programlisting> function double($i) { return $i*2; } $b = $a = 5; /* przypisz warto¶æ piêc do zmiennej $a i $b */ $c = $a++; /* postinkrementuj, przypisz pocz±tkow± warto¶æ $a (5) do $c */ $e = $d = ++$b; /* preinkrementuj, przypisz zwiêkszon± warto¶æ $b (6) to $d i $e */ /* w tym momencie i $d i $e s± równe 6 */ $f = double($d++); /* przypisz podwojon± warto¶æ $d <emphasis>sprzed</emphasis> inkrementacji, 2*6 = 12 do $f */ $g = double(++$e); /* przypisz podwojon± warto¶æ $e <emphasis>po</emphasis> inkrementacji, 2*7 = 14 do $g */ $h = $g += 10; /* na pocz±tku $g jest zwiêkszane o 10 i przyjmuje warto¶æ 24; warto¶æ przypisania (24) jest pó¼niej przypisywana do $h, które przyjmuje warto¶æ 24. */ </programlisting> </informalexample> </para> <simpara> Na pocz±tku rozdzia³u powiedzieli¶my, ¿e bêdziemy opisywaæ ró¿ne typy instrukcji, i tak jak obiecywali¶my, wyra¿enia mog± byæ instrukcjami. Jednak¿e nie ka¿de wyra¿enie jest instrukcj±. W tym przypadku ma postaæ 'wyra¿enie' ';', czyli wyra¿enie a po nim ¶rednik. W '$b=$a=5;', $a=5 jest poprawnym wyra¿eniem, ale nie jest instrukcj±. Jednak¿e '$b=$a=$b;' jest poprawn± intrukcj±.</simpara> <simpara> Ostatni± rzecz± wart± uwagi jest warto¶æ prawdy wyra¿eñ. W wielu przypadkach, g³ównie przy sprawdzaniu warunkow i w pêtlach, nie interesuje ciê warto¶æ wyra¿enia, ale tylko czy oznacza &true; czy &false;. <!-- (PHP nie mam dedykowanego typu boolean) : ¬LE, ma --> Sta³e &true; i &false; (niezale¿ne od wielko¶ci znaków) s± dwiema mo¿liwymi warto¶ciami logicznymi. Kiedy to konieczne, wyra¿enie jest automatycznie konwertowane na typ boolean. Zobacz <link linkend="language.types.typecasting">rozdzia³ o rzutowaniu typów </link> je¶li interesuj± ciê szczegó³y jak to jest przeprowadzane. </simpara> <simpara> PHP dostarcza pe³nej i potê¿nej implementacji wyra¿eñ i ca³kowita ich dokumentacja przekracza ramy tego podrêcznika. Powy¿sze przyk³ady powinny daæ ci ogólne pojêcie czym s± wyra¿enia i jak mo¿esz konstruowaæ przydatne wyra¿enia. Przez resztê podrêcznika bêdziemy pisaæ <replaceable>expr</replaceable> aby oznaczyæ dowolne poprawne wyra¿enie PHP.</simpara> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/language/functions.xml +++ phpdoc/pl/language/functions.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="functions"> <title>Funkcje</title> <sect1 id="functions.user-defined"> <title>Funkcje zdefiniowane przez u¿ytkownika</title> <para> Funkcja mo¿e byæ zdefiniowana u¿ywaj±c sk³adni takiej jak poni¿sza A function may be defined using syntax such as the following: <informalexample> <programlisting role="php"> function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Przyk³adowa funkcja.\n"; return $retval; } </programlisting> </informalexample> </para> <!-- status of func(const $param) ? zend doesn't care at all whether or not you specify it. I've never seen it before... what's its use? (or was...) --> <simpara> Dowolny poprawny kod PHP mo¿e siê pojawiæ wewn±trz funkcji, tak¿e definicje innych funkcji i <link linkend="keyword.class">klas</link>. </simpara> <simpara> W PHP 3, funkcje musz± byæ zdefiniowane przed odwo³aniem do nich. W PHP 4 nie ma takiego wymagania. </simpara> <simpara> PHP nie obs³uguje przeci±¿ania funkcji. Nie jest tak¿e mo¿liwa od-definiowanie lub przedefiniowanie wcze¶niej zadeklarowanych funkcji. </simpara> <simpara> PHP 3 nie obs³uguje funkcji o zmiennej liczbie argumentów, ale obs³uguje domy¶lne argumenty (zobacz rozdzial <link linkend="functions.arguments.default">Warto¶ci domy¶lne argumentów </link> aby uzyskaæ wiêcej informacji). PHP 4 obs³uguje jedne i drugie: zobacz <link linkend="functions.variable-arg-list">Listy argumentów o zmiennej d³ugo¶ci </link> i opisy funkcji <function>func_num_args</function>, <function>func_get_arg</function>, i <function>func_get_args</function> aby uzyskaæ wiêcej informacji. </simpara> </sect1> <sect1 id="functions.arguments"> <title>Argumenty funkcji</title> <simpara> Informacje mog± byæ przekazywane do funkcji przez listê argumentów, która jest separowan± przecinkami list± zmiennych i/lub sta³ych. </simpara> <para> PHP obs³uguje przekazywanie argumentów przez warto¶æ (domy¶lnie), <link linkend="functions.arguments.by-reference">przez referencjê </link>, i <link linkend="functions.arguments.default">warto¶ci domy¶lne argumentów</link>. Listy argumentów o zmiennej d³ugo¶ci s± obs³ugiwane tylko w PHP 4 i nowszych; zobacz rozdzia³ <link linkend="functions.variable-arg-list">Listy argumentów o zmiennej d³ugo¶ci</link> i opisy funkcji <function>func_num_args</function>, <function>func_get_arg</function>, i <function>func_get_args</function> aby uzyskaæ wiêcej informacji. Podobny efekt mo¿e byæ uzyskany w PHP 3 przez przekazywanie tablicy argumentów do funkcji: <informalexample> <programlisting role="php"> function pobiera_tablice($wejscie) { echo "$wejscie[0] + $wejscie[1] = ", $wejscie[0]+$wejscie[1]; } </programlisting> </informalexample> </para> <sect2 id="functions.arguments.by-reference"> <title>Przekazywanie argumentów przez referencjê</title> <simpara> Domy¶lnie, argumenty funkcji s± przekazywane przez warto¶æ (a wiêc je¶li zmienisz warto¶æ argumentu wewn±trz funkcji, nie zmieni siê ona poza funkcj±). Je¶li chcesz pozwoliæ funkcji na modyfikacjê swoich argumentów, musisz przekazaæ je przez referencjê. </simpara> <para> Je¶li chcesz, aby argumenty by³y zawsze przekazywane przez referencjê, przed nazw± zmiennej w definicji funkcji wstaw znak ampersand (&amp;): <informalexample> <programlisting role="php"> function dodaj_cos_extra(&amp;$string) { $string .= 'i co¶ extra.'; } $str = 'To jest string, '; dodaj_cos_extra($str); echo $str; // wy¶wietla 'To jest string string, i co¶ extra.' </programlisting> </informalexample> </para> <para> Je¶li chcesz przekazaæ zmienn± przez referencjê do funkcji, która tego domy¶lnie tego nie robi, mo¿esz wstawiæ ampersand przez nazw± argumentu przy wywo³aniu funkcji: <informalexample> <programlisting role="php"> function foo ($bar) { $bar .= ' i co¶ ekstra.'; } $str = 'To jest string, '; foo ($str); echo $str; // wy¶wietla 'To jest string, ' foo (&amp;$str); echo $str; // wy¶wietla 'To jest string, i co¶ extra.' </programlisting> </informalexample> </para> </sect2> <sect2 id="functions.arguments.default"> <title>Warto¶ci domy¶lne argumentów</title> <para> Funkcja mo¿e definiowaæ, podobnie jest w C++, warto¶ci domy¶lne dla argumentów skalarnych: <informalexample> <programlisting role="php"> function robkawe ($typ = "cappucino") { return "Robiê kubek $type.\n"; } echo makecoffee (); echo makecoffee ("espresso"); </programlisting> </informalexample> </para> <para> Powy¿szy kawa³ek kody wy¶wietli: <screen> Robiê kubek cappucino. Robiê kubek espresso. </screen> </para> <simpara> Domy¶lna warto¶æ musi byæ sta³ym wyra¿eniem, nie (na przyk³ad) zmienn± lub cz³onkiem klasy. </simpara> <para> Zauwa¿, ¿e u¿ywaj±c domy¶lnych argumentów, argumenty zawieraj±ce warto¶ci domy¶lne powinny byæ po prawej stronie tych nie zawieraj±cych warto¶ci domy¶lnych; w przeciwnym przypadku funkcja mo¿e nie dzia³aæ tak jak siê tego spodziewa³e¶. Zobacz to na poni¿szym przyk³adzie: <informalexample> <programlisting role="php"> function robjogurt ($typ = "acidophilus", $smak) { return "Robiê miskê $typ $smak.\n"; } echo robjogurt ("malinowy"); // nie dzia³a tak jak siê spodziewali¶my </programlisting> </informalexample> </para> <para> Powy¿sza funkcja wy¶wietla: <screen> Warning: Missing argument 2 in call to robjogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Robiê miskê malinowy . </screen> </para> <para> Porównaj powy¿szy przyk³ad z tym: <informalexample> <programlisting role="php"> function robjogurt ($smak, $typ = "acidophilus") { return "Robiê miskê $type $flavour.\n"; } echo robjogurt ("malinowy"); // dzia³a tak jak siê spodziewali¶my </programlisting> </informalexample> </para> <para> Powy¿szy kod wy¶wietla: <screen> Robiê miskê acidophilus malinowy. </screen> </para> </sect2> <sect2 id="functions.variable-arg-list"> <title>Listy argumentów o zmiennej d³ugo¶ci</title> <simpara> PHP 4 obs³uguje listy o zmiennej d³ugo¶ci w funkcjach zdefiniowanych przez u¿ytkownika. Jest naprawdê prostê przy u¿yciu funkcji <function>func_num_args</function>, <function>func_get_arg</function> i <function>func_get_args</function>. </simpara> <simpara> Nie wymagana jest ¿adna specjalna sk³adnia. Listy argumentów mog± byæ ci±gle jawnie podane przy definicji funkcji i bêd± siê zachowywaæ normalnie. </simpara> </sect2> </sect1> <sect1 id="functions.returning-values"> <title>Zwracane warto¶ci</title> <para> Warto¶ci s± zwracana przy u¿yciu opcjonalnej instrukcji return. Mo¿e byæ zwracany dowonlny typ, w³±czaj±c w to tablice i obiekty. <informalexample> <programlisting role="php"> function kwadrat ($num) { return $num * $num; } echo kwadrat (4); // wy¶wietla '16'. </programlisting> </informalexample> </para> <para> Nie mo¿esz zwracaæ zwracaæ wielu warto¶ci z funkcji, ale podobne efekty mog± byæ uzyskane przez zwracanie listy. <informalexample> <programlisting role="php"> function maleLiczby() { return array (0, 1, 2); } list ($zero, $jeden, $dwa) = maleLiczby(); </programlisting> </informalexample> </para> <para> Aby funkcja zwraca³a referencjê, musisz u¿yæ operatora referencji &amp; i w deklaracji funkcji i przy przypisywaniu zwracanej warto¶ci do zmiennej: <informalexample> <programlisting role="php"> function &amp;zwrocReferencje() { return $jakasref; } $nowaref =&amp; zwrocReferencje(); </programlisting> </informalexample> </para> </sect1> <sect1 id="functions.old-syntax"> <title><literal>old_function</literal></title> <simpara> Instrukcja <literal>old_function</literal> pozwala na zadeklarowanie funkcji korzystaj±c ze sk³adni takiej samej jak w PHP/FI2 (tylko ¿e zamiast 'function' musisz u¿yæ 'old_function'. </simpara> <simpara> Jest to niezalecana opcja i powinna byæ u¿ywana tylko przez konwerter PHP/FI2->PHP 3. </simpara> <warning> <para> Funkcje zadekladowane jako <literal>old_function</literal> nie mog± byæ wywo³ane z kodu wewnêtrznego PHP. Miêdzy innymi oznacza to, ¿e nie mo¿esz u¿ywaæ ich z takich funkcji jak <function>usort</function>, <function>array_walk</function> i <function>register_shutdown_function </function>. Mo¿esz obej¶æ to ograniczenie przez napisanie interfejsu (w normalnej dla PHP 3 postaci) wywo³uj±cego <literal>old_function</literal>. </para> </warning> </sect1> <sect1 id="functions.variable-functions"> <title>Zmienne funkcje</title> <para> PHP obs³uguje koncepcjê zmiennych funkcji. Oznacza to, ¿e je¶li po nazwie zmiennej wystêpuj± nawiasy, PHP bêdzie szuka³o funkcji o nazwie bêd±cej warto¶ci± zmiennej i bêdzie próbowa³o wywo³aæ j±. Miêdzy innymi mo¿e byæ to u¿yte do implementacji funkcji callback, tablicy funkcji itp. </para> <para> Zmienne funkcje nie bêd± dzia³aæ z elementami sk³adowymi jêzyka, takimi jak <function>echo</function>, <function>unset</function>, <function>isset</function> i <function>empty</function>. Jest to jedna z g³ównych ró¿nic pomiêdzy funkcjami PHP i elementami sk³adowymi jêzyka. </para> <para> <example> <title>Przyk³ad zmiennej funkcji</title> <programlisting role="php"> &lt;?php function foo() { echo "W foo()&lt;br>\n"; } function bar($arg = '') { echo "W bar(); argumentem jest '$arg'.&lt;br>\n"; } $func = 'foo'; $func(); $func = 'bar'; $func('test'); ?> </programlisting> </example> </para> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/language/oop.xml +++ phpdoc/pl/language/oop.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="language.oop"> <title>Klasy i Obiekty</title> <sect1 id="keyword.class"> <title><literal>klasa</literal></title> <para> Klasa jest to zbiór zmiennych i funkcji operuj±cych na tych zmiennych. Do definicji klasy u¿ywana jest nastêpuj±ca sk³adnia: <informalexample> <programlisting role="php"> &lt;?php class Koszyk { var $zakupy; // Zakupy w naszym koszyku // Dodaj $num artyku³ów typu $artnr do wózka function dodaj_produkt ($artnr, $num) { $this->zakupy[$artnr] += $num; } // Usuñ $num artyku³ów typu $artnr z wózka function usun_produkt ($artnr, $num) { if ($this->zakupy[$artnr] > $num) { $this->zakupy[$artnr] -= $num; return true; } else { return false; } } } ?&gt; </programlisting> </informalexample> </para> <para> Definiuje to klasê o nazwie Koszyk, która zawiera tablicê asocjacyjn± artyku³ów znajduj±cych siê w wózku i dwie funkcje do dodawania i usuwania produktów z koszyka. </para> <caution> <simpara> Poni¿sze uwagi dotycz± PHP 4. </simpara> <simpara> Nazwa <literal>stdClass</literal> jest u¿ywana wewnêtrznie przez Zend i jest zarezerwowana. W PHP nie mo¿esz zdefiniowaæ klasy o nazwie <literal>stdClass</literal>. </simpara> <simpara> Nazwy funkcji <literal>__sleep</literal> i <literal>__wakeup</literal> maj± magiczne znaczenie dla klas w PHP. Klasy nie mog± zawieraæ funkcji o tych nazwach, chyba ¿e zgadzasz siê na przypisanie do nich magicznej funkcjonalno¶ci. Poni¿ej mo¿esz znale¼æ wiêcej informacji. </simpara> <simpara> PHP rezerwuje wszystkie nazwy funkcji zaczynaj±ce siê od __ na funkcje magiczne. Zalecane jest nieu¿ywanie funkcji z nazwami zaczynaj±cymi siê od __ chyba ¿e chcesz jakiej¶ magicznej funkcjonalno¶ci. </simpara> </caution> <note> <simpara> W PHP 4 dozwolone s± tylko sta³e inicjalizatory zmiennych <literal>var</literal>. Aby zainicjalizowaæ zmienne z nie-sta³ymi warto¶ciami, potrzebujesz funkcjê inicjalizacyjn±, która jest wywo³ywana automatycznie zaraz po utworzeniu obiektu z danej klasy. Taka funkcja zwana jest konstruktorem (zobacz poni¿ej). </simpara> <informalexample> <programlisting role="php"> /* Nic z tego nie bêdzie dzia³aæ w PHP 4. */ class Koszyk { var $dzisiejsza_data = date("Y-m-d"); var $nazwa = $imie; var $wlasciciel = 'Fred ' . 'Jones'; var $artykuly = array("VCR", "TV"); } /* Teraz wszystko zadziala. */ class Koszyk { var $dzisiejsza_data; var $nazwa; var $wlasciciel; var $artykuly; function Cart() { $this->dzisiejsza_data = date("Y-m-d"); $this->nazwa = $GLOBALS['imie']; /* itp. . . */ } } </programlisting> </informalexample> </note> <!-- ??? --> <para> Classes are types, that is, they are blueprints for actual variables. You have to create a variable of the desired type with the <literal>new</literal> operator. </para> <!-- ??? --> <informalexample> <programlisting role="php"> $koszyk = new Koszyk; $koszyk->dodaj_produkt("10", 1); $inny_koszyk = new Koszyk; $inny_koszyk->dodaj_produkt("0815", 3); </programlisting> </informalexample> <para> Kod ten tworzy obiekty $koszyk i $inny_koszyk, oba klasy Koszyk. Funkcja dodaj_produkt() obiektu $koszyk zostaje wywo³ana w celu dodania 1 artyku³u typu "10" do koszyka $koszyk. 4 przedmioty typu "0815" dodawane s± do koszyka $inny_koszyk. </para> <para> Both, $cart and $another_cart, have functions add_item(), remove_item() and a variable items. These are distinct functions and variables. You can think of the objects as something similar to directories in a filesystem. In a filesystem you can have two different files README.TXT, as long as they are in different directories. Just like with directories where you'll have to type the full pathname in order to reach each file from the toplevel directory, you have to specify the complete name of the function you want to call: In PHP terms, the toplevel directory would be the global namespace, and the pathname separator would be -&gt;. Thus, the names $cart-&gt;items and $another_cart-&gt;items name two different variables. Note that the variable is named $cart-&gt;items, not $cart-&gt;$items, that is, a variable name in PHP has only a single dollar sign. </para> <informalexample> <programlisting role="php"> // correct, single $ $cart->items = array("10" => 1); // invalid, because $cart->$items becomes $cart->"" $cart->$items = array("10" => 1); // correct, but may or may not be what was intended: // $cart->$myvar becomes $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); </programlisting> </informalexample> <para> Within a class definition, you do not know under which name the object will be accessible in your program: At the time the Cart class was written, it was unknown that the object will be named $cart or $another_cart later. Thus, you cannot write $cart-&gt;items within the Cart class itself. Instead, in order to be able to access it's own functions and variables from within a class, one can use the pseudo-variable $this which can be read as 'my own' or 'current object'. Thus, '$this->items[$artnr] += $num' can be read as 'add $num to the $artnr counter of my own items array' or 'add $num to the $artnr counter of the items array within the current object'. </para> </sect1> <sect1 id="keyword.extends"> <title><literal>extends</literal></title> <para> Often you need classes with similar variables and functions to another existing class. In fact, it is good practice to define a generic class which can be used in all your projects and adapt this class for the needs of each of your specific projects. To facilitate this, classes can be extensions of other classes. The extended or derived class has all variables and functions of the base class (this is called 'inheritance' despite the fact that nobody died) and what you add in the extended definition. It is not possible to substract from a class, that is, to undefine any existing functions or variables. An extended class is always dependent on a single base class, that is, multiple inheritance is not supported. Classes are extended using the keyword 'extends'. </para> <informalexample> <programlisting role="php"> class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; } } </programlisting> </informalexample> <para> This defines a class Named_Cart that has all variables and functions of Cart plus an additional variable $owner and an additional function set_owner(). You create a named cart the usual way and can now set and get the carts owner. You can still use normal cart functions on named carts: </para> <informalexample> <programlisting role="php"> $ncart = new Named_Cart; // Create a named cart $ncart->set_owner("kris"); // Name that cart print $ncart->owner; // print the cart owners name $ncart->add_item("10", 1); // (inherited functionality from cart) </programlisting> </informalexample> </sect1> <sect1 id="language.oop.constructor"> <title><literal>Constructors</literal></title> <caution> <simpara> In PHP 3 and PHP 4 constructors behave differently. The PHP 4 semantics are strongly preferred. </simpara> </caution> <para> Constructors are functions in a class that are automatically called when you create a new instance of a class with <literal>new</literal>. In PHP 3, a function becomes a constructor when it has the same name as the class. In PHP 4, a function becomes a constructor, when it has the same name as the class it is defined in - the difference is subtle, but crucial (see below). </para> <informalexample> <programlisting role="php"> // Works in PHP 3 and PHP 4. class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item ("10", 1); } } </programlisting> </informalexample> <para> This defines a class Auto_Cart that is a Cart plus a constructor which initializes the cart with one item of article number "10" each time a new Auto_Cart is being made with "new". Constructors can take arguments and these arguments can be optional, which makes them much more useful. To be able to still use the class without parameters, all parameters to constructors should be made optional by providing default values. </para> <informalexample> <programlisting role="php"> // Works in PHP 3 and PHP 4. class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Shop the same old boring stuff. $default_cart = new Constructor_Cart; // Shop for real... $different_cart = new Constructor_Cart("20", 17); </programlisting> </informalexample> <caution> <simpara> In PHP 3, derived classes and constructors have a number of limitations. The following examples should be read carefully to understand these limitations. </simpara> </caution> <informalexample> <programlisting role="php"> class A { function A() { echo "I am the constructor of A.&lt;br>\n"; } } class B extends A { function C() { echo "I am a regular function.&lt;br>\n"; } } // no constructor is being called in PHP 3. $b = new B; </programlisting> </informalexample> <para> In PHP 3, no constructor is being called in the above example. The rule in PHP 3 is: 'A constructor is a function of the same name as the class.'. The name of the class is B, and there is no function called B() in class B. Nothing happens. </para> <para> This is fixed in PHP 4 by introducing another rule: If a class has no constructor, the constructor of the base class is being called, if it exists. The above example would have printed 'I am the constructor of A.&lt;br>' in PHP 4. </para> <informalexample> <programlisting role="php"> class A { function A() { echo "I am the constructor of A.&lt;br>\n"; } function B() { echo "I am a regular function named B in class A.&lt;br>\n"; echo "I am not a constructor in A.&lt;br>\n"; } } class B extends A { function C() { echo "I am a regular function.&lt;br>\n"; } } // This will call B() as a constructor. $b = new B; </programlisting> </informalexample> <para> In PHP 3, the function B() in class A will suddenly become a constructor in class B, although it was never intended to be. The rule in PHP 3 is: 'A constructor is a function of the same name as the class.'. PHP 3 does not care if the function is being defined in class B, or if it has been inherited. </para> <para> This is fixed in PHP 4 by modifying the rule to: 'A constructor is a function of the same name as the class it is being defined in.'. Thus in PHP 4, the class B would have no constructor function of its own and the constructor of the base class would have been called, printing 'I am the constructor of A.&lt;br>'. </para> <caution> <simpara> Neither PHP 3 nor PHP 4 call constructors of the base class automatically from a constructor of a derived class. It is your responsibility to propagate the call to constructors upstream where appropriate. </simpara> </caution> <note> <simpara> There are no destructors in PHP 3 or PHP 4. You may use <function>register_shutdown_function</function> instead to simulate most effects of destructors. </simpara> </note> <para> Destructors are functions that are called automatically when an object is destroyed, either with <function>unset</function> or by simply going out of scope. There are no destructors in PHP. </para> </sect1> <sect1 id="keyword.paamayim-nekudotayim"><!-- :-) --> <title><literal>::</literal></title> <caution> <simpara> The following is valid for PHP 4 only. </simpara> </caution> <para> Sometimes it is useful to refer to functions and variables in base classes or to refer to functions in classes that have not yet any instances. The :: operator is being used for this. </para> <informalexample> <programlisting role="php"> class A { function example() { echo "I am the original function A::example().&lt;br>\n"; } } class B extends A { function example() { echo "I am the redefined function B::example().&lt;br>\n"; A::example(); } } // there is no object of class A. // this will print // I am the original function A::example().&lt;br> A::example(); // create an object of class B. $b = new B; // this will print // I am the redefined function B::example().&lt;br> // I am the original function A::example().&lt;br> $b->example(); </programlisting> </informalexample> <para> The above example calls the function example() in class A, but there is no object of class A, so that we cannot write $a->example() or similar. Instead we call example() as a 'class function', that is, as a function of the class itself, not any object of that class. </para> <para> There are class functions, but there are no class variables. In fact, there is no object at all at the time of the call. Thus, a class function may not use any object variables (but it can use local and global variables), and it may no use $this at all. </para> <para> In the above example, class B redefines the function example(). The original definition in class A is shadowed and no longer available, unless you are refering specifically to the implementation of example() in class A using the ::-operator. Write A::example() to do this (in fact, you should be writing parent::example(), as shown in the next section). </para> <para> In this context, there is a current object and it may have object variables. Thus, when used from WITHIN an object function, you may use $this and object variables. </para> </sect1> <sect1 id="keyword.parent"> <title><literal>parent</literal></title> <para> You may find yourself writing code that refers to variables and functions in base classes. This is particularly true if your derived class is a refinement or specialisation of code in your base class. </para> <para> Instead of using the literal name of the base class in your code, you should be using the special name <literal>parent</literal>, which refers to the name of your base class as given in the <literal>extends</literal> declation of your class. By doing this, you avoid using the name of your base class in more than one place. Should your inheritance tree change during implementation, the change is easily made by simply changing the <literal>extends</literal> declaration of your class. </para> <informalexample> <programlisting role="php"> class A { function example() { echo "I am A::example() and provide basic functionality.&lt;br>\n"; } } class B extends A { function example() { echo "I am B::example() and provide additional functionality.&lt;br>\n"; parent::example(); } } $b = new B; // This will call B::example(), which will in turn call A::example(). $b->example(); </programlisting> </informalexample> </sect1> <sect1 id="language.oop.serialization"> <title>Serializing objects - objects in sessions</title> <note> <simpara> In PHP 3, objects will lose their class association throughout the process of serialization and unserialization. The resulting variable is of type object, but has no class and no methods, thus it is pretty useless (it has become just like an array with a funny syntax). </simpara> </note> <caution> <simpara> The following information is valid for PHP 4 only. </simpara> </caution> <para> <function>serialize</function> returns a string containing a byte-stream representation of any value that can be stored in PHP. <function>unserialize</function> can use this string to recreate the original variable values. Using serialize to save an object will save all variables in an object. The functions in an object will not be saved, only the name of the class. </para> <para> In order to be able to <function>unserialize</function> an object, the class of that object needs to be defined. That is, if you have an object $a of class A on page1.php and serialize this, you'll get a string that refers to class A and contains all values of variabled contained in $a. If you want to be able to unserialize this on page2.php, recreating $a of class A, the definition of class A must be present in page2.php. This can be done for example by storing the class defintion of class A in an include file and including this file in both page1.php and page2.php. </para> <informalexample> <programlisting role="php"> classa.inc: class A { var $one = 1; function show_one() { echo $this->one; } } page1.php: include("classa.inc"); $a = new A; $s = serialize($a); // store $s somewhere where page2.php can find it. $fp = fopen("store", "w"); fputs($fp, $s); fclose($fp); page2.php: // this is needed for the unserialize to work properly. include("classa.inc"); $s = implode("", @file("store")); $a = unserialize($s); // now use the function show_one() of the $a object. $a->show_one(); </programlisting> </informalexample> <para> If you are using sessions and use <function>session_register</function> to register objects, these objects are serialized automatically at the end of each PHP page, and are unserialized automatically on each of the following pages. This basically means that these objects can show up on any of your pages once they become part of your session. </para> <para> It is strongly recommended that you include the class definitions of all such registered objects on all of your pages, even if you do not actually use these classes on all of your pages. If you don't and an object is being unserialized without its class definition being present, it will lose its class association and become an object of class <literal>stdClass</literal> without any functions available at all, that is, it will become quite useless. </para> <para> So if in the example above $a became part of a session by running <literal>session_register("a")</literal>, you should include the file <literal>classa.inc</literal> on all of your pages, not only page1.php and page2.php. </para> </sect1> <sect1 id="language.oop.magic-functions"> <title>The magic functions <literal>__sleep</literal> and <literal>__wakeup</literal></title> <para> <function>serialize</function> checks if your class has a function with the magic name <literal>__sleep</literal>. If so, that function is being run prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. </para> <para> The intended use of <literal>__sleep</literal> is to close any database connections that object may have, committing pending data or perform similar cleanup tasks. Also, the function is useful if you have very large objects which need not be saved completely. </para> <para> Conversely, <function>unserialize</function> checks for the presence of a function with the magic name <literal>__wakeup</literal>. If present, this function can reconstruct any ressources that object may have. </para> <para> The intended use of <literal>__wakeup</literal> is to reestablish any database connections that may have been lost during serialization and perform other reinitialization tasks. </para> </sect1> <sect1 id="language.oop.newref"> <title>References inside the constructor</title> <para> Creating references within the constructor can lead to confusing results. This tutorial-like section helps you to avoid problems. <informalexample> <programlisting role="php"> class Foo { function Foo($name) { // create a reference inside the global array $globalref global $globalref; $globalref[] = &amp;$this; // set name to passed value $this->setName($name); // and put it out $this->echoName(); } function echoName() { echo "&lt;br&gt;",$this->name; } function setName($name) { $this->name = $name; } } </programlisting> </informalexample> </para> <para> Let us check out if there is a difference between <varname>$bar1</varname> which has been created using the copy <literal>=</literal> operator and <varname>$bar2</varname> which has been created using the reference <literal>=&amp;</literal> operator... <informalexample> <programlisting role="php"> $bar1 = new Foo('set in constructor'); $bar1->echoName(); $globalref[0]->echoName(); /* output: set in constructor set in constructor set in constructor */ $bar2 =&amp; new Foo('set in constructor'); $bar2->echoName(); $globalref[1]->echoName(); /* output: set in constructor set in constructor set in constructor */ </programlisting> </informalexample> </para> <para> Apparently there is no difference, but in fact there is a very significant one: <varname>$bar1</varname> and <varname>$globalref[0]</varname> are _NOT_ referenced, they are NOT the same variable. This is because "new" does not return a reference by default, instead it returns a copy. <note> <simpara> There is no performance loss (since PHP 4 and up use reference counting) returning copies instead of references. On the contrary it is most often better to simply work with copies instead of references, because creating references takes some time where creating copies virtually takes no time (unless none of them is a large array or object and one of them gets changed and the other(s) one(s) subsequently, then it would be wise to use references to change them all concurrently). </simpara> </note> To prove what is written above let us watch the code below. <informalexample> <programlisting role="php"> // now we will change the name. what do you expect? // you could expect that both $bar1 and $globalref[0] change their names... $bar1->setName('set from outside'); // as mentioned before this is not the case. $bar1->echoName(); $globalref[0]->echoName(); /* output: set from outside set in constructor */ // let us see what is different with $bar2 and $globalref[1] $bar2->setName('set from outside'); // luckily they are not only equal, they are the same variable // thus $bar2->name and $globalref[1]->name are the same too $bar2->echoName(); $globalref[1]->echoName(); /* output: set from outside set from outside */ </programlisting> </informalexample> </para> <para> Another final example, try to understand it. <informalexample> <programlisting role="php"> class A { function A($i) { $this->value = $i; // try to figure out why we do not need a reference here $this->b = new B($this); } function createRef() { $this->c = new B($this); } function echoValue() { echo "&lt;br&gt;","class ",get_class($this),': ',$this->value; } } class B { function B(&amp;$a) { $this->a = &amp;$a; } function echoValue() { echo "&lt;br&gt;","class ",get_class($this),': ',$this->a->value; } } // try to undestand why using a simple copy here would yield // in an undesired result in the *-marked line $a =&amp; new A(10); $a->createRef(); $a->echoValue(); $a->b->echoValue(); $a->c->echoValue(); $a->value = 11; $a->echoValue(); $a->b->echoValue(); // * $a->c->echoValue(); /* output: class A: 10 class B: 10 class B: 10 class A: 11 class B: 11 class B: 11 */ </programlisting> </informalexample> </para> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 --> Index: phpdoc/pl/pear/about.xml +++ phpdoc/pl/pear/about.xml <?xml encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="pear.about"> <title>O PEAR</title> <simpara> PEAR jest dedykowany Malin Bakken, urodzonej 21 listopada 1999 (pierwszy kawa³ek kodu PEAR zosta³ napisany zaledwie dwie godziny przed jej narodzeniem). </simpara> <sect1 id="pear-whatis"> <title>Czym jest PEAR?</title> <simpara> PEAR jest repozytorium kodu dla rozszerzeñ oraz bibliotek PHP zainspirowanym TeXowym CTAN i Perlowym CPAN. </simpara> <para> Celem PEAR jest: <itemizedlist> <listitem> <simpara> dostarczenie konsekwentnych ¶rodków dla autorów kodu bibliotek umo¿liwiaj±cych im dzielenie siê kodem z innymi wykonawcami oprogramowania </simpara> </listitem> <listitem> <simpara> oddanie ¶rodowisku programistów PHP infrastruktury do dzielenia siê kodem </simpara> </listitem> <listitem> <simpara> zdefiniowanie standardów, które pomog± wykonawcom oprogramowania pisaæ kod przeno¶ny i nadaj±cy siê do powtórnego u¿ycia </simpara> </listitem> <listitem> <simpara> dostarczenie narzêdzi do konserwacji i dystrybucji kodu </simpara> </listitem> </itemizedlist> </para> </sect1> </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 sgml-parent-document:nil sgml-default-dtd-file:"../../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 -->
« previous php.doc (#969338186) next »