cvs: phpdoc /pl/language variables.xml
| From: | Leszek Krupinski | Date: | Fri, 14 Dec 2001 05:10:34 +0000 |
| Subject: | cvs: phpdoc /pl/language variables.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969339719@lists.php.net to get a copy of this message | ||
leszek Fri Dec 14 00:10:34 2001 EDT
Added files:
/phpdoc/pl/language variables.xml
Log:
variables.xml - version 1.26 done!
It's nice that such an important chapter is already translated.
Index: phpdoc/pl/language/variables.xml +++ phpdoc/pl/language/variables.xml <?xml version="1.0" encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="language.variables"> <title>Zmienne</title> <sect1 id="language.variables.basics"> <title>Podstawy</title> <simpara> Ka¿d± zmienn± w PHP zapisuje siê poprzedzaj±c jej nazwê znakiem dolara "$". Wielko¶æ liter w nazwie zmiennej jest rozró¿niana. </simpara> <para> Nazw zmiennych dotycz± te same regu³y, co innych rodzajów nazw w PHP. Poprawna nazwa zmiennej zaczyna siê od litery lub znaku podkre¶lenia "_", po których mo¿e wyst±piæ dowolna ilo¶æ liter, cyfr lub znaków podkre¶lenia. Jako wyra¿enie regularne, mo¿na to zapisaæ tak: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' </para> <note> <simpara> W naszym rozumieniu, liter± s± znaki a-z, A-Z i symbole ASCII od 127 do 255 (0x7f-0xff). </simpara> </note> <para> <informalexample> <programlisting role="php"> <![CDATA[ $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // wy¶wietla "Bob, Joe" $4site = 'not yet'; // niepoprawna nazwa - zaczyna siê od cyfry $_4site = 'not yet'; // poprawna nazwa - zaczyna siê znakiem podkre¶lenia $ja¼ñ = 'not yet'; // poprawna nazwa - "ñ" i "¼" nale¿± do ASCII > 127 ]]> </programlisting> </informalexample> </para> <para> W PHP 3, przypisanie zmiennych jest mo¿liwe tylko przez warto¶æ. Innymi s³owy, je¶li przypiszesz do zmiennej jakie¶ wyra¿enie, warto¶æ tego wyra¿enia zostanie skopiowana do zmiennej. Oznacza to, ¿e po przypisaniu warto¶ci jednej zmiennej do drugiej, pó¼niejsza zmiana warto¶ci jednej z nich nie spowoduje zmiany warto¶ci drugiej. Wiêcej informacji na ten temat w rozdziale <link linkend="language.expressions">Wyra¿enia</link>. </para> <para> PHP 4 oferuje jeszcze jeden sposób przypisywania warto¶ci do zmiennych: <emphasis>przypisanie przez referencjê</emphasis>. Oznacza to, ¿e nowa zmienna tylko odnosi siê (innymi s³owy, "staje siê aliasem" lub "wskazuje na") do pierwotnej zmiennej. Zmiany wykonane na nowej zmiennej oddzia³uj± tak¿e na pierwotn± zmienn± i vice versa. Ma to te¿ takie znaczenie, ¿e nie nastêpuje ¿adna operacja skopiowania, czyli przypisanie nastêpuje szybciej. Jednak¿e wyra¼ne przyspieszenie dzia³ania mo¿e byæ widoczne tylko w pêtlach zwartych (ang. tight loops), lub przy przypisywaniu du¿ych tablic lub obiektów. </para> <para> Aby przypisaæ przez referencjê, postaw znak ampersand (&) przed nazw± zmiennej przypisywanej (zmiennej od której pobierasz warto¶æ). Na przyk³ad poni¿szy kod wy¶wietla "To jest PHP" dwa razy: <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = "PHP"; // Przypisz warto¶æ "PHP" do $foo. $bar = &$foo; // Przypisz referencyjnie $foo do $bar. $bar = "To jest $bar"; // Zmieñ $bar... echo $foo; // $foo te¿ siê zmieni³o. echo $bar; ?> ]]> </programlisting> </informalexample> </para> <para> Nale¿y pamiêtaæ, ¿e tylko wyra¿enia posiadaj±ce nazwê mog± byæ przypisane przez referencjê. <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = 25; $bar = &$foo; // Przypisanie poprawne. $bar = &(24 * 7); // Przypisanie niepoprawne - do nienazwanego wyra¿enia. function test() { return 25; } $bar = &test(); // Niepoprawne. ?> ]]> </programlisting> </informalexample> </para> </sect1> <sect1 id="language.variables.predefined"> <title>Zmienne Predefiniowane</title> <simpara> PHP udostêpnia du¿± ilo¶æ predefiniowanych zmiennych dla ka¿dego pracuj±cego skryptu. Jednak¿e wiele spo¶ród tych zmiennych nie mo¿e byæ w pe³ni obja¶nionych, gdy¿ s± zale¿ne od rodzaju serwera, jego wersji i ustawieñ i innych czynników. Niektóre z tych zmiennych nie bêd± dostêpne dla skryptów PHP uruchomionych z linii poleceñ. </simpara> <simpara> Niezale¿nie od wymienionych czynników, poni¿ej przedstawiamy listê predefiniowanych zmiennych, dostêpnych w typowej instalacji PHP 3, dzia³aj±cej jako modu³ typowej instalacji <ulink url="&url.apache;">Apache</ulink> 1.3.6. </simpara> <simpara> Dla zapoznania siê ze wszystkimi predefiniowanymi zmiennymi (i mnóstwem innych, u¿ytecznych informacji) proszê u¿yæ <function>phpinfo</function>. </simpara> <note> <simpara> Poni¿sza lista nie jest i nie bêdzie wyczerpuj±ca. Jest to wy³±cznie wskazówka, jakie rodzaje predefiniowanych zmiennych mo¿esz u¿yæ w swoim skrypcie. </simpara> </note> <sect2 id="language.variables.predefined.apache"> <title>Zmienne Apache'a</title> <simpara> Zmienne te dostarczane s± przez serwer www <ulink url="&url.apache;">Apache</ulink>. Je¶li u¿ywasz innego serwera, nie ma ¿adnej gwarancji, ¿e zmienne te bêd± dostêpne. Inny serwer mo¿e pomin±æ jak±¶ zmienn± lub dostarczaæ zmienne inne ni¿ te. Jakkolwiek spora czê¶æ tych zmiennych jest zarejestrowana w <ulink url="&url.cgispec;">specyfikacji CGI 1.1</ulink>, wiêc dostêp do nich powinien byæ mo¿liwy. </simpara> <simpara> Pamiêtaj, ¿e tylko kilka, je¶li w ogóle, spo¶ród tych zmiennych jest dostêpnych (albo bêdzie mieæ jakiekolwiek znaczenie) kiedy skrypt PHP jest uruchomiony z linii poleceñ. </simpara> <para> <variablelist> <varlistentry> <term>$GATEWAY_INTERFACE</term> <listitem> <simpara> Okre¶la wersjê specyfikacji CGI obs³ugiwan± przez serwer, np. "CGI/1.1". </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_NAME</term> <listitem> <simpara> Nazwa hosta serwera, na którym skrypt jest wykonywany. Je¶li skrypt pracuje na ho¶cie wirtualnym (ang. virtual host), zmienna bêdzie zawieraæ nazwê hosta wirtualnego. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_SOFTWARE</term> <listitem> <simpara> Napis identyfikuj±cy serwer, wysy³any z nag³ówkami przy odpowiedzi na zapytanie. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_PROTOCOL</term> <listitem> <simpara> Nazwa i wersja protoko³u informacyjnego, przez który zosta³o wys³ane zapytanie, np. "HTTP/1.1". </simpara> </listitem> </varlistentry> <varlistentry> <term>$REQUEST_METHOD</term> <listitem> <simpara> Która metoda zosta³a u¿yta przy zapytaniu o dokument, np. "GET", "HEAD", "POST". </simpara> </listitem> </varlistentry> <varlistentry> <term>$QUERY_STRING</term> <listitem> <simpara> £añcuch zapytania (np. ?foo=bar), o ile istnieje, jaki zosta³ przes³any z zapytaniem o stronê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$DOCUMENT_ROOT</term> <listitem> <simpara> Folder g³ówny na serwerze, taki jak okre¶lony w pliku konfiguracyjnym serwera. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept:</literal> z aktualnego zapytania, o ile taki wystêpuje. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_CHARSET</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Charset:</literal> z aktualnego zapytania, o ile taki wystêpuje, np. "iso-8859-1,*,utf-8". 'iso-8859-1,*,utf-8'. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_ENCODING</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Encoding:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "gzip". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_LANGUAGE</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Language:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "en". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_CONNECTION</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Connection:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "Keep-Alive". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_HOST</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Host:</literal> z aktualnego zapytanie, o ile taki wystêpuje. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_REFERER</term> <listitem> <simpara> Adres strony (o ile wystêpuje) z której przegl±darka przesz³a do tej strony. Nag³ówek jest tworzony przez przegl±darkê u¿ytkownika; nie wszystkie przegl±darki udostêpniaj± tak± informacjê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_USER_AGENT</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>User_Agent:</literal> z aktualnego zapytania, o ile taki wystêpuje. Jest to napis identyfikuj±cy oprogramowanie klienckie u¿ywane do obejrzenia danej strony, np. <computeroutput>Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)</computeroutput>. Mo¿na u¿yæ tej informacji w po³±czeniu z <function>get_browser</function>, aby dopasowaæ stronê do mo¿liwo¶ci przegl±darki u¿ytkownika. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REMOTE_ADDR</term> <listitem> <simpara> Numer IP zdalnego u¿ytkownika przegl±daj±cego stronê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REMOTE_PORT</term> <listitem> <simpara> Port u¿ywany na zdalnej maszynie, przez który nastêpuje komunikacja z serwerem. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SCRIPT_FILENAME</term> <listitem> <simpara> Bezwzglêdna ¶cie¿ka do aktualnie wykonywanego skrytpu. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_ADMIN</term> <listitem> <simpara> Warto¶æ podana w dyrektywie SERVER_ADMIN (dla Apache'a) w pliku kofiguracyjnym serwera. Je¶li skrypt jest uruchomiony na ho¶cie wirtualnym, wtedy bêdzie to warto¶æ okre¶lona dla tego hosta wirtualnego. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_PORT</term> <listitem> <simpara> Port na serwerze, u¿ywany przez serwer www do komunikacji. Domy¶lnie jest to "80"; przy u¿yciu SSL, na przyk³ad, bêdzie to numer portu na którym odbywaj± siê zabezpieczone po³±czenia HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_SIGNATURE</term> <listitem> <simpara> Napis zawieraj±cy nazwê i wersjê serwera, oraz nazwê wirtualnego hosta, który jest dodawany do stron generowanych przez serwer, o ile w³±czony. </simpara> </listitem> </varlistentry> <varlistentry> <term>$PATH_TRANSLATED</term> <listitem> <simpara> Bezwzglêdna ¶cie¿ka do pliku, oparta na systemie plików (a nie wychodz±ca z folderu g³ównego serwera), okre¶lona po wykonaniu przez serwer ewentualnego mapowania ¶cie¿ki wirtualnej do rzeczywistej. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SCRIPT_NAME</term> <listitem> <simpara> Zawiera ¶cie¿kê do aktualnego skryptu. Przydatne przy stronach, które maj± wskazywaæ na siebie same. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REQUEST_URI</term> <listitem> <simpara> URI, który zosta³ podany, aby uzyskaæ dostêp do aktualnej strony, np. "/index.html". </simpara> </listitem> </varlistentry> </variablelist> </para> </sect2> <sect2 id="language.variables.predefined.environment"> <title>Zmienne ¶rodowiskowe</title> <simpara> Te zmienne s± importowane do przestrzeni nazw globalnych PHP ze ¶rodowiska w jakim pracuje parser PHP. Wiele z nich jest udostêpnianych przez pow³okê systemu, w którym pracuje PHP, a poniewa¿ ró¿ne systemy u¿ywaj± ró¿nych pow³ok, ¶cis³a lista nie jest mo¿liwa. Zapoznaj siê z dokumentacj± twojej pow³oki (shella), aby dowiedzieæ siê, jakie zmienne ¶rodowiskowe ona udostêpnia. </simpara> <simpara> Niektóre zmienne ¶rodowiskowe zawieraj± zmienne CGI, w zale¿no¶ci od tego czy PHP pracuje jako modu³ serwera, czy skrypt CGI. </simpara> </sect2> <sect2 id="language.variables.predefined.php"> <title>Zmienne PHP</title> <simpara> Zmienne te tworzone s± przez PHP. Zmienne <varname>$HTTP_*_VARS</varname> s± dostêpne tylko, je¶li dyrektywa konfiguracyjna <link linkend="ini.track-vars">track_vars</link> jest w³±czona. Kiedy dyrektywa jest w³±czona, zmienne s± zawsze tworzone, nawet je¶li s± pustymi tablicami. Zabezpiecza to przed z³o¶liwymi u¿ytkownikami, którzy mogliby podszywaæ swoje warto¶ci pod te zmienne. </simpara> <note> <para> Od PHP 4.0.3 dyrektywa <link linkend="ini.track-vars">track_vars</link> jest zawsze w³±czona, niezale¿nie od wpisu w pliku konfiguracyjnym. </para> </note> <para> Je¶li dyrektywa <link linkend="ini.register-globals">register_globals</link> jest w³±czona, wtedy te zmienne bêd± równie¿ dostêpne jako zmienne globalne, tzn. niezale¿nie od tablic <varname>$HTTP_*_VARS</varname>. Dyrektywa ta powinna byæ u¿ywana ostro¿nie i wy³±czona, je¶li to mo¿liwe. O ile zmienne <varname>$HTTP_*_VARS</varname> s± bezpieczne, o tyle ich odpowiedniki w postaci zmiennych globalnych mog± zostaæ nadpisane przez argumenty przekazane od klienta, mo¿liwie, ¿e ze zwyk³ej z³o¶liwo¶ci u¿ytkownika. Je¶li nie mo¿esz wy³±czyæ <link linkend="ini.register-globals">register_globals</link>, musisz podj±æ wszystkie niezbêdne kroki w celu zabezpieczenia danych przed sfa³szowaniem. </para> <para> <variablelist> <varlistentry> <term>$argv</term> <listitem> <simpara> Tablica argumentów przekazanych do skryptu. Kiedy skrypt jest uruchamiany z linii poleceñ, daje ona dostêp w stylu jêzyka C do prze³±czników, z jakimi zosta³ wywo³any skrypt. Kiedy skrypt zostanie wywo³any metod± GET, tablica bêdzie zawieraæ ³añcuch znaków zapytania (query string). </simpara> </listitem> </varlistentry> <varlistentry> <term>$argc</term> <listitem> <simpara> Liczba argumentów przekazanych do skryptu (je¶li uruchamiany z linii poleceñ). </simpara> </listitem> </varlistentry> <varlistentry> <term>$PHP_SELF</term> <listitem> <simpara> Nazwa pliku aktualnie wykonywanego skryptu, ze ¶cie¿k± wzglêdn± od g³ównego katalogu (document root). Je¶li PHP jest wywo³ane z linii poleceñ, zmienna jest niedostêpna. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_COOKIE_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu przez ciasteczka HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_GET_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu metod± GET protoko³u HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_POST_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu metod± POST protoko³u HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_POST_FILES</term> <listitem> <simpara> Tablica asocjacyjna zmiennych zawieraj±cych informacjê o plikach wys³anych do serwera (uploadowanych) metod± POST. Zobacz <link linkend="features.file-upload.post-method">wysy³anie plików metod± POST </link> aby dowiedzieæ siê wiêcej na temat zawarto¶ci <varname>$HTTP_POST_FILES</varname>. </simpara> <para> <varname>$HTTP_POST_FILES</varname> jest dostêpna tylko w PHP 4.0.0 i pó¼niejszych. </para> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ENV_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu ze ¶rodowiska operacyjnego serwera. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_SERVER_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu z serwera HTTP. Zmienne te s± analogiczne do zmiennych Apache'a, opisanych powy¿ej. </simpara> </listitem> </varlistentry> </variablelist> </para> </sect2> </sect1> <sect1 id="language.variables.scope"> <title>Zasiêg zmiennych</title> <simpara> Zasiêg zmiennej jest zale¿ny od miejsca, w jakim zosta³a zdefiniowana. Najczê¶ciej zmienne PHP widoczne s± tylko w pojedynczym zasiêgu. Taki zasiêg rozci±ga siê na pliki do³±czane funkcjami <function>include</function> i <function>require</function>. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; include "b.inc"; ]]> </programlisting> </informalexample> <simpara> Tutaj zmienna <varname>$a</varname> bêdzie dostêpna tak¿e w do³±czonym pliku <filename>b.inc</filename>. Jednak¿e w funkcjach zdefiniowanych przez u¿ytkownika zmienne maj± zasiêg lokalny. Ka¿da zmienna u¿yta wewn±trz funkcji jest domy¶lnie ograniczona do zasiêgu lokalnego, np. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; /* zasiêg globalny */ function Test() { echo $a; /* odwo³anie do zmiennej o zasiêgu lokalnym */ } Test(); ]]> </programlisting> </informalexample> <simpara> Ten skrypt nie wy¶wietli niczego, poniewa¿ instrukcja echo odwo³uje siê do zmiennej lokalnej <varname>$a</varname>, której jak dot±d nie zosta³a przypisana ¿adna warto¶æ. Mo¿na tu zauwa¿yæ ró¿nicê w stosunku do jêzyka C, gdzie zmienne globalne s± zawsze dostêpne wewn±trz definicji funkcji, o ile nie zosta³y nadpisane przez lokaln± definicjê. zmiennej. Mo¿e to spowodowaæ taki problem, ¿e kto¶ mo¿e nieodwracalnie zmieniæ warto¶æ zmiennej globalnej. W PHP zmienne globalne musz± byæ jawnie okre¶lnone jako globalne wewn±trz funkcji, w której maj± byæ u¿yte, do czego u¿ywamy s³owa kluczowego global. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ]]> </programlisting> </informalexample> <simpara> Powy¿szy skrypt wy¶wietli wynik "3". Przez zadeklarowanie wewn±trz funkcji globalno¶ci zmiennych <varname>$a</varname> i <varname>$b</varname>, wszystkie odwo³ania do tych zmiennych bêd± odnosi³y siê do ich globalnych wersji. Nie ma ¿adnych ograniczeñ w ilo¶ci zmiennych globalnych, na których chcemy operowaæ wewn±trz funkcji. </simpara> <simpara> Drugim sposobem uzyskania dostêpu do zmiennych globalnych wewn±trz funkcji jest u¿ycie specjalnej, zdefiniowanej przez PHP tablicy <varname>$GLOBALS</varname>. Powy¿szy przyk³ad mo¿na zatem przepisaæ tak: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; $b = 2; function Sum() { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum(); echo $b; ]]> </programlisting> </informalexample> <simpara> <varname>$GLOBALS</varname> jest tablic± asocjacyjn±, gdzie nazwa zmiennej jest kluczem, a zawarto¶æ zmiennej warto¶ci± komórki tablicy. </simpara> <simpara> Jeszcze jedn± wa¿n± rzecz±, zwi±zan± z zasiêgiem zmiennych jest zmienna statyczna (ang. <emphasis>static</emphasis> variable). Zmienna statyczna mo¿e mieæ wy³±cznie zasiêg lokalny, ale nie traci swojej warto¶ci, kiedy program opu¶ci ten zasiêg lokalny, w którym dana zmienna statyczna siê znajduje. Proszê rozwa¿yæ poni¿szy przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test () { $a = 0; echo $a; $a++; } ]]> </programlisting> </informalexample> <simpara> Ta funkcja jest bezu¿yteczna, gdy¿ przy ka¿dym jej wywo³aniu zmienna <varname>$a</varname> otrzymuje warto¶æ <literal>0</literal>, w zwi±zku z czym funkcja stale wy¶wietla "0". Wystêpuj±ca potem inkrementacja <varname>$a</varname>++ nie ma ¿adnego znaczenia, gdy¿ funkcja siê koñczy i zmienna <varname>$a</varname> znika. Aby powy¿sza funkcja mia³a jaki¶ sens, nale¿y zapobiec gubieniu warto¶ci <varname>$a</varname>, do czego u¿ywamy s³owa kluczowego static: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test() { static $a = 0; echo $a; $a++; } ]]> </programlisting> </informalexample> <simpara> Teraz, za ka¿dym wywo³aniem funkcji test, zostanie wy¶wietlona warto¶æ zmiennej <varname>$a</varname>, po czym ta zmienna zostanie inkrementowana. </simpara> <simpara> Zmienne statyczne pozwalaj± te¿ na wykorzystanie funkcji rekurencyjnych, czyli takich, które wywo³uj± same siebie. Funkcje rekurencyjne nale¿y pisaæ ostro¿nie, gdy¿ ³atwo jest wywo³aæ nieskoñczon± rekurencjê. Musisz byæ pewny, ¿e masz odpowiednie mechanizmy do zatrzymania rekurencji w pewnym momencie. Poni¿sza funkcja rekurencyjnie liczy do 10, u¿ywaj±c zmiennej statycznej <varname>$licznik</varname>, aby wiedzieæ, kiedy ma siê zatrzymaæ: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test() { static $licznik = 0; $licznik++; echo $licznik; if ($licznik < 10) { Test (); } $licznik--; } ]]> </programlisting> </informalexample> </sect1> <sect1 id="language.variables.variable"> <title>Zmienne zmienne</title> <simpara> W niektórych przypadkach jest wygodne, by móc u¿yæ zmiennej o zmiennej nazwie. To znaczy zmiennej, której nazwa mo¿e byæ zmieniana dynamicznie. Zwyk³a zmienna jest ustawiana wyra¿eniem jak poni¿ej: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = "witaj"; ]]> </programlisting> </informalexample> <simpara> Zmienna zmienna pobiera warto¶æ jednej zmiennej i traktuje j± jako nazwê zmiennej. W powy¿szym przyk³adzie, <emphasis>witaj</emphasis> mo¿e staæ siê nazw± zmiennej, przy u¿yciu dwóch znaków dolara, tzn. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $$a = "¶wiecie"; ]]> </programlisting> </informalexample> <simpara> W tym momencie dwie zmienne zosta³y zdefiniowane i umieszczone w drzewie symbolicznym PHP: <varname>$a</varname> zawieraj±ca "witaj" i <varname>$witaj</varname> zawieraj±ca "¶wiecie". Zatem poni¿szy zapis: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ echo "$a ${$a}"; ]]> </programlisting> </informalexample> <simpara> znaczy to samo, co: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ echo "$a $witaj"; ]]> </programlisting> </informalexample> <simpara> tzn. obydwa wy¶wietl±: <computeroutput>witaj ¶wiecie</computeroutput>. </simpara> <simpara> Aby u¿ywaæ zmiennych zmiennych jako tablic, trzeba rozwi±zaæ pewn± niejasno¶æ. Mianowicie, je¶li napiszesz <varname>$$a[1]</varname>, parser musi wiedzieæ, czy chesz u¿yæ <varname>$a[1]</varname> jako nazwy zmiennej, czy <varname>$$a</varname> jako nazwy tablicy, której rekord [1] ciê interesuje. W tym przypadku nale¿y zastosowaæ odrêbn± sk³adniê: <varname>${$a[1]}</varname> dla pierwszego przypadku a <varname>${$a}[1]</varname> dla drugiego. </simpara> </sect1> <sect1 id="language.variables.external"> <title>Zmienne spoza PHP</title> <sect2 id="language.variables.external.form"> <title>Formularze HTML (GET i POST)</title> <simpara> Kiedy do skryptu PHP zostanie wys³any formularz, ka¿da zmienna z tego formularza zostanie automatycznie dostarczona do tego skryptu przez PHP. Je¶li dyrektywa <link linkend="ini.track-vars">track_vars</link> jest w³±czona, to zmienne te bêd± umieszczone w tablicach asocjacyjnych <varname>$HTTP_POST_VARS</varname> (zmienne wys³ane metod± POST), <varname>$HTTP_GET_VARS</varname> (zmienne wys³ane metod± GET), i/lub <varname>$HTTP_POST_FILES</varname> (plik wys³ane metod± POST), w zale¿no¶ci od rodzaju zmiennych w zapytaniu. </simpara> <para> Wiêcej informacji na ten temat w rozdziale <link linkend="language.variables.predefined">Zmienne predefiniowane</link>. </para> <para> <example> <title>Prosty formularz ze zmienn±</title> <programlisting role="php"> <![CDATA[ <form action="foo.php" method="post"> Name: <input type="text" name="username"><br> <input type="submit"> </form> ]]> </programlisting> </example> </para> <para> Kiedy powy¿szy formularz zostanie wys³any, warto¶æ wprowadzona do pola tekstowego bêdziê dostêpna w <varname>$HTTP_POST_VARS['username']</varname>. Je¶li dyrektywa <link linkend="ini.register-globals">register_globals</link> jest w³±czona, zmienna z formularza bêdzie tak¿e dostêpna jako zmienna globalna <varname>$username</varname>. </para> <note> <para> Dyrektywa konfiguracyjna <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> oddzia³uje na zmienne z Get, Post i Cookie. Je¶li w³±czona, tekst (It's "PHP!") automagicznie zmieni siê w (It\'s \"PHP!\"). Jest to potrzebne przy wpisywaniu danych do baz danych. Zobacz te¿ <function>addslashes</function>, <function>stripslashes</function> i <link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link>. </para> </note> <simpara> PHP obs³uguje tak¿e tablice w kontek¶cie zmiennych z formularzy (zajrzyj do <link linkend="faq.html">FAQ</link>). Mo¿na na przyk³ad pogrupowaæ razem powi±zane zmienne lub u¿yæ tej mo¿liwo¶ci do pobrania warto¶ci z pola wyboru (select): </simpara> <para> <example> <title>Bardziej z³o¿one zmienne w formularzach</title> <programlisting role="php"> <![CDATA[ <form action="array.php" method="post"> Nazwisko: <input type="text" name="personal[nazwisko]"><br> Email: <input type="text" name="personal[email]"><br> Piwo: <br> <select multiple name="piwo[]"> <option value="zywiec">¯ywiec <option value="lech">Lech <option value="cooler">Cooler </select> <input type="submit"> </form> ]]> </programlisting> </example> </para> <para> W PHP 3 tablice w formularzach mog³y byæ tylko jednowymiarowe. W PHP 4 nie ma takich ograniczeñ. </para> <sect3 id="language.variables.external.form.submit"> <title>Nazwy zmiennych dla SUBMIT w postaci obrazka</title> <simpara> Przy tworzeniu formularza, mo¿na u¿yæ obrazka, zamiast standardowego przycisku Wy¶lij, za pomoc± takiego znacznika:</simpara> <informalexample> <programlisting role="php"> <![CDATA[ <input type="image" src="image.gif" name="sub"> ]]> </programlisting> </informalexample> <simpara> Kiedy u¿ytkownik kliknie gdzie¶ na obrazku, formularz, którego to dotyczy, zostanie wys³any do serwera z dwiema dodatkowymi zmiennymi, sub_x i sub_y. Zawieraj± one koordynaty miejsca klikniêcia na obrazek. Mo¿na przy tym zauwa¿yæ, ¿e w nazwach zmiennych jest kropka a nie podkre¶lnik, ale PHP konwertuje kropkê na podkre¶lnik automatycznie. (Zobacz <link linkend="language.variables.external.dot-in-names">Kropki w nazwach nadchodz±cych zmiennych</link>). </simpara> </sect3> </sect2> <sect2 id="language.variables.external.cookies"> <title>Ciasteczka HTTP</title> <simpara> PHP bez problemu obs³uguje ciasteczka HTTP, takie jak zdefiniowano w <ulink url="&spec.cookies;">Specyfikacji Netscape'a</ulink>. Ciasteczka s± mechanizmem przechowywania informacji w przegl±darce klienta w celu ¶ledzenia lub identyfikowania sta³ych bywalców strony. Ciasteczka ustawia siê za pomoc± funkcji <function>setcookie</function>. Ciasteczka s± czê¶ci± nag³ówka HTTP, wiêc funkcja SetCookie musi byæ wywo³ana zanim jakakolwiek inna informacja zostanie wys³ana do przegl±darki. Takie samo ograniczenie dotyczy funkcji <function>header</function>. Wszystkie ciasteczka odebrane od klienta zostan± automatycznie zamienione w zmienne PHP, podobnie jak dane odebrane metod± GET lub POST. </simpara> <simpara> Je¶li chcesz przypisaæ wiele warto¶ci do jednego ciasteczka, dodaj <emphasis>[]</emphasis> do jego nazwy. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ setcookie("MyCookie[]", "Testing", time()+3600); ]]> </programlisting> </informalexample> <simpara> Pamiêtaj, ¿e wys³ane ciasteczko zast±pi wcze¶niejsze ciasteczko o tej nazwie, o ile ¶cie¿ka lub domena nie s± ró¿ne. Na przyk³ad dla koszyka do zakupów mo¿esz potrzebowaæ licznika a jego warto¶æ stale przekazywaæ dalej, tzn. </simpara> <example> <title>Przyk³ad zastosowania SetCookie</title> <programlisting role="php"> <![CDATA[ $ilosc++; setcookie("ilosc", $ilosc, time()+3600); setcookie("koszyk[$ilosc]", $towar, time()+3600); P&]]> </programlisting> </example> </sect2> <sect2 id="language.variables.external.environment"> <title>Zmienne ¶rodowiskowe</title> <para> PHP samoczynnie udostêpnia zmienne ¶rodowiskowe jak zwyk³e zmienne PHP. <informalexample> <programlisting role="php"> <![CDATA[ echo $HOME; /* Wy¶wietli zmienn± ¶rodowiskow± HOME, o ile ta ma jak±¶ warto¶æ */ ]]> </programlisting> </informalexample> </para> <para> Poniewa¿ informacje nadchdz±ce przez GET, POST i ciasteczka równie¿ s± udostêpniane jako zmienne, czasem jest lepiej odczytaæ zmienne ¶rodowiskowe bezpo¶rednio ze ¶rodowiska, aby mieæ pewno¶æ, ¿e otrzymuje siê prawdziw± warto¶æ zmiennej. W tym celu u¿ywa siê funkcji <function>getenv</function>. Mo¿na tak¿e samodzielnie ustawiæ warto¶æ zmiennej ¶rodowiskowej za pomoc± funkcji <function>putenv</function>. </para> </sect2> <sect2 id="language.variables.external.dot-in-names"> <title>Kropki w nazwach nadchodz±cych zmiennych</title> <para> PHP normalnie nie zmienia nazw zmiennych przekazywanych do skryptu. Jednak¿e nale¿y pamiêtaæ, ¿e kropka "." nie jest poprawnym znakiem w nazwie zmiennej. Dlaczego, proszê spojrzeæ na to: <programlisting role="php"> <![CDATA[ $varname.ext; /* niepoprawna nazwa zmiennej */ ]]> </programlisting> To co widzi parser, to zmienna o nazwie <varname>$varname</varname>, po której pojawia siê operator konkatenacji, a nastêpnie pusty ³añcuch (czyli taki, który nie jest ¿adnym s³owem kluczowym, ani zarezerwowanym) "ext". Oczywi¶cie, nie daje to ¿adnego sensownego wyniku. </para> <para> Warto zatem wiedzieæ, ¿e PHP automatycznie zast±pi podkre¶lnikiem "_" ka¿d± kropkê w nazwie nadchodz±cej zmiennej. </para> </sect2> <sect2 id="language.variables.determining-type-of"> <title>Okre¶lanie typów zmiennych</title> <para> Poniewa¿ PHP samodzielnie okre¶la typy zmiennych i konwertuje je (zasadniczo) jak potrzeba, nie zawsze jest jasne, jakiego typu jest dana zmienna w danym momencie. PHP zawiera kilka funkcji do okre¶lania typów zmiennych. S± to: <function>gettype</function>, <function>is_long</function>, <function>is_double</function>, <function>is_string</function>, <function>is_array</function>i <function>is_object</function>. </para> </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 indent-tabs-mode:nil 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/variables.xml +++ phpdoc/pl/language/variables.xml <?xml version="1.0" encoding="iso-8859-2"?> <!-- $Revision: 1.1 $ --> <chapter id="language.variables"> <title>Zmienne</title> <sect1 id="language.variables.basics"> <title>Podstawy</title> <simpara> Ka¿d± zmienn± w PHP zapisuje siê poprzedzaj±c jej nazwê znakiem dolara "$". Wielko¶æ liter w nazwie zmiennej jest rozró¿niana. </simpara> <para> Nazw zmiennych dotycz± te same regu³y, co innych rodzajów nazw w PHP. Poprawna nazwa zmiennej zaczyna siê od litery lub znaku podkre¶lenia "_", po których mo¿e wyst±piæ dowolna ilo¶æ liter, cyfr lub znaków podkre¶lenia. Jako wyra¿enie regularne, mo¿na to zapisaæ tak: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' </para> <note> <simpara> W naszym rozumieniu, liter± s± znaki a-z, A-Z i symbole ASCII od 127 do 255 (0x7f-0xff). </simpara> </note> <para> <informalexample> <programlisting role="php"> <![CDATA[ $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // wy¶wietla "Bob, Joe" $4site = 'not yet'; // niepoprawna nazwa - zaczyna siê od cyfry $_4site = 'not yet'; // poprawna nazwa - zaczyna siê znakiem podkre¶lenia $ja¼ñ = 'not yet'; // poprawna nazwa - "ñ" i "¼" nale¿± do ASCII > 127 ]]> </programlisting> </informalexample> </para> <para> W PHP 3, przypisanie zmiennych jest mo¿liwe tylko przez warto¶æ. Innymi s³owy, je¶li przypiszesz do zmiennej jakie¶ wyra¿enie, warto¶æ tego wyra¿enia zostanie skopiowana do zmiennej. Oznacza to, ¿e po przypisaniu warto¶ci jednej zmiennej do drugiej, pó¼niejsza zmiana warto¶ci jednej z nich nie spowoduje zmiany warto¶ci drugiej. Wiêcej informacji na ten temat w rozdziale <link linkend="language.expressions">Wyra¿enia</link>. </para> <para> PHP 4 oferuje jeszcze jeden sposób przypisywania warto¶ci do zmiennych: <emphasis>przypisanie przez referencjê</emphasis>. Oznacza to, ¿e nowa zmienna tylko odnosi siê (innymi s³owy, "staje siê aliasem" lub "wskazuje na") do pierwotnej zmiennej. Zmiany wykonane na nowej zmiennej oddzia³uj± tak¿e na pierwotn± zmienn± i vice versa. Ma to te¿ takie znaczenie, ¿e nie nastêpuje ¿adna operacja skopiowania, czyli przypisanie nastêpuje szybciej. Jednak¿e wyra¼ne przyspieszenie dzia³ania mo¿e byæ widoczne tylko w pêtlach zwartych (ang. tight loops), lub przy przypisywaniu du¿ych tablic lub obiektów. </para> <para> Aby przypisaæ przez referencjê, postaw znak ampersand (&) przed nazw± zmiennej przypisywanej (zmiennej od której pobierasz warto¶æ). Na przyk³ad poni¿szy kod wy¶wietla "To jest PHP" dwa razy: <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = "PHP"; // Przypisz warto¶æ "PHP" do $foo. $bar = &$foo; // Przypisz referencyjnie $foo do $bar. $bar = "To jest $bar"; // Zmieñ $bar... echo $foo; // $foo te¿ siê zmieni³o. echo $bar; ?> ]]> </programlisting> </informalexample> </para> <para> Nale¿y pamiêtaæ, ¿e tylko wyra¿enia posiadaj±ce nazwê mog± byæ przypisane przez referencjê. <informalexample> <programlisting role="php"> <![CDATA[ <?php $foo = 25; $bar = &$foo; // Przypisanie poprawne. $bar = &(24 * 7); // Przypisanie niepoprawne - do nienazwanego wyra¿enia. function test() { return 25; } $bar = &test(); // Niepoprawne. ?> ]]> </programlisting> </informalexample> </para> </sect1> <sect1 id="language.variables.predefined"> <title>Zmienne Predefiniowane</title> <simpara> PHP udostêpnia du¿± ilo¶æ predefiniowanych zmiennych dla ka¿dego pracuj±cego skryptu. Jednak¿e wiele spo¶ród tych zmiennych nie mo¿e byæ w pe³ni obja¶nionych, gdy¿ s± zale¿ne od rodzaju serwera, jego wersji i ustawieñ i innych czynników. Niektóre z tych zmiennych nie bêd± dostêpne dla skryptów PHP uruchomionych z linii poleceñ. </simpara> <simpara> Niezale¿nie od wymienionych czynników, poni¿ej przedstawiamy listê predefiniowanych zmiennych, dostêpnych w typowej instalacji PHP 3, dzia³aj±cej jako modu³ typowej instalacji <ulink url="&url.apache;">Apache</ulink> 1.3.6. </simpara> <simpara> Dla zapoznania siê ze wszystkimi predefiniowanymi zmiennymi (i mnóstwem innych, u¿ytecznych informacji) proszê u¿yæ <function>phpinfo</function>. </simpara> <note> <simpara> Poni¿sza lista nie jest i nie bêdzie wyczerpuj±ca. Jest to wy³±cznie wskazówka, jakie rodzaje predefiniowanych zmiennych mo¿esz u¿yæ w swoim skrypcie. </simpara> </note> <sect2 id="language.variables.predefined.apache"> <title>Zmienne Apache'a</title> <simpara> Zmienne te dostarczane s± przez serwer www <ulink url="&url.apache;">Apache</ulink>. Je¶li u¿ywasz innego serwera, nie ma ¿adnej gwarancji, ¿e zmienne te bêd± dostêpne. Inny serwer mo¿e pomin±æ jak±¶ zmienn± lub dostarczaæ zmienne inne ni¿ te. Jakkolwiek spora czê¶æ tych zmiennych jest zarejestrowana w <ulink url="&url.cgispec;">specyfikacji CGI 1.1</ulink>, wiêc dostêp do nich powinien byæ mo¿liwy. </simpara> <simpara> Pamiêtaj, ¿e tylko kilka, je¶li w ogóle, spo¶ród tych zmiennych jest dostêpnych (albo bêdzie mieæ jakiekolwiek znaczenie) kiedy skrypt PHP jest uruchomiony z linii poleceñ. </simpara> <para> <variablelist> <varlistentry> <term>$GATEWAY_INTERFACE</term> <listitem> <simpara> Okre¶la wersjê specyfikacji CGI obs³ugiwan± przez serwer, np. "CGI/1.1". </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_NAME</term> <listitem> <simpara> Nazwa hosta serwera, na którym skrypt jest wykonywany. Je¶li skrypt pracuje na ho¶cie wirtualnym (ang. virtual host), zmienna bêdzie zawieraæ nazwê hosta wirtualnego. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_SOFTWARE</term> <listitem> <simpara> Napis identyfikuj±cy serwer, wysy³any z nag³ówkami przy odpowiedzi na zapytanie. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_PROTOCOL</term> <listitem> <simpara> Nazwa i wersja protoko³u informacyjnego, przez który zosta³o wys³ane zapytanie, np. "HTTP/1.1". </simpara> </listitem> </varlistentry> <varlistentry> <term>$REQUEST_METHOD</term> <listitem> <simpara> Która metoda zosta³a u¿yta przy zapytaniu o dokument, np. "GET", "HEAD", "POST". </simpara> </listitem> </varlistentry> <varlistentry> <term>$QUERY_STRING</term> <listitem> <simpara> £añcuch zapytania (np. ?foo=bar), o ile istnieje, jaki zosta³ przes³any z zapytaniem o stronê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$DOCUMENT_ROOT</term> <listitem> <simpara> Folder g³ówny na serwerze, taki jak okre¶lony w pliku konfiguracyjnym serwera. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept:</literal> z aktualnego zapytania, o ile taki wystêpuje. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_CHARSET</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Charset:</literal> z aktualnego zapytania, o ile taki wystêpuje, np. "iso-8859-1,*,utf-8". 'iso-8859-1,*,utf-8'. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_ENCODING</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Encoding:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "gzip". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ACCEPT_LANGUAGE</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Accept-Language:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "en". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_CONNECTION</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Connection:</literal> z aktualnego zapytanie, o ile taki wystêpuje, np. "Keep-Alive". </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_HOST</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>Host:</literal> z aktualnego zapytanie, o ile taki wystêpuje. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_REFERER</term> <listitem> <simpara> Adres strony (o ile wystêpuje) z której przegl±darka przesz³a do tej strony. Nag³ówek jest tworzony przez przegl±darkê u¿ytkownika; nie wszystkie przegl±darki udostêpniaj± tak± informacjê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_USER_AGENT</term> <listitem> <simpara> Zawarto¶æ nag³ówka <literal>User_Agent:</literal> z aktualnego zapytania, o ile taki wystêpuje. Jest to napis identyfikuj±cy oprogramowanie klienckie u¿ywane do obejrzenia danej strony, np. <computeroutput>Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)</computeroutput>. Mo¿na u¿yæ tej informacji w po³±czeniu z <function>get_browser</function>, aby dopasowaæ stronê do mo¿liwo¶ci przegl±darki u¿ytkownika. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REMOTE_ADDR</term> <listitem> <simpara> Numer IP zdalnego u¿ytkownika przegl±daj±cego stronê. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REMOTE_PORT</term> <listitem> <simpara> Port u¿ywany na zdalnej maszynie, przez który nastêpuje komunikacja z serwerem. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SCRIPT_FILENAME</term> <listitem> <simpara> Bezwzglêdna ¶cie¿ka do aktualnie wykonywanego skrytpu. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_ADMIN</term> <listitem> <simpara> Warto¶æ podana w dyrektywie SERVER_ADMIN (dla Apache'a) w pliku kofiguracyjnym serwera. Je¶li skrypt jest uruchomiony na ho¶cie wirtualnym, wtedy bêdzie to warto¶æ okre¶lona dla tego hosta wirtualnego. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_PORT</term> <listitem> <simpara> Port na serwerze, u¿ywany przez serwer www do komunikacji. Domy¶lnie jest to "80"; przy u¿yciu SSL, na przyk³ad, bêdzie to numer portu na którym odbywaj± siê zabezpieczone po³±czenia HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SERVER_SIGNATURE</term> <listitem> <simpara> Napis zawieraj±cy nazwê i wersjê serwera, oraz nazwê wirtualnego hosta, który jest dodawany do stron generowanych przez serwer, o ile w³±czony. </simpara> </listitem> </varlistentry> <varlistentry> <term>$PATH_TRANSLATED</term> <listitem> <simpara> Bezwzglêdna ¶cie¿ka do pliku, oparta na systemie plików (a nie wychodz±ca z folderu g³ównego serwera), okre¶lona po wykonaniu przez serwer ewentualnego mapowania ¶cie¿ki wirtualnej do rzeczywistej. </simpara> </listitem> </varlistentry> <varlistentry> <term>$SCRIPT_NAME</term> <listitem> <simpara> Zawiera ¶cie¿kê do aktualnego skryptu. Przydatne przy stronach, które maj± wskazywaæ na siebie same. </simpara> </listitem> </varlistentry> <varlistentry> <term>$REQUEST_URI</term> <listitem> <simpara> URI, który zosta³ podany, aby uzyskaæ dostêp do aktualnej strony, np. "/index.html". </simpara> </listitem> </varlistentry> </variablelist> </para> </sect2> <sect2 id="language.variables.predefined.environment"> <title>Zmienne ¶rodowiskowe</title> <simpara> Te zmienne s± importowane do przestrzeni nazw globalnych PHP ze ¶rodowiska w jakim pracuje parser PHP. Wiele z nich jest udostêpnianych przez pow³okê systemu, w którym pracuje PHP, a poniewa¿ ró¿ne systemy u¿ywaj± ró¿nych pow³ok, ¶cis³a lista nie jest mo¿liwa. Zapoznaj siê z dokumentacj± twojej pow³oki (shella), aby dowiedzieæ siê, jakie zmienne ¶rodowiskowe ona udostêpnia. </simpara> <simpara> Niektóre zmienne ¶rodowiskowe zawieraj± zmienne CGI, w zale¿no¶ci od tego czy PHP pracuje jako modu³ serwera, czy skrypt CGI. </simpara> </sect2> <sect2 id="language.variables.predefined.php"> <title>Zmienne PHP</title> <simpara> Zmienne te tworzone s± przez PHP. Zmienne <varname>$HTTP_*_VARS</varname> s± dostêpne tylko, je¶li dyrektywa konfiguracyjna <link linkend="ini.track-vars">track_vars</link> jest w³±czona. Kiedy dyrektywa jest w³±czona, zmienne s± zawsze tworzone, nawet je¶li s± pustymi tablicami. Zabezpiecza to przed z³o¶liwymi u¿ytkownikami, którzy mogliby podszywaæ swoje warto¶ci pod te zmienne. </simpara> <note> <para> Od PHP 4.0.3 dyrektywa <link linkend="ini.track-vars">track_vars</link> jest zawsze w³±czona, niezale¿nie od wpisu w pliku konfiguracyjnym. </para> </note> <para> Je¶li dyrektywa <link linkend="ini.register-globals">register_globals</link> jest w³±czona, wtedy te zmienne bêd± równie¿ dostêpne jako zmienne globalne, tzn. niezale¿nie od tablic <varname>$HTTP_*_VARS</varname>. Dyrektywa ta powinna byæ u¿ywana ostro¿nie i wy³±czona, je¶li to mo¿liwe. O ile zmienne <varname>$HTTP_*_VARS</varname> s± bezpieczne, o tyle ich odpowiedniki w postaci zmiennych globalnych mog± zostaæ nadpisane przez argumenty przekazane od klienta, mo¿liwie, ¿e ze zwyk³ej z³o¶liwo¶ci u¿ytkownika. Je¶li nie mo¿esz wy³±czyæ <link linkend="ini.register-globals">register_globals</link>, musisz podj±æ wszystkie niezbêdne kroki w celu zabezpieczenia danych przed sfa³szowaniem. </para> <para> <variablelist> <varlistentry> <term>$argv</term> <listitem> <simpara> Tablica argumentów przekazanych do skryptu. Kiedy skrypt jest uruchamiany z linii poleceñ, daje ona dostêp w stylu jêzyka C do prze³±czników, z jakimi zosta³ wywo³any skrypt. Kiedy skrypt zostanie wywo³any metod± GET, tablica bêdzie zawieraæ ³añcuch znaków zapytania (query string). </simpara> </listitem> </varlistentry> <varlistentry> <term>$argc</term> <listitem> <simpara> Liczba argumentów przekazanych do skryptu (je¶li uruchamiany z linii poleceñ). </simpara> </listitem> </varlistentry> <varlistentry> <term>$PHP_SELF</term> <listitem> <simpara> Nazwa pliku aktualnie wykonywanego skryptu, ze ¶cie¿k± wzglêdn± od g³ównego katalogu (document root). Je¶li PHP jest wywo³ane z linii poleceñ, zmienna jest niedostêpna. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_COOKIE_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu przez ciasteczka HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_GET_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu metod± GET protoko³u HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_POST_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu metod± POST protoko³u HTTP. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_POST_FILES</term> <listitem> <simpara> Tablica asocjacyjna zmiennych zawieraj±cych informacjê o plikach wys³anych do serwera (uploadowanych) metod± POST. Zobacz <link linkend="features.file-upload.post-method">wysy³anie plików metod± POST </link> aby dowiedzieæ siê wiêcej na temat zawarto¶ci <varname>$HTTP_POST_FILES</varname>. </simpara> <para> <varname>$HTTP_POST_FILES</varname> jest dostêpna tylko w PHP 4.0.0 i pó¼niejszych. </para> </listitem> </varlistentry> <varlistentry> <term>$HTTP_ENV_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu ze ¶rodowiska operacyjnego serwera. </simpara> </listitem> </varlistentry> <varlistentry> <term>$HTTP_SERVER_VARS</term> <listitem> <simpara> Tablica asocjacyjna zmiennych przekazanych do skryptu z serwera HTTP. Zmienne te s± analogiczne do zmiennych Apache'a, opisanych powy¿ej. </simpara> </listitem> </varlistentry> </variablelist> </para> </sect2> </sect1> <sect1 id="language.variables.scope"> <title>Zasiêg zmiennych</title> <simpara> Zasiêg zmiennej jest zale¿ny od miejsca, w jakim zosta³a zdefiniowana. Najczê¶ciej zmienne PHP widoczne s± tylko w pojedynczym zasiêgu. Taki zasiêg rozci±ga siê na pliki do³±czane funkcjami <function>include</function> i <function>require</function>. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; include "b.inc"; ]]> </programlisting> </informalexample> <simpara> Tutaj zmienna <varname>$a</varname> bêdzie dostêpna tak¿e w do³±czonym pliku <filename>b.inc</filename>. Jednak¿e w funkcjach zdefiniowanych przez u¿ytkownika zmienne maj± zasiêg lokalny. Ka¿da zmienna u¿yta wewn±trz funkcji jest domy¶lnie ograniczona do zasiêgu lokalnego, np. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; /* zasiêg globalny */ function Test() { echo $a; /* odwo³anie do zmiennej o zasiêgu lokalnym */ } Test(); ]]> </programlisting> </informalexample> <simpara> Ten skrypt nie wy¶wietli niczego, poniewa¿ instrukcja echo odwo³uje siê do zmiennej lokalnej <varname>$a</varname>, której jak dot±d nie zosta³a przypisana ¿adna warto¶æ. Mo¿na tu zauwa¿yæ ró¿nicê w stosunku do jêzyka C, gdzie zmienne globalne s± zawsze dostêpne wewn±trz definicji funkcji, o ile nie zosta³y nadpisane przez lokaln± definicjê. zmiennej. Mo¿e to spowodowaæ taki problem, ¿e kto¶ mo¿e nieodwracalnie zmieniæ warto¶æ zmiennej globalnej. W PHP zmienne globalne musz± byæ jawnie okre¶lnone jako globalne wewn±trz funkcji, w której maj± byæ u¿yte, do czego u¿ywamy s³owa kluczowego global. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ]]> </programlisting> </informalexample> <simpara> Powy¿szy skrypt wy¶wietli wynik "3". Przez zadeklarowanie wewn±trz funkcji globalno¶ci zmiennych <varname>$a</varname> i <varname>$b</varname>, wszystkie odwo³ania do tych zmiennych bêd± odnosi³y siê do ich globalnych wersji. Nie ma ¿adnych ograniczeñ w ilo¶ci zmiennych globalnych, na których chcemy operowaæ wewn±trz funkcji. </simpara> <simpara> Drugim sposobem uzyskania dostêpu do zmiennych globalnych wewn±trz funkcji jest u¿ycie specjalnej, zdefiniowanej przez PHP tablicy <varname>$GLOBALS</varname>. Powy¿szy przyk³ad mo¿na zatem przepisaæ tak: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = 1; $b = 2; function Sum() { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum(); echo $b; ]]> </programlisting> </informalexample> <simpara> <varname>$GLOBALS</varname> jest tablic± asocjacyjn±, gdzie nazwa zmiennej jest kluczem, a zawarto¶æ zmiennej warto¶ci± komórki tablicy. </simpara> <simpara> Jeszcze jedn± wa¿n± rzecz±, zwi±zan± z zasiêgiem zmiennych jest zmienna statyczna (ang. <emphasis>static</emphasis> variable). Zmienna statyczna mo¿e mieæ wy³±cznie zasiêg lokalny, ale nie traci swojej warto¶ci, kiedy program opu¶ci ten zasiêg lokalny, w którym dana zmienna statyczna siê znajduje. Proszê rozwa¿yæ poni¿szy przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test () { $a = 0; echo $a; $a++; } ]]> </programlisting> </informalexample> <simpara> Ta funkcja jest bezu¿yteczna, gdy¿ przy ka¿dym jej wywo³aniu zmienna <varname>$a</varname> otrzymuje warto¶æ <literal>0</literal>, w zwi±zku z czym funkcja stale wy¶wietla "0". Wystêpuj±ca potem inkrementacja <varname>$a</varname>++ nie ma ¿adnego znaczenia, gdy¿ funkcja siê koñczy i zmienna <varname>$a</varname> znika. Aby powy¿sza funkcja mia³a jaki¶ sens, nale¿y zapobiec gubieniu warto¶ci <varname>$a</varname>, do czego u¿ywamy s³owa kluczowego static: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test() { static $a = 0; echo $a; $a++; } ]]> </programlisting> </informalexample> <simpara> Teraz, za ka¿dym wywo³aniem funkcji test, zostanie wy¶wietlona warto¶æ zmiennej <varname>$a</varname>, po czym ta zmienna zostanie inkrementowana. </simpara> <simpara> Zmienne statyczne pozwalaj± te¿ na wykorzystanie funkcji rekurencyjnych, czyli takich, które wywo³uj± same siebie. Funkcje rekurencyjne nale¿y pisaæ ostro¿nie, gdy¿ ³atwo jest wywo³aæ nieskoñczon± rekurencjê. Musisz byæ pewny, ¿e masz odpowiednie mechanizmy do zatrzymania rekurencji w pewnym momencie. Poni¿sza funkcja rekurencyjnie liczy do 10, u¿ywaj±c zmiennej statycznej <varname>$licznik</varname>, aby wiedzieæ, kiedy ma siê zatrzymaæ: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ function Test() { static $licznik = 0; $licznik++; echo $licznik; if ($licznik < 10) { Test (); } $licznik--; } ]]> </programlisting> </informalexample> </sect1> <sect1 id="language.variables.variable"> <title>Zmienne zmienne</title> <simpara> W niektórych przypadkach jest wygodne, by móc u¿yæ zmiennej o zmiennej nazwie. To znaczy zmiennej, której nazwa mo¿e byæ zmieniana dynamicznie. Zwyk³a zmienna jest ustawiana wyra¿eniem jak poni¿ej: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $a = "witaj"; ]]> </programlisting> </informalexample> <simpara> Zmienna zmienna pobiera warto¶æ jednej zmiennej i traktuje j± jako nazwê zmiennej. W powy¿szym przyk³adzie, <emphasis>witaj</emphasis> mo¿e staæ siê nazw± zmiennej, przy u¿yciu dwóch znaków dolara, tzn. </simpara> <informalexample> <programlisting role="php"> <![CDATA[ $$a = "¶wiecie"; ]]> </programlisting> </informalexample> <simpara> W tym momencie dwie zmienne zosta³y zdefiniowane i umieszczone w drzewie symbolicznym PHP: <varname>$a</varname> zawieraj±ca "witaj" i <varname>$witaj</varname> zawieraj±ca "¶wiecie". Zatem poni¿szy zapis: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ echo "$a ${$a}"; ]]> </programlisting> </informalexample> <simpara> znaczy to samo, co: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ echo "$a $witaj"; ]]> </programlisting> </informalexample> <simpara> tzn. obydwa wy¶wietl±: <computeroutput>witaj ¶wiecie</computeroutput>. </simpara> <simpara> Aby u¿ywaæ zmiennych zmiennych jako tablic, trzeba rozwi±zaæ pewn± niejasno¶æ. Mianowicie, je¶li napiszesz <varname>$$a[1]</varname>, parser musi wiedzieæ, czy chesz u¿yæ <varname>$a[1]</varname> jako nazwy zmiennej, czy <varname>$$a</varname> jako nazwy tablicy, której rekord [1] ciê interesuje. W tym przypadku nale¿y zastosowaæ odrêbn± sk³adniê: <varname>${$a[1]}</varname> dla pierwszego przypadku a <varname>${$a}[1]</varname> dla drugiego. </simpara> </sect1> <sect1 id="language.variables.external"> <title>Zmienne spoza PHP</title> <sect2 id="language.variables.external.form"> <title>Formularze HTML (GET i POST)</title> <simpara> Kiedy do skryptu PHP zostanie wys³any formularz, ka¿da zmienna z tego formularza zostanie automatycznie dostarczona do tego skryptu przez PHP. Je¶li dyrektywa <link linkend="ini.track-vars">track_vars</link> jest w³±czona, to zmienne te bêd± umieszczone w tablicach asocjacyjnych <varname>$HTTP_POST_VARS</varname> (zmienne wys³ane metod± POST), <varname>$HTTP_GET_VARS</varname> (zmienne wys³ane metod± GET), i/lub <varname>$HTTP_POST_FILES</varname> (plik wys³ane metod± POST), w zale¿no¶ci od rodzaju zmiennych w zapytaniu. </simpara> <para> Wiêcej informacji na ten temat w rozdziale <link linkend="language.variables.predefined">Zmienne predefiniowane</link>. </para> <para> <example> <title>Prosty formularz ze zmienn±</title> <programlisting role="php"> <![CDATA[ <form action="foo.php" method="post"> Name: <input type="text" name="username"><br> <input type="submit"> </form> ]]> </programlisting> </example> </para> <para> Kiedy powy¿szy formularz zostanie wys³any, warto¶æ wprowadzona do pola tekstowego bêdziê dostêpna w <varname>$HTTP_POST_VARS['username']</varname>. Je¶li dyrektywa <link linkend="ini.register-globals">register_globals</link> jest w³±czona, zmienna z formularza bêdzie tak¿e dostêpna jako zmienna globalna <varname>$username</varname>. </para> <note> <para> Dyrektywa konfiguracyjna <link linkend="ini.magic-quotes-gpc">magic_quotes_gpc</link> oddzia³uje na zmienne z Get, Post i Cookie. Je¶li w³±czona, tekst (It's "PHP!") automagicznie zmieni siê w (It\'s \"PHP!\"). Jest to potrzebne przy wpisywaniu danych do baz danych. Zobacz te¿ <function>addslashes</function>, <function>stripslashes</function> i <link linkend="ini.magic-quotes-sybase">magic_quotes_sybase</link>. </para> </note> <simpara> PHP obs³uguje tak¿e tablice w kontek¶cie zmiennych z formularzy (zajrzyj do <link linkend="faq.html">FAQ</link>). Mo¿na na przyk³ad pogrupowaæ razem powi±zane zmienne lub u¿yæ tej mo¿liwo¶ci do pobrania warto¶ci z pola wyboru (select): </simpara> <para> <example> <title>Bardziej z³o¿one zmienne w formularzach</title> <programlisting role="php"> <![CDATA[ <form action="array.php" method="post"> Nazwisko: <input type="text" name="personal[nazwisko]"><br> Email: <input type="text" name="personal[email]"><br> Piwo: <br> <select multiple name="piwo[]"> <option value="zywiec">¯ywiec <option value="lech">Lech <option value="cooler">Cooler </select> <input type="submit"> </form> ]]> </programlisting> </example> </para> <para> W PHP 3 tablice w formularzach mog³y byæ tylko jednowymiarowe. W PHP 4 nie ma takich ograniczeñ. </para> <sect3 id="language.variables.external.form.submit"> <title>Nazwy zmiennych dla SUBMIT w postaci obrazka</title> <simpara> Przy tworzeniu formularza, mo¿na u¿yæ obrazka, zamiast standardowego przycisku Wy¶lij, za pomoc± takiego znacznika:</simpara> <informalexample> <programlisting role="php"> <![CDATA[ <input type="image" src="image.gif" name="sub"> ]]> </programlisting> </informalexample> <simpara> Kiedy u¿ytkownik kliknie gdzie¶ na obrazku, formularz, którego to dotyczy, zostanie wys³any do serwera z dwiema dodatkowymi zmiennymi, sub_x i sub_y. Zawieraj± one koordynaty miejsca klikniêcia na obrazek. Mo¿na przy tym zauwa¿yæ, ¿e w nazwach zmiennych jest kropka a nie podkre¶lnik, ale PHP konwertuje kropkê na podkre¶lnik automatycznie. (Zobacz <link linkend="language.variables.external.dot-in-names">Kropki w nazwach nadchodz±cych zmiennych</link>). </simpara> </sect3> </sect2> <sect2 id="language.variables.external.cookies"> <title>Ciasteczka HTTP</title> <simpara> PHP bez problemu obs³uguje ciasteczka HTTP, takie jak zdefiniowano w <ulink url="&spec.cookies;">Specyfikacji Netscape'a</ulink>. Ciasteczka s± mechanizmem przechowywania informacji w przegl±darce klienta w celu ¶ledzenia lub identyfikowania sta³ych bywalców strony. Ciasteczka ustawia siê za pomoc± funkcji <function>setcookie</function>. Ciasteczka s± czê¶ci± nag³ówka HTTP, wiêc funkcja SetCookie musi byæ wywo³ana zanim jakakolwiek inna informacja zostanie wys³ana do przegl±darki. Takie samo ograniczenie dotyczy funkcji <function>header</function>. Wszystkie ciasteczka odebrane od klienta zostan± automatycznie zamienione w zmienne PHP, podobnie jak dane odebrane metod± GET lub POST. </simpara> <simpara> Je¶li chcesz przypisaæ wiele warto¶ci do jednego ciasteczka, dodaj <emphasis>[]</emphasis> do jego nazwy. Na przyk³ad: </simpara> <informalexample> <programlisting role="php"> <![CDATA[ setcookie("MyCookie[]", "Testing", time()+3600); ]]> </programlisting> </informalexample> <simpara> Pamiêtaj, ¿e wys³ane ciasteczko zast±pi wcze¶niejsze ciasteczko o tej nazwie, o ile ¶cie¿ka lub domena nie s± ró¿ne. Na przyk³ad dla koszyka do zakupów mo¿esz potrzebowaæ licznika a jego warto¶æ stale przekazywaæ dalej, tzn. </simpara> <example> <title>Przyk³ad zastosowania SetCookie</title> <programlisting role="php"> <![CDATA[ $ilosc++; setcookie("ilosc", $ilosc, time()+3600); setcookie("koszyk[$ilosc]", $towar, time()+3600); P&]]> </programlisting> </example> </sect2> <sect2 id="language.variables.external.environment"> <title>Zmienne ¶rodowiskowe</title> <para> PHP samoczynnie udostêpnia zmienne ¶rodowiskowe jak zwyk³e zmienne PHP. <informalexample> <programlisting role="php"> <![CDATA[ echo $HOME; /* Wy¶wietli zmienn± ¶rodowiskow± HOME, o ile ta ma jak±¶ warto¶æ */ ]]> </programlisting> </informalexample> </para> <para> Poniewa¿ informacje nadchdz±ce przez GET, POST i ciasteczka równie¿ s± udostêpniane jako zmienne, czasem jest lepiej odczytaæ zmienne ¶rodowiskowe bezpo¶rednio ze ¶rodowiska, aby mieæ pewno¶æ, ¿e otrzymuje siê prawdziw± warto¶æ zmiennej. W tym celu u¿ywa siê funkcji <function>getenv</function>. Mo¿na tak¿e samodzielnie ustawiæ warto¶æ zmiennej ¶rodowiskowej za pomoc± funkcji <function>putenv</function>. </para> </sect2> <sect2 id="language.variables.external.dot-in-names"> <title>Kropki w nazwach nadchodz±cych zmiennych</title> <para> PHP normalnie nie zmienia nazw zmiennych przekazywanych do skryptu. Jednak¿e nale¿y pamiêtaæ, ¿e kropka "." nie jest poprawnym znakiem w nazwie zmiennej. Dlaczego, proszê spojrzeæ na to: <programlisting role="php"> <![CDATA[ $varname.ext; /* niepoprawna nazwa zmiennej */ ]]> </programlisting> To co widzi parser, to zmienna o nazwie <varname>$varname</varname>, po której pojawia siê operator konkatenacji, a nastêpnie pusty ³añcuch (czyli taki, który nie jest ¿adnym s³owem kluczowym, ani zarezerwowanym) "ext". Oczywi¶cie, nie daje to ¿adnego sensownego wyniku. </para> <para> Warto zatem wiedzieæ, ¿e PHP automatycznie zast±pi podkre¶lnikiem "_" ka¿d± kropkê w nazwie nadchodz±cej zmiennej. </para> </sect2> <sect2 id="language.variables.determining-type-of"> <title>Okre¶lanie typów zmiennych</title> <para> Poniewa¿ PHP samodzielnie okre¶la typy zmiennych i konwertuje je (zasadniczo) jak potrzeba, nie zawsze jest jasne, jakiego typu jest dana zmienna w danym momencie. PHP zawiera kilka funkcji do okre¶lania typów zmiennych. S± to: <function>gettype</function>, <function>is_long</function>, <function>is_double</function>, <function>is_string</function>, <function>is_array</function>i <function>is_object</function>. </para> </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 indent-tabs-mode:nil 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 -->