WebDeveloper
 g│≤wna | forum manual | skrypty |  artyku│y |  projekty | porady |  zasoby |  linki 
dzia│y
  •  manual PHP
  •  skrypty PHP
  •  artyku│y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    news
  • Porcjowanie wynik≤w zapytania
  • Kartki Internetowe
  • PHP + MySQL + Windows 98
  • Bezpieczne uploadowanie plik≤w
  • Przegl▒danie obrazk≤w z bazy PostgreSql.
  • Co to jest WebDeveloper?
  • Instalujemy serwer baz danych !
  • Sesje w PHP4 !
  • Dodaj poradΩ !!!
  • Zastosowano... PHP !
  • redakcja

    Je╢li masz ciekawe informacje odno╢nie PHP, skrypty, porady, linki itp. lub chcia│by╢ wsp≤│tworzyµ serwis PHP.zone.pl daj nam znaµ na email !



    dodaj poradΩ !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Rozdzia│ 7. Zmienne

    Podstawy

    Zmienne w PHP s▒ reprezentowane przez znak dolara poprzedzaj▒cy nazwΩ zmiennej. W nazwach zmiennych rozr≤┐niana jest wielko╢µ liter.

    $var = "Bob";
    $Var = "Joe";
    echo "$var, $Var"; // wyrzuci "Bob, Joe"
         

    W PHP zmienne maj▒ zawsze jak▒╢ warto╢µ. Kiedy przypiszesz wyra┐enie do zmiennej, warto╢µ wyra┐enia jest kopiowana do docelowej zmiennej. WiΩcej informacji znajdziesz w sekcji Wyra┐enia.

    PHP4 oferuje tak┐e inny sposob wyznaczania warto╢ci dla zmiennych: przez referencjΩ. To oznacza, ┐e nowa zmienna odnosi siΩ (inaczej m≤wi▒c, "staje siΩ aliasem dla" lub "wskazuje na") do oryginalnej zmiennej. Zmiana nowej zmiennej odnosi siΩ r≤wnie┐ do orygina│u, i odwrotnie. Ten spos≤b wyznaczania warto╢ci charakteryzuje siΩ du┐▒ szybko╢ci▒, co ma zastosowanie w d│ugich pΩtlach lub przy wyznaczaniu du┐ych tablic czy obiekt≤w.

    Referencje okre╢la siΩ poprzez ampersand (&) przed nazw▒ zmiennej ╝r≤d│owej. Poni┐szy kawa│ek kodu zwraca dwa razy 'Nazywam siΩ Zenek' :

    <?php
    $foo = 'Zenek'; // przypisanie warto╢ci 'Bob' do zmiennej $foo
    $bar = &$foo; // referencja do $foo przez $bar.
    $bar = "Nazywam siΩ $bar"; // Zmiana $bar...
    echo $foo; // $foo tak┐e siΩ zmieni│o.
    echo $bar;
    ?>

    Uwaga: tylko nazwane zmienne mog▒ byµ u┐ywane przez referencje.

    <?php
    $foo = 25;
    $bar = &$foo; // prawid│owe wyznaczenie referencji.
    $bar = &(24 * 7); // nieprawid│owe; brak nazwanej zmiennej
    function test() {
    return 25;
    }

    $bar = &test(); // nieprawid│owe
    ?>

     

    Predefiniowane zmienne

    PHP dostarcza wiele predefiniowanych zmiennych, kt≤re mog▒ byµ u┐yte przez skrypt. DostΩpno╢µ niekt≤rych zmiennych zale┐y od konfiguracji, typu, wersji serwera itp.

    Oto lista zmiennych dostΩpnych w typowej instalacji php, pracuj▒cego jako modu│ serwera Apache 1.3.6. Pe│n▒ listΩ zmiennych predefiniowanych (i du┐o innych przydatnych informacji ) uzyskasz wywo│uj▒c funkcjΩ phpinfo().

     

    Zmienne Apache'a (wybrane)

    Te zmienne s▒ utworzone przez serwer Apache. Je┐eli uruchomisz inny serwer WWW, zmienne mog▒ siΩ r≤┐niµ. Wiele z ponizszych zmiennych jest opisanych r≤wnie┐ w specyfikacji CGI 1.1 .

    Uwaga: kilka zmiennych mo┐e byµ nie dostΩpnych je╢li uruchomisz PHP z linii komend.

    AUTH_TYPE

    Metoda autoryzacji jakiej u┐ywa serwer w celu stwierdzenia praw dostΩpu u┐ytkownika do chronionych zasob≤w

    GATEWAY_INTERFACE

    Wersja specyfikacji CGI, kt≤rej u┐ywa serwer np. 'CGI/1.1'.

    SERVER_NAME

    Nazwa hosta (lub IP) na kt≤rym jest wykonywany skrypt. Je┐eli skrypt jest wykonywany na wirtualnym ho╢cie, warto╢µ bΩdzie okre╢lona przez niego.

    SERVER_SOFTWARE

    úa±cuch identyfikuj▒cy serwer www, zwracany przez serwer w nag│≤wku odpowiedzi. SERVER_PROTOCOL

    Nazwa i wersja protoko│u obs│uguj▒cego zapytanie np. 'HTTP/1.0';

    SERVER_ADMIN

    Adres kontaktowy do administratora serwera.

    SERVER_PORT

    Port na serwerze www u┐yty do komunikacji. Domy╢lnie jest to '80'

    SERVER_SIGNATURE

    Sygnatura serwera tzn. wersja, nazwa hosta itp.

    QUERY_STRING

    Dane przes│ane do serwera (argumenty) znajduj▒ce siΩ po znaku zapytania (?) w adresie URL przy u┐yciu metody GET

    DOCUMENT_ROOT

    Katalog g│≤wny dla stron www, skrypt≤w.

    HTTP_ACCEPT

    Zawarto╢µ pola Accept: z nag│≤wka HTTP dla aktualnego ┐▒dania.

    HTTP_ACCEPT_CHARSET

    Zawarto╢µ pola Accept-Charset: z nag│≤wka HTTP dla aktualnego zapytania,

    Przyk│ad: 'iso-8859-1,*,utf-8'.

    HTTP-REFERER

    Adres strony, z kt≤rej u┐ytkownik wszed│ na stronΩ ze skryptem.

    HTTP_ENCODING

    Zawarto╢µ pola Accept-Encoding: z nag│≤wka HTTP dla aktualnego zapytania,

    Przyk│ad: 'gzip'.

    HTTP_ACCEPT_LANGUAGE

    Zawarto╢µ pola Accept-Language: z nag│≤wka HTTP dla aktualnego zapytania,

    Przyk│ad: 'en'.

    HTTP_CONNECTION

    Zawarto╢µ pola Connection: z nag│≤wka HTTP dla aktualnego zapytania,

    Przyk│ad: 'Keep-Alive'.

    HTTP_HOST

    Zawarto╢µ pola Host: z nag│≤wka HTTP dla aktualnego zapytania,

    HTTP_USER_AGENT

    Zawarto╢µ pola User_Agent:. z nag│≤wka HTTP dla aktualnego zapytania. Jest to sygnatura u┐ywana przez przegl▒darkΩ klienta, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Aby rozpoznaµ typ przegl▒darki klienta mo┐esz u┐yµ r≤wnie┐ funkcji get_browser().

    SCRIPT_FILENAME

    Ca│kowita ╢cie┐ka dostΩpu, aktualnie wykonywanego skryptu.

    SCRIPT_NAME

    Zawiera wirtualn▒ ╢cie┐kΩ dostΩpu do skryptu.

    PATH_INFO

    Fragment URLa danego skryptu wystΩpuj▒cy po nazwie serwera

    PATH_TRANSLATED

    Pe│na fizyczna ╢cie┐ka dostΩpu do skryptu.

    REQUEST_URI

    URI dla tej strony; dla przyk│adu, '/index.html'.

    REQUEST_METHOD

    Metoda zaputania jaka by│a u┐yta przy dostΩpie do skryptu PHP np. 'GET', 'HEAD', 'POST', 'PUT'.

    REMOTE_USER

    Nazwa u┐ytkownika, je╢li serwer www obs│uguje RFC 931 a skrypt jest zabezpieczony.

    REMOTE_ADDR

    Adres IP zdalnego u┐ytkownika przegl▒daj▒cego stronΩ.

    REMOTE_PORT

    Port na maszynie zdalnego u┐ytkownika u┐ywany do komunikacji z serwerem www.

    REMOTE_HOST

    Nazwa hosta, z kt≤rego klienta otworzy│ po│▒czenie.

     

    Zmienne ╢rodowiskowe

    Te zmienne s▒ importowane ze ╢rodowiska w kt≤rym parser PHP jest uruchomiony.

    Zmienne PHP

    Te zmienne s▒ tworzone przez PHP.

    argv

    Tablica argument≤w przes│anych do skryptu. Kiedy skrypt jest wywo│ywany metod▒ GET, argumentem bΩdzie query string. Kiedy skrypt jest wywo│ywany z linii komend, dostΩp do argument≤w realizowany jak w C.

    argc

    Zawiera liczbΩ parametr≤w przes│anych do skryptu z linii komend

    PHP_SELF

    Nazwa pliku aktualnie wykonywanego skryptu, wzglΩdem document root. Je┐eli PHP jest uruchomione jako interpreter linii komend, ta zmienna nie jest dostΩpna.

    HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS

    tworzone s▒ trzy skojarzone ze sob▒ tablice: $HTTP_GET_VARS, $HTTP_POST_VARS i $HTTP_COOKIE_VARS kt≤re przechowuj▒ zmienne przes│ane metodami GET,POST,COOKIE.

    Mo┐esz zmieniµ tΩ opcje poprzez dyrektywΩ track_vars w pliku konfiguracyjnym PHP lub w samym skrypcie poprzez <?php_track_vars?> na pocz▒tku skryptu.

     

    ZasiΩg zmiennych

    ZasiΩg zmiennej zalezy od kontekstu jej u┐ycia. Przewa┐nie wszystkie zmienne PHP s▒ dostΩpne globalnie w skrypcie, co r≤wnie┐ obejmuje wszystkie pliki do│▒czane ( include() ) do skryptu jaki i wymagane ( require() ) przez skrypt.

    Przyk│ad:

    $a = 1;
    include "b.inc";
    

    Tutaj zmienna $a bΩdzie dostΩpna wewn▒trz do│▒czonego skryptu b.inc. Wewn▒trz funkcji zdefiniowanych przez u┐ytkownika definiowane s▒ zmienne lokalne. Jakakolwiek zmienna u┐yta wewn▒trz takiej funkcji ma ograniczony zasiΩg tylko do tej funkcji.

    Przyk│ad:

     
    $a = 1; /* zasiΩg globalny */ 
     
    Function Test () { 
        echo $a; /* odwo│anie do zmiennej lokalnej */ 
    } 
     
    Test ();
    

    Powy┐szy skrypt nie wy╢wietli ┐adnej warto╢ci poniewa┐ zmienna lokalna $a nie zosta│a zadeklarowana. Mo┐esz tu zauwa┐yµ pewn▒ r≤┐nicΩ wzglΩdem jΩzyka C, gdzie zmienne globalne s▒ dostΩpne w funkcjach i ewentualnie s▒ nadpisywane przez zmienne lokalne. W PHP zmienne globalne musz▒ byµ zadeklarowane komend▒ global wewn▒trz funkcji, w kt≤rej maj▒ byµ u┐yte.

    Przyk│ad:

    $a = 1;
    $b = 2;
     
    Function Suma () {
        global $a, $b;
     
        $b = $a + $b;
    } 
     
    Suma ();
    echo $b;
        

    Powy┐szy skrypt zwr≤ci "3". Poprzez zadeklarowanie globalnych $a i $b we wnΩtrzu funkcji, skrypt pracuje na zmiennych globalnych a nie na lokalnych. Nie ma ogranicze± co do liczby u┐ywanych zmiennych globalnych przez funkcjΩ.

    Drugim sposobem dostΩpu do zmiennych globalnych w funkcjach jest predefiniowana tablica $GLOBALS.

    Poprzedni przyk│ad mo┐na zapisaµ jako:

    $a = 1;
    $b = 2;
     
    Function Sum () {
        $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
    } 
     
    Sum ();
    echo $b;
        

    Tablica $GLOBALS jest tablic▒ skojarzon▒ z nazwami zmiennych globalnych bΩd▒cymi kluczem tablicy, za╢ zawarto╢µ zmiennej jest warto╢ci▒ elementu tablicy.

    Inn▒ wa┐n▒ cech▒ zmiennych jest mo┐liwo╢µ u┐ycia zmiennych statycznych (static). Zmienna statyczna jest zmienn▒ lokaln▒ i istnieje tylko w funkcjach, ale jej warto╢µ nie jest tracona kiedy program wychodzi z funkcji gdzie by│a okre╢lona.

    Przyk│ad:

    Function Test () {
        $a = 0;
        echo $a;
        $a++;
    }
        

    Ta funkcja jest zupe│nie bezu┐yteczna; przez ca│y ustawia zmienn▒ $a na warto╢µ 0 i j▒ wy╢wietla. NastΩpnie zwiΩksza warto╢µ zmiennej przez $a++ i wychodzi z funkcji przez co warto╢µ $a jest tracona. U┐yteczna funkcja licz▒ca, kt≤ra nie bΩdzie traci│a aktualnej warto╢ci zmiennej powinna u┐ywaµ zmiennej $a jako zmiennej statycznej:

    Function Test () {
        static $a = 0;
        echo $a;
        $a++;
    }
        

    Teraz przy ka┐dym wywo│aniu funkcji Test() bΩdzie wypisywana warto╢µ zmiennej $a oraz zwiΩkszana jej warto╢µ.

    Statyczne zmienne mog▒ byµ wykorzystane w funkcjach rekursywnych. Funkcja rekursywna to taka kt≤ra wywo│uje sama siebie. Musisz jednak zapewniµ w│▒╢ciwy spos≤b na zako±czenie takie funkcji (bo mo┐e pracowaµ w niesko±czono╢µ).

    Poni┐sza funkcja zlicza rekursywnie do 10, a poprzez u┐ycie zmiennej statycznej $count wie kiedy ma zatrzymaµ zliczanie:

    Function Test () {
        static $count = 0;
     
        $count++;
        echo $count;
        if ($count < 10) {
            Test ();
        }
        $count--;
    }
        

    Zmienna zmiennej

    Czasami jest wygodnie mieµ zmienn▒ nazwΩ zmiennej; tzn. nazwa zmiennej jest ustawiana dynamicznie.

    Normalna zmienna jest deklarowana nastΩpuj▒co:

    $a = "hello";
        

    Zmienna zmiennej na podstawie warto╢ci pierwszej zmiennej okre╢la nazwΩ drugiej zmiennej. W poni┐szym przyk│adzie, zawarto╢µ pierwszej zmiennej $a (hello) jest u┐yta jako nazwa drugiej zmiennej, np:.

    $$a = "world";
        

    W tym momencie dwie zmienne zosta│y zdefiniowane i zapamiΩtane w $$a jako: $a z zawarto╢ci▒ "hello" i $hello z zawarto╢ci▒ "world". Dlatego wyra┐enie :

    echo "$a ${$a}";
        

    wy╢wietli dok│adnie to samo co:

    echo "$a $hello";
        

    Obydwa wyra┐enia zwracaj▒: hello world.

    W przypadku tablic nale┐y uwa┐aµ w okre╢laniu co ma byµ nazw▒ zmiennej.

    Aby u┐yµ zmiennej, kt≤rej nazwa bazuje na zawarto╢ci elementu tablicy $a[1], zastosuj sk│adniΩ ${$a[1]}.

    Aby u┐yµ warto╢ci elementu tablicy, kt≤rej nazwa bazuje na zawarto╢ci innej zmiennej, zastosuj sk│adniΩ ${$a}[1].

     

    Zmienne spoza PHP

    Formularze HTML (metody: GET i POST)

    Po przes│aniu formularza do skryptu PHP, wszelkie zmienne z formularza bΩd▒ automatycznie dostΩpne w skrypcie pod takimi samymi nazwami.

    Dla przyk│adu:

    Przyk│ad 7-1. Zmienne formularza

    <form action="foo.php" method="post">
        Name: <input type="text" name="name"><br>
        <input type="submit">
    </form>
          

    Po przes│aniu, PHP stworzy zmienn▒ $name, kt≤ra bΩdzie pamiΩta│a zawarto╢µ pola name w formularzu.

    PHP poradzi sobie r≤wnie┐ z tablicami w kontek╢cie zmiennych formularza, ale tylko z tablicami jednowymiarowymi. DziΩki temu, mo┐esz grupowaµ odpowiednie zmienne lub pobieraµ dane z rozbudowanych formularzy:

    Przyk│ad 7-2. Bardziej z│o┐ony formularz

    <form action="array.php" method="post">
    Nazwisko: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Piwo: <br>
    <select multiple name="beer[]">
    <option value="Zywiec">Zywiec
    <option value="Lech">Lech
    <option value="Warka">Warka
    </select>
    <input type="submit">
    </form>

    Je┐eli w│▒czy│e╢ opcjΩ track_vars w pliku konfiguracyjnym PHP lub u┐y│e╢ dyrektywy <?php_track_vars?> w skrypcie, zmienne wys│ane metod▒ POST lub GET zostan▒ r≤wnie┐ umieszczone w tablicach $HTTP_POST_VARS i $HTTP_GET_VARS .

    IMAGE SUBMIT i dodatkowe zmienne

    Podczas wysy│ania formularza mo┐liwe jest zastosowanie obrazka zamiast przycisku submit:

    <input type=image src="image.gif" name="sub">
          

    Kiedy u┐ytkownik kliknie na obrazku, formularz zostanie przes│any do serwera wraz z dwoma dodatkowymi zmiennymi, sub_x i sub_y. Zmienne te zawieraj▒ dok│adn▒ lokalizacjΩ punktu w kt≤ry klikn▒│ u┐ytkownik na obrazku. Nazwy tych zmiennych przesy│ane przez przeg│▒darki czΩsto zawieraj▒ kropkΩ zamiast podkre╢lenia, ale PHP dokonuje automatycznej konwersji tych znak≤w.

    HTTP Cookies

    PHP wspiera HTTP cookies. Cookies s▒ mechanizmem dla przechowywania danych na komputerach zdalnych u┐ytkownik≤w. Zwykle u┐ywane do ╢ledzenia odwiedzin strony lub zwrotnej identyfikacji u┐ytkownika. Mo┐esz zdefiniowaµ cookies u┐ywaj▒c funkcji SetCookie(). Cookies s▒ czΩ╢ci▒ nag│≤wka HTTP, wiΩc funkcja SetCookie musi byµ wywo│ana zanim jakakolwiek zawarto╢µ zostanie wysy│ana do przegl▒darki. Jest to identyczne ograniczenie jak w przypadku funkcji Header(). Cookies wys│ane do serwera przez klienta bΩdzie automatycznie umieszczane w zmiennej, podobnie jak ma to miejsce przy odbieraniu danych przes│anych metodami GET czy POST.

    Je┐eli chcia│by╢ wyznaczaµ kilka warto╢ci dla pojedy±czej cookie, dodaj dwa nawiasy [] do nazwy cookie.

    Przyk│ad:

    SetCookie ("MojeCookie[]", "Testowane", time()+3600); //dopisuje na koniec tablicy

    Pamietaj, ┐e nowa cookie zast▒pi poprzedni▒ cookie o takiej samej nazwie w przegl▒darce klienta.

    Zmienne ╢rodowiskowe

    PHP automatycznie udostΩpnia zmienne ╢rodowiskowe jako normalne zmienne PHP.

    echo $HOME; /* wyswietla zawarto╢µ zmiennej ╢rodowiskowej HOME
    . */

    Funkcja getenv() odczytuje zmienn▒ ╢rodowiskow▒, za╢ putenv() ustawia tak▒ zmienn▒.

    Kropki w nazwach zmiennych

    Zwykle PHP nie zmienia nazwy zmiennej przesy│anej do skryptu. Jednak kropka w nazwie zmiennej nie jest akceptowana.

    $varname.ext;  /* z│a nazwa zmiennej */
         

    W tym przypadku analizator sk│adni rozpoznaje zmienn▒ $varname, po niej operator │▒czenia │a±cuch≤w (kropka), a nastΩpnie nieznany ci▒g. Rezultat nie bΩdzie na pewno zadowalaj▒cy.

    W celu unikniΩcia takich problem≤w, PHP automatycznie zastΩpuje wszelkie kropki w nazwach zmiennych na podkre╢lenia.

    Okre╢lanie typu zmiennej

    Poniewa┐ PHP okre╢la typy zmiennych i konwertuje je gdy zachodzi taka potrzeba, nie zawsze wiadomo jaki aktualnie typ posiada dana zmienna. PHP zawiera kilka funkcji kt≤re zwaracaj▒ informacje o typie zmiennej. To s▒ gettype(), is_long(), is_double(), is_string(), is_array() i is_object().

    wstecz spis tresci dalej

    kontakt

    autor:

    Hubert Mierzwiak

    wsp≤│praca:

    Piotr Karolak

    Chcesz prowadziµ sw≤j dzia│ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s▒dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz sw≤j email i wci╢nij Enter

    linuxnews.pl
  • KRRiTV stra┐nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju┐ nowy Debian...
  • Tydzie± min▒│...




  • Manual | Skrypty | Artyku│y | Projekty
    Porady | Zasoby | Linki
    G│≤wna | Forum

    Copyright 2000 Hubert Mierzwiak