APLIKACJE INTERNETOWE 5 PHP T A B L I C E, O B S Ł U G A P L I K Ó W, P R Z E K A Z Y W A N I E Z M I E N N Y C H
PLAN PREZENTACJI Tablice Co to jest tablica? Tablice asocjacyjne Przeglądanie tablic Zamiana tablic na stringi i odwrotnie System plików Wstęp Wewnętrzny wskaźnik pliku Odczyt z pliku Zapis do pliku Blokowanie plików Trochę statystyk Kopiowanie, usuwanie, zmiana nazwy plików Katalogi Prawa dostępu Załączanie zewnętrznych plików Cztery funkcje jedno działanie Najbardziej znane: include() i require() Ograniczenia include() i require() Młodsi bracia: include_once() i require_once() Przekazywanie zmiennych Wstęp Metoda GET Metoda POST Odzyskać zmienną Ciasteczka
TABLICE Tablice to typy zmiennych, które służą do przechowywania innych zmiennych. Przykład przypisania trzech kolejnych wartości do tablicy $tablica. <?php?> $tablica[0] = 8; $tablica[1] = 9; $tablica[2] = 1; Kiedy chcemy po prostu dodać nową pozycję do tablicy, wystarczy zastosować powyższy zapis, pomijając numer klucza w nawiasie kwadratowym. <?php?> $tablica[] = 8; $tablica[] = 9; $tablica[] = 1;
TABLICE Elementem tablicy może być dowolna zmienna, nawet inna tablica. Gdy powstanie taka konstrukcja, tablicę nazywamy wielowymiarową i do elementu odwołujemy się poprzez zapis uwzględniający liczbę wymiarów. <?php $tablica[0][7] = "18 małych kotków"; echo $tablica[0][7]; $tablica[0][7]["tytuł"][2] = "Ala ma kota, a sierotka ma rysia"; //można też wprowadzać indeksy tekstowe i więcej niż dwa wymiary tablicy?>
TABLICE Tablice asocjacyjne to odmiany tablic, w których zamiast indeksów liczbowych występują indeksy tekstowe. Najczęstsze zastosowanie tej struktury danych prezentuje poniższy przykład. Tablica reprezentuje konkretną osobę, a wiersze to jej dane osobowe. <?php echo $kowalski["imie"] = "Jan"; echo $kowalski["miasto"] = "Warszawa"; echo $kowalski["ulica"] = "Polna"; echo $kowalski["wiek"] = 19; echo $kowalski["kawaler"] = true;?>
TABLICE W przypadku wykonania operacji na wszystkich elementach tablicy, gdy znamy liczbę jej elementów wystarczy użyć pętli FOR i następującej konstrukcji: <?php?> for ($i=0;$i<10;$i++) echo $tablica[$i]; Lecz jeśli nie znamy liczby elementów tablicy, bo jest ona zmienna i zależy np. od wprowadzonych wcześniej informacji, należy posłużyć się funkcją sizeof(). Podając jako argument nazwę tablicy, otrzymamy liczbę jej elementów. <?php for ($i=0;$i<sizeof($tablica);$i++) echo $tablica[$i];
TABLICE Przeglądanie tablic Nieco bardziej skomplikowane jest przeglądanie tablicy asocjacyjnej, ale i tutaj użyteczne są dwie konstrukcje. 1. <?php foreach ($tablica as $klucz => $wartosc) { }?> echo "$klucz => $wartosc <br />"; W przykładzie tym kod zwraca dla każdej iteracji pętli parę zmiennych: $klucz i $wartosc.
TABLICE 2. <?php while( list($klucz, $wartosc) = each($tablica) ) echo "$klucz => $wartosc<br />";?> list() podobnie jak array(), list() nie jest tak naprawdę funkcją, ale elementem składni języka. Używamy list(), aby przypisać listę zmiennych do funkcji zwracającej tablicę wyników (np. explode()), each() zwraca bieżącą parę klucza i wartości z tablicy oraz przesuwa kursor tablicy (wewnętrzny wskaźnik tablicy). Aby odczytać tablicę ponownie, używając each(), należy użyć funkcji reset(), co spowoduje powrót na początek tablicy. Zatem each() zwraca tablicę, w której na pierwszej pozycji jest klucz, a na drugiej wartość, list() natomiast przechwytuje ją i zapisuje do dwóch zmiennych.
TABLICE Zamiana tablic na stringi i odwrotnie Zdarza się, że ciąg znaków trzeba zamienić na tablicę (np.: przy odczytywaniu danych z pliku). Potrzebna jest wówczas funkcja explode(). Funkcja pobiera dwa argumenty: ciąg znaków lub znak, który stanowi element rozdzielający, a także zmienną zawierającą ciąg, który chcemy rozdzielić. <?php $wpisy = explode(" ", $odczyt);?> Wywołanie takie zwróci tablicę o nazwie $wpisy z pojedynczymi elementami, które były w oryginalnym ciągu rozdzielone symbolem.
TABLICE Zamiana tablic na stringi i odwrotnie Elementy tablicy można również tablicę połączyć określonym znakiem (aby je np. zapisać w pliku). Służy do tego funkcja implode(). Pobiera ona dwa argumenty. Pierwszy to ciąg, którymi mają być połączone elementy tablicy, a drugi to nazwa zmiennej tablicy z danymi. <?php $dozapisu = implode(" ", $wpisy);?>
TABLICE Sortowanie tablic asort() sortuje rosnąco tablice asocjacyjne według wartości kluczy, zachowując przypisanie kluczy do wartości, arsort() sortuje malejąco tablice asocjacyjne według wartości kluczy, zachowując przypisanie kluczy do wartości, sort() sortuje rosnąco zwykłe tablice, rsort() sortuje malejąco zwykłe tablice, uasort() funkcja sortująca tablice asocjacyjne za pomocą zdefiniowanej przez użytkownika funkcji porównującej elementy (nazwa funkcji jest podawana za pomocą drugiego parametru), usort() funkcja sortująca zwykłe tablice za pomocą funkcji zdefiniowanej przez użytkownika, uksort() funkcja sortująca tablice asocjacyjne według klucza za pomocą funkcji zdefiniowanej przez użytkownika.
SYSTEM PLIKÓW Ta część dotyczy metod pozwalających na przechowywanie danych w plikach, czyli tzw. płaskimi bazami danych. Wszystkie funkcje obsługujące pliki jako pierwszy parametr pobierają zmienną tzw. uchwyt do pliku. Jest to specjalna nazwa zwracana przez funkcję otwierającą plik fopen() która jednoznacznie identyfikuje dany zbiór. Aby otworzyć plik, należy użyć funkcji fopen(). Pobiera ona dwa parametry. nazwa pliku do otwarcia, tryb otwarcia określa on cel, w jakim zbiór zostanie otworzony.
SYSTEM PLIKÓW Tryby otwarcia pliku: r plik tylko do odczytu (wewnętrzny wskaźnik pliku umieszczany jest na początku zbioru), r+ plik do odczytu i zapisu (wewnętrzny wskaźnik pliku umieszczany jest na początku zbioru), w plik tylko do zapisu (wewnętrzny wskaźnik pliku umieszczany jest na końcu zbioru). Należy tutaj dodać, że zawartość pliku jest niszczona (długość pliku jest zmieniana na zero), a jeśli plik nie istnieje, PHP próbuje go stworzyć, w+ plik do odczytu i do zapisu (wewnętrzny wskaźnik pliku umieszczany jest na końcu pliku). Zawartość pliku jest niszczona (długość pliku jest zmieniana na zero). Jeśli plik nie istnieje, PHP próbuje go stworzyć, a plik tylko do zapisu (wewnętrzny wskaźnik pliku umieszczany jest na końcu pliku). Jeśli plik nie istnieje PHP, próbuje go stworzyć.
SYSTEM PLIKÓW Wewnętrzny wskaźnik pliku określa miejsce, w którym mają być zapisywane dane lub (przy procedurze odczytującej po jednym znaku) który znak ma być odczytany. Aby otworzyć plik do odczytu, wystarczy wpisać kod: <?php $plik = fopen("dane/imiona.txt", "r");?> Po zakończeniu używania pliku można (ale nie trzeba) go zamknąć. Służy do tego funkcja fclose(wskaznik_do_pliku). <?php fclose($plik);?>
SYSTEM PLIKÓW Wewnętrzny wskaźnik pliku - określa skąd w pliku mają być odczytywane dane lub gdzie mają być zapisywane. Przesuwa się on automatycznie dalej po każdej procedurze odczytania określonej porcji danych z pliku. Czasem jednak chcemy odczytać np. 25. znak z pliku. Nie trzeba wtedy czytać po kolei każdego znaku, aby dojść do tego właściwego. Wystarczy użyć funkcji fseek(). Pobiera ona trzy argumenty. Pierwszy to oczywiście uchwyt do pliku, kolejny to przesunięcie, a trzeci (opcjonalny) to rodzaj przesunięcia.
SYSTEM PLIKÓW Rrodzaj przesunięcia: SEEK_SET ustawia wskaźnik na pozycję określoną poprzez przesunięcie (domyślne), SEEK_CUR ustawia wskaźnik na pozycję równą aktualnej i uwzględnia przesunięcie, SEEK_END ustawia wskaźnik na koniec pliku i uwzględnia przesunięcie. Jeśli chcemy ustawić wskaźnik w konkretnej odległości (liczby znaków) od końca zbioru, przesunięcie musi być ujemne. Istnieje też funkcja rewind(), która pobiera jako argument uchwyt do pliku i przesuwa wskaźnik na jego początek.
SYSTEM PLIKÓW Odczyt z pliku Jest kilka możliwości odczytu danych z pliku. 1. Odczyt po kolei po jednym znaku - służy do tego funkcja fgetc(). Wystarczy jako argument podać tylko uchwyt do pliku. Zwraca ona jeden odczytany znak lub false, jeśli natrafimy na koniec zbioru. Ważne jest to, że aby sprawdzić, czy funkcja oddała wartość false, należy użyć operatora === lub!==, ponieważ przy użyciu == lub!= wartości (pusty string), lub 0 dzięki zamianie typów zmiennych w PHP też będą interpretowane jako false. <?php while (false!== ($char = fgetc($file))) { echo "Aktualny znak to $char <br />"; }?>
SYSTEM PLIKÓW 2. Odczyt linijka po linijce - służy do tego funkcja fgets(). Jako parametry należy podać uchwyt do pliku i opcjonalnie maksymalną długość odczytanej linii. Czytanie linii kończy się, gdy funkcja dojdzie do końca linii (znak nowej linii jest dołączany do zwróconej wartości) lub do końca pliku. 3. Można też odczytać od razu cały plik - wystarczy użyć funkcji fread(). Jej argumentami są: uchwyt do pliku i liczba znaków, jaka ma być odczytana. Często jako liczbę znaków podaje się całkowitą długość pliku, obliczoną funkcją filesize(nazwa_pliku). <?php $plik = fopen("plik.txt", "r"); filesize("plik.txt"));?> $dane = fread($plik, Jeśli podana ilość danych do odczytania jest mniejsza niż długość pliku, to po ponownym wywołaniu tej funkcji zwróci ona dane, od momentu gdzie zakończyło się poprzednie czytanie z pliku.
SYSTEM PLIKÓW 4. Kolejna możliwość to odczyt całego pliku za pomocą tylko jednej linijki kodu: <?php $dane = fread(fopen("plik.txt", "r"), filesize("plik.txt"));?> 5. Ale już od PHP w wersji 4.3 istnieje dla powyższej instrukcji dużo lepsza alternatywa funkcja file_get_contents(). Wystarczy podać jako argument nazwę pliku tym razem nie jest to uchwyt, czyli pliku nie trzeba otwierać, używając fopen() a funkcja zwróci całą zawartość pliku. Dla przykładu: <?php $dane = file_get_contents("plik.txt");?> 6. Kolejną (już ostatnią) metodą odczytywania zawartości pliku jest przeniesienie jego zawartości do tablicy, gdzie każdy wpis odpowiada jednej linii z pliku. Służy do tego funkcja file(), której wystarczy podać tylko nazwę pliku. Zbiór w tym wypadku znów nie musi być otwarty funkcją fopen().
SYSTEM PLIKÓW Zapis do pliku Do zapisu służy jedna funkcja fwrite(), chociaż często jest używany alias do niej fputs(). Nie ma możliwości zapisu w środku pliku. Można dopisywać tylko na początku lub końcu (trzeba otworzyć plik z argumentem a). Jeśli więc chcemy coś zapisać na początku już istniejącego zbioru, należy najpierw otworzyć dany plik, odczytać jego zawartość i dopiero wtedy zapisać całość od nowa. $file = fopen("plik.txt", "r"); $dane = fread($file, filesize("plik.txt")); fclose($file); $nowedane = "Coś do dodania na początku pliku"; $nowedane.= $dane; $file = fopen("plik.txt", "w"); fwrite($ file, $nowedane); fclose($file);
SYSTEM PLIKÓW Blokowanie plików Podczas używania plików w większym serwisie (o dużej liczbie odwiedzin) może się zdarzyć, że w tym samym czasie dwa procesy będą coś próbowały zapisywać do pliku. Jeśli odbędzie się to dokładnie w tym samym czasie, to z zawartością pliku mogą się zdarzyć różne nieprzewidywalne rzeczy. Po to też istnieją blokady pliku. W PHP znajdziemy dwa rodzaje blokad: blokada dzielona może być założona przez wiele procesów naraz podczas odczytu, blokada wyłączna zakładana podczas zapisu do pliku tylko przez jeden proces.
SYSTEM PLIKÓW Blokowanie plików Aby założyć blokadę, należy użyć funkcji flock(), która pobiera dwa argumenty: uchwyt do pliku i rodzaj blokady. Oto trzy dostępne rodzaje blokady: LOCK_SH zakłada blokadę dzieloną (do odczytu), LOCK_EX zakłada blokadę wyłączną (do zapisu), LOCK_UN zdejmuje blokadę z pliku. Jeśli zakładanie blokady się powiedzie, to funkcja zwraca wartość true, w przeciwnym wypadku zwracana jest wartość false.
SYSTEM PLIKÓW Blokowanie plików <?php $file = fopen("dane\plik.txt", "w+"); if (flock($file, LOCK_EX)) { // zakładanie blokady wyłącznej fwrite($file, "Wartość dopisana do pliku"); flock($file, LOCK_UN); // zdjęcie blokady } else { echo "Błąd - plik zablokowany"; } fclose($file);?>
SYSTEM PLIKÓW Trochę statystyk W PHP istnieje też kilka funkcji, które zwracają informacje o pliku. Należą do nich: fileatime(nazwa_pliku) zwraca datę i czas ostatniego odczytu pliku podane w formacie timestamp, filemtime(nazwa_pliku) zwraca datę i czas ostatniej modyfikacji pliku podane w formacie timestamp, filegroup(nazwa_pliku) zwraca liczbowy identyfikator grupy, do której należy właściciel pliku, fileowner(nazwa_pliku) fileperms(nazwa_pliku) filesize(nazwa_pliku) zwraca identyfikator właściciela pliku, zwraca prawa dostępu do pliku, zwraca wielkość pliku w bajtach.
SYSTEM PLIKÓW Trochę statystyk Oprócz tego istnieje też kilka funkcji zwracających wartości true lub false. Są to: is_dir(nazwa_pliku) katalogiem, is_executable(nazwa_pliku) wykonywalny, is_file(nazwa_pliku) jest zwykłym plikiem, is_readable(nazwa_pliku) można odczytać, is_writeable(nazwa_pliku) można zapisywać, is_uploaded_file(nazwa_pliku) wysłany z formularza. informuje o tym, czy zbiór jest informuje o tym, czy plik jest informuje o tym, że plik istnieje i informuje o tym, czy plik informuje o tym, czy plik informuje o tym, czy plik został
SYSTEM PLIKÓW Kopiowanie Do kopiowanie plików służy funkcja copy(). Zwraca ona wartość true, jeśli plik zostanie poprawnie skopiowany, lub false, jeżeli coś pójdzie nie tak. <?php if (!copy("tymczasowy/plik.txt", "dane/plik.txt")) echo "Błąd podczas kopiowania";?>
SYSTEM PLIKÓW Zmiana nazwy Aby zmienić nazwę zbioru, należy użyć funkcji o nazwie rename(). Może ona też służyć do kopiowania plików i zwraca true lub false, tak samo jak w wypadku copy(). <?php if (!rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");) echo "Błąd podczas kopiowania ;?>
SYSTEM PLIKÓW Usuwanie plików Do usuwanie plików służy funkcja o nazwie unlink(). Jako parametr wystarczy podać nazwę pliku. Ważne jest to, by uprawnienia zbioru pozwalały na jego usunięcie, w przeciwnym razie zostanie wyświetlony błąd. <?php $SciezkaDoPliku = "/tmp/test.txt"; if (! unlink ($ SciezkaDoPliku )) echo ( Nie można skasować pliku"); else echo ("Plik $SciezkaDoPliku skasowany");?>
SYSTEM PLIKÓW Katalogi Aby utworzyć katalog, należy wywołać funkcję mkdir() i jako parametry podać kolejno: nazwę katalogu do utworzenia jego prawa dostępu (np. 0777). Funkcja zwraca wartości true lub false w zależności od powodzenia operacji. Do przeglądania zawartości katalogów służy mechanizm pseudoobiektowy. Przeglądanie zaczynamy funkcją dir(nazwa_folderu), która zwraca obiekt-uchwyt do katalogu. Kolejne pozycje z katalogu pobieramy za pomocą metody read(). Pracę z folderem kończymy metodą close().
SYSTEM PLIKÓW Katalogi <?php $dir=dir("logs"); while($entry=$dir->read()) echo "Kolejna pozycja z tego folderu to $entry<br />"; $dir->close();?>
SYSTEM PLIKÓW Do usuwania katalogów służy funkcja rmdir(), której argumentem jest nazwa folderu przeznaczonego do usunięcia. Warunkiem koniecznym do tego, by wszystko się powiodło, jest to, aby usuwany katalog był pusty. Poniżej przykład funkcji rekurencyjnej do usuwania całego katalogu (wraz z plikami i podkatalogami): function deltree($dirn) { $dir = @dir($dirn); while ($entry = $dir->read()) { if (is_dir($dirn.'/'.$entry)&&$entry!='.'&&$entry!='..') @deltree($dirn.'/'.$entry); else if ($entry!='.'&&$entry!='..') @unlink($dirn.'/'.$entry); } $dir->close(); @rmdir($dirn); }
SYSTEM PLIKÓW Prawa dostępu Unix i jego pochodne to systemy przeznaczone z założenia dla współpracy wielu użytkowników, dlatego wprowadzono coś takiego jak prawa dostępu. Są to zezwolenia dla konkretnych użytkowników lub całych ich grup na wykonanie operacji na danym pliku. Każdemu plikowi i katalogowi w systemie można przypisać trzy komplety praw. pierwszy dotyczy właściciela pliku, drugi grupy użytkowników, trzeci użytkowników, którzy ani nie są właścicielami zbioru, ani nie należą do grupy.
SYSTEM PLIKÓW Prawa dostępu Pojedynczy komplet to suma praw: uruchomienia lub w wypadku katalogu: otwarcia (wartość 1), odczytu (wartość 4) i zapisu (wartość 2). Aby nadać właścicielowi komplet praw, grupie odczyt i zapis, a pozostałym tylko odczyt, należy ustawić prawa 0764 (zero na początku to informacja, że liczba zapisana jest w formacie ósemkowym). Do ustawiania praw dostępu służy funkcja chmod($nazwa_pliku, $tryb), gdzie drugi parametr to prawa dostępu zapisane w formacie ósemkowym. Inne funkcje przydatne przy pracy z systemem zabezpieczeń to chown($nazwa_pliku, $user), zmieniająca właściciela pliku, i chgrp($nazwa_pliku, $grupa), zmieniająca grupę.
SYSTEM PLIKÓW Prawa dostępu Ustawienie odpowiednich praw dostępu to sprawa podstawowa przy tworzeniu skryptów zapisujących coś do pliku lub operujących na katalogach. Bardzo często wyświetla się błąd Permission denied, którego poprawienie to właśnie kwestia ustawienia odpowiednich praw dostępu.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Cztery funkcje jedno działanie Cały skrypt nie zawsze musi się znajdować w jednym pliku. Jeśli budujemy rozbudowany serwis, na pewno są w nim elementy, które powtarzają się we wszystkich zbiorach. Nie muszą być one umieszczane w każdym pliku ze skryptem wystarczy stworzyć jeden plik z daną funkcją lub klasą i załączać go do pozostałych. Służą temu cztery funkcje w PHP na pierwszy rzut oka identyczne, ale różniące się kilkoma szczegółami. include() require() include_once() require_once()
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Najbardziej znane: include() i require() Generują inne rodzaje błędów. Include() wyświetla przy braku danego pliku błąd warning. Można go wyciszyć operatorem @ i jeśli plik nie jest niezbędny do działania skryptu, nikt nawet nie zauważy, że coś jest nie tak. Inaczej zachowuje się require(), generując błąd fatal error, który zatrzymuje działanie skryptu, nawet jeśli umieścimy przed nim @. Używajmy require() tylko wtedy, gdy plik jest niezbędny do poprawnego działania skryptu.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Najbardziej znane: include() i require() Plik załączany poprzez include() jest wczytywany i załączany, gdy wykonywana jest linia z instrukcją, a wszystkie zmienne dostępne we wczytanym pliku będą dostępne w pliku głównym dopiero od miejsca, gdzie znajduje się instrukcja include(). Jeśli plik zostanie includowany wewnątrz deklaracji funkcji, to wszystkie zmienne w nim zawarte staną się zmiennymi dostępnymi tylko z wewnątrz tej funkcji. Dla odmiany require() od razu próbuje wczytać żądany plik, nawet jeśli jego wywołanie znajduje się w instrukcji warunkowej (może nie zostać wywołane). Ponadto jeśli funkcja require() znajduje się w pętli, to niezależnie od tego, ile razy byłaby wywoływana, plik zostanie wczytany tylko raz.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Ograniczenia include() i require() w PHP w wersjach starszych niż 4.3.0 pod kontrolą systemu Windows ani include(), ani require() nie mają możliwości wczytania plików ze zdalnych serwerów, w pętlach, instrukcjach warunkowych itp. include() i require() muszą być zamykane w nawiasach klamrowych, nawet jeśli są jedynymi instrukcjami. Pamiętajmy, że include() i require() to jedyne instrukcje, która są zamieniane na blok kodu z wczytanego pliku.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Ograniczenia include() i require() NIEpoprawny zapis: <?php if ($a>5) else?> include ("plik1.php"); include ("plik2.php"); Poprawny zapis: <?php?> if ($a>5){ include ("plik1.php"); } else{ include ("plik2.php");}
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Młodsi bracia: include_once() i require_once() Te dwie funkcje dodano w PHP 4.0.1. Działają podobnie jak include() i require(), z tą jedną różnicą, że nawet wielokrotne wywołanie includowania danego pliku poprzez include_once() lub require_once() nie spowoduje wczytania go kilkakrotnie. Rozwiązuje to problem przypadkowego redefiniowania funkcji lub nadpisywania zmiennych przez powtórne wczytanie pliku. Pamiętajmy, że w systemach nierozróżniających wielkości znaków np. Windows poniższy kod spowoduje dwukrotne wczytanie pliku a.php. <?php require_once("a.php"); require_once("a.php");?> //wczyta a.php //a Windows znowu wczyta a.php
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Przekazywanie zmiennych Istnieją dwa sposoby na przekazanie zmiennej między dwoma plikami PHP metody GET i POST. Metoda GET - za pomocą metody GET można przekazać kilka zmiennych, przechowujących małą ilość danych. GET polega na wywołaniu pliku PHP z dodaniem po jego nazwie następującej części:?zmienna1=wartosc1&zmienna2=wartosc2&zmienna3=wartosc3 Oczywiście nazwy zmiennych i ich liczba może być dowolna. Jedynym ograniczeniem jest tutaj to, że większość starszych przeglądarek akceptuje adresy tylko do 1024 znaków. Ale metoda GET to nie tylko same plusy. Należy pamiętać, że wysyłanie zmiennych widocznych w URL prowadzi do sytuacji, w której ktoś może łatwo podmienić ich wartość i np. odczytać plik z hasłami umieszczony na serwerze.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Przekazywanie zmiennych Metoda POST - służy raczej do przekazywania dużej liczby zmiennych przy zachowaniu podstawowych zasad poufności. Nazwy zmiennych i ich wartości nie są bowiem widoczne, ponieważ są wysyłane jako część nagłówka pliku. Minusem tej metody jest to, że strony z wysłanymi danymi metodą POST nie można np. dodać do Ulubionych.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Odzyskać zmienną Zmienne przekazane jako POST lub GET trafiają w najnowszych i tych trochę starszych wersjach PHP (od 4.10) do tablic superglobalnych $_POST, $_GET, $_REQUEST, $_SESSION, $_ENV, $_SERVER oraz $_COOKIE. Wykorzystywane dotychczas tablice o długich nazwach $HTTP_*_VARS są nadal dostępne, aczkolwiek niezalecane w użyciu. Jednocześnie wycofywana jest obsługa registered_globals, co oznacza, że każda zmienna niezależnie, czy z metody GET, POST czy z sesji nie jest już rejestrowana po prostu jako zmienna. Dotychczas było to niebezpieczne i stwarzało możliwości oszukiwania skryptu. Tablice superglobalne, o których wspomnieliśmy ($_GET, $_POST i inne), są asocjacyjne i nazwą danego klucza jest nazwa zmiennej, a wartością wartość tej zmiennej.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Poniżej znajdują się tablice superglobalne dostępne w PHP od wersji 4.10. $GLOBALS $_POST $_GET przechowuje wszystkie zmienne globalne w skrypcie, wszystkie zmienne wysłane metodą POST, wszystkie zmienne wysłane metodą GET, $_SERVER zmienne tworzone przez serwer lub środowisko uruchamiania skryptu, $_ENV $_COOKIE zmienne tworzone przez środowisko wykonywania skryptu, przechowuje zmienne pochodzące z ciasteczek, $_REQUEST przechowuje zmienne dostarczane przez różne mechanizmy wejścia ($_GET, $_POST, $_ENV, $_COOKIE) razem. Nie jest bezpieczna, ponieważ nie wyszczególnia tego, skąd pochodzi dana zmienna, $_SESSION $_FILES przechowuje zmienne pochodzące z sesji, przechowuje pliki wgrane na serwer poprzez formularz.
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Odzyskać zmienną Przykład formularza wysyłającego dane o użytkowniku do innego pliku. plik formularz.html: <form action="dane.php" method="post"> <input type="text" name="imie" size="15" /><br /> <input type="text" name="nazwisko" size="16" /><br /> <input type="radio" name="plec" value="m" /> Mężczyzna<br /> <input type="radio" name="plec" value="k" /> Kobieta<br /> <input type="submit" value="wyślij dane" /><br /> </form>
ZAŁĄCZANIE ZEWNĘTRZNYCH PLIKÓW Odzyskać zmienną plik dane.php: <?php echo "Witaj ".$_POST['imie']." ".$_POST['nazwisko']."<br />"; echo "Jesteś ".(($_POST['plec']=="m")?"mężczyzną":"kobietą )." <br />";?> Plik dane.php pokaże wpisane imię i nazwisko oraz wyświetli płeć w zależności od wartości zmiennej $_POST['plec'].
CIASTECZKA Cookies, czyli tzw. ciasteczka, to małe pliki tekstowe przechowywane na komputerze odbiorcy, w których przetrzymywane są informacje np. o dacie jego ostatniej wizyty lub jego nazwie użytkownika na forum. PHP ma możliwość zapisu ciasteczek dzięki funkcji setcookie(). setcookie(nazwa_zmiennej, wartosc_zmiennej, czas_wygaśnięcia, ścieżka, domena, bezpieczeństwo). Domyślnie w ciastkach zapisuje się tylko ciągi znaków. Istnieje jednak możliwość umieszczenia również całej tablicy zapełnionej danymi. Służy do tego funkcja serialize(), która jako parametr pobiera tablicę, a zwraca przekonwertowany ciąg znaków. Odwrotną operację wykonuje funkcja unserialize(), która pobiera ciąg znaków (tablicę zamienioną funkcją serialize()), a zwraca zmienną z tablicą.
CIASTECZKA Czas wygaśnięcia to czas, po którym ciastko nie będzie dostępne do odczytu. Podaje się go w formacie timestamp. Przykładowa wartość, jaką można wpisać do czasu_wygasniecia, to np.: time()+3600 time()+3600*24 - (ważne godzinę od czasu ustawienia ciastka), - (ważne dobę) time()+3600*24*365 - (ważne cały rok). Jeśli czas nie zostanie podany, to ciastko będzie ważne do zamknięcia przeglądarki. Ścieżka i domena określa kolejno ścieżkę na serwerze i domenę, z których ciastko może zostać odczytane. Jeśli wartość bezpieczenstwo wyniesie 1, to ciastko będzie można odczytać, tylko jeśli połączenie będzie szyfrowane (połączenie SSL).
ZADANIE Zbudować stronę z wykorzystaniem warstw pozwalającą na wczytywanie plików poszczególne elementy strony takie jak: nagłówek stopka menu nawigacja Nagłówek [PL][EN] Menu centrum Stopka
ZADANIE STRUKTURA KATALOGÓW public_html css style.css plik ze stylami config index.php plik/pliki z danymi konfiguracyjnymi (wersje językowe itp.) include (struktura katalogu na następnym slajdzie) index.php plik z szablonem strony
ZADANIE STRUKTURA KATALOGÓW - INCLUDE include menu index.php menu główne strony content mainpage index.php strona główna contact index.php formularz kontaktowy (inne pliki wyświetlane z menu strony) index.php plik pozwalający na wczytanie właściwego pliku navi index.php plik z wyborem wersji językowej strony header index.php plik z trescią nagłówka footer index.php plik z treścią stopki