PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4


PHP i MySQL. Tworzenie stron WWW.
Vademecum profesjonalisty
Wydanie czwarte
Autorzy: Luke Welling, Laura Thomson
TÅ‚umaczenie: 978-83-246-0821-8
ISBN: 83-7197-641-0
Tytuł oryginału: PHP and MySQL Web
Development, Fourth Edition
Format: 172×245, stron: 856
Kolejne, uaktualnione wydanie najbardziej znanego, bestsellerowego podręcznika dla
webmasterów na temat tworzenia dynamicznych witryn internetowych! Ponad 30 000
sprzedanych egzemplarzy poprzednich wydań!!! Recepta na sukces w przypadku
tworzenia profesjonalnych stron WWW jest niezwykle prosta: wystarczÄ… ogromne
możliwoSci PHP, niezrównana wydajnoSć MySQL i wielka, chętna do pomocy społecznoSć,
skupiona wokół tego tandemu. Wynik? Błyskawiczna realizacja zaawansowanych stron
i aplikacji internetowych. Wszystko, czego Ci jeszcze trzeba, to fachowa wiedza,
pozwalająca wykorzystać ten potencjał!
PHP i MySQL to jeden z najlepszych, najpopularniejszych zestawów do tworzenia
rozwiązań internetowych, a książka, którą trzymasz w rękach, to czwarte wydanie
bestsellerowego i kultowego już kompendium wiedzy na temat tych narzędzi. Dzięki niej
zorientujesz się w każdym z aspektów wykorzystania PHP wraz z bazą danych MySQL.
Poznasz język PHP, metody przechowywania i wyszukiwania danych oraz operacje na
plikach. Dowiesz się, jak tworzyć uniwersalny kod i sprawnie pracować z bazą danych.
Nauczysz się szybko lokalizować i rozwiązywać problemy oraz zapewniać bezpieczeństwo
aplikacjom, a także efektywnie stosować technologię AJAX. Podręcznik zawiera także
mnóstwo praktycznych przykładów, demonstrujących wykorzystanie PHP i MySQL do
realizacji różnych zadań związanych z funkcjonowaniem dynamicznych witryn WWW.
" Wybrane zalety PHP i MySQL
" Podstawy języka PHP
" Metody przechowywania i wyszukiwania danych
" Operacje na plikach
" Zastosowanie tablic
" Wykorzystanie wyrażeń regularnych oraz operacje na ciągach znaków
" Tworzenie uniwersalnego kodu -- ponowne jego wykorzystanie
" Obiekty w PHP
" Obsługa wyjątków i błędów
" Praca z bazÄ… danych MySQL
" Nawiązywanie połączenia z bazą z poziomu PHP
" Administracja MySQL
" Zaawansowane zagadnienia, zwiÄ…zane z bazÄ… MySQL
" Zapewnienie bezpieczeństwa tworzonym rozwiązaniom
" Metody uwierzytelniania przy użyciu PHP i MySQL
" Wykorzystanie protokołów i funkcji sieci
" Generowanie grafik
" Wykorzystanie sesji
" Obsługa poczty elektronicznej za pomocą PHP
" Użycie technologii AJAX
Kultowe kompendium wiedzy na temat tworzenia dynamicznych witryn!
Spis tre ci
O autorach ............................................................................................ 23
O wspó autorach .................................................................................. 25
Wprowadzenie ...................................................................................... 27
Cz I Stosowanie PHP ..................................................................37
Rozdzia 1. Podstawowy kurs PHP ........................................................................... 39
Zastosowanie PHP ...............................................................................................................40
Tworzenie przyk adowej aplikacji:  Cz ci samochodowe Janka .....................................40
Formularz zamówienia ..................................................................................................40
Przetwarzanie formularza ..............................................................................................41
Osadzanie PHP w HTML ....................................................................................................42
Zastosowanie znaczników PHP .....................................................................................43
Instrukcje PHP ..............................................................................................................44
Odst py .........................................................................................................................44
Komentarze ...................................................................................................................45
Dodawanie zawarto ci dynamicznej ....................................................................................45
Wywo ywanie funkcji ...................................................................................................46
U ywanie funkcji date() ................................................................................................46
Dost p do zmiennych formularza ........................................................................................47
Zmienne formularza ......................................................................................................47
czenie ci gów ............................................................................................................49
Zmienne i ci gi znaków ................................................................................................50
Identyfikatory ......................................................................................................................51
Typy zmiennych ..................................................................................................................51
Typy danych w PHP ......................................................................................................51
Si a typu ........................................................................................................................52
Rzutowanie typu ............................................................................................................52
Zmienne zmiennych ......................................................................................................53
Deklarowanie i u ywanie sta ych ........................................................................................53
Zasi g zmiennych ................................................................................................................54
U ywanie operatorów ..........................................................................................................55
Operatory arytmetyczne ................................................................................................55
Operatory ci gów ..........................................................................................................56
Operatory przypisania ...................................................................................................56
Operatory porówna ......................................................................................................58
Operatory logiczne ........................................................................................................59
Operatory bitowe ...........................................................................................................60
Pozosta e operatory .......................................................................................................60
8 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Obliczanie sum w formularzu ..............................................................................................62
Pierwsze stwo i kolejno ...................................................................................................63
Zarz dzanie zmiennymi .......................................................................................................65
Sprawdzanie i ustawianie typów zmiennych .................................................................65
Sprawdzanie stanu zmiennej .........................................................................................66
Reinterpretacja zmiennych ............................................................................................67
Podejmowanie decyzji za pomoc instrukcji warunkowych ...............................................67
Instrukcja if ...................................................................................................................67
Bloki kodu .....................................................................................................................68
Instrukcja else ...............................................................................................................68
Instrukcja elseif .............................................................................................................69
Instrukcja switch ...........................................................................................................69
Porównanie ró nych instrukcji warunkowych ...............................................................71
Powtarzanie dzia a przy u yciu iteracji .............................................................................71
P tle while .....................................................................................................................72
P tle for i foreach ..........................................................................................................73
P tle do..while ...............................................................................................................74
Wy amywanie si ze struktury skryptu ................................................................................75
U ywanie alternatywnych sk adni struktur steruj cych .......................................................75
U ywanie struktury declare .................................................................................................76
W nast pnym rozdziale .......................................................................................................76
Rozdzia 2. Przechowywanie i wyszukiwanie danych .......................................... 77
Zapisywanie danych do pó niejszego u ycia ......................................................................77
Przechowywanie i wyszukiwanie zamówie Janka .............................................................78
Przetwarzanie plików ..........................................................................................................79
Otwieranie pliku ..................................................................................................................79
Tryby otwarcia pliku .....................................................................................................79
Stosowanie funkcji fopen() do otwarcia pliku ...............................................................80
Otwieranie pliku przez protokó FTP lub HTTP ...........................................................82
Problemy z otwieraniem plików ....................................................................................82
Zapisywanie danych w pliku ...............................................................................................84
Parametry funkcji fwrite() .............................................................................................85
Formaty plików .............................................................................................................85
Zamykanie pliku ..................................................................................................................86
Odczyt z pliku .....................................................................................................................87
Otwieranie pliku w celu odczytu  fopen() .................................................................89
Wiedzie , kiedy przesta  feof() ................................................................................89
Odczytywanie pliku wiersz po wierszu  fgets(), fgetss() i fgetcsv() ..........................89
Odczyt ca ego pliku  readfile(), fpassthru(), file() .....................................................90
Odczyt pojedynczego znaku  fgetc() .........................................................................91
Odczytywanie zadanej d ugo ci  fread() ....................................................................91
Inne przydatne funkcje plikowe ...........................................................................................91
Sprawdzanie istnienia pliku  file_exists() ..................................................................92
Okre lanie wielko ci pliku  filesize() ........................................................................92
Kasowanie pliku  unlink() .........................................................................................92
Poruszanie si wewn trz pliku  rewind(), fseek() i ftell() ..........................................92
Blokowanie pliku ................................................................................................................93
Lepszy sposób obróbki danych  systemy zarz dzania bazami danych ...........................94
Problemy zwi zane ze stosowaniem plików jednorodnych ...........................................95
Jak RDBMS rozwi zuj powy sze problemy? ..............................................................95
Propozycje dalszych lektur ..................................................................................................96
W nast pnym rozdziale .......................................................................................................96
Spis tre ci 9
Rozdzia 3. Stosowanie tablic .................................................................................. 97
Czym s tablice? ..................................................................................................................97
Tablice indeksowane numerycznie ......................................................................................98
Inicjowanie tablic indeksowanych numerycznie ...........................................................98
Dost p do zawarto ci tablicy .........................................................................................99
Dost p do tablic przy zastosowaniu p tli ....................................................................100
Tablice z innymi indeksami ...............................................................................................100
Inicjowanie tablicy ......................................................................................................100
Dost p do elementów tablicy ......................................................................................101
Stosowanie p tli ..........................................................................................................101
Operatory tablicowe ..........................................................................................................103
Tablice wielowymiarowe ..................................................................................................103
Sortowanie tablic ...............................................................................................................106
Stosowanie funkcji sort() ............................................................................................106
Stosowanie funkcji asort() i ksort() do porz dkowania tablic .....................................107
Sortowanie odwrotne ...................................................................................................107
Sortowanie tablic wielowymiarowych ...............................................................................108
Typy sortowa definiowane przez u ytkownika .........................................................108
Odwrotne sortowanie zdefiniowane przez u ytkownika .............................................109
Zmiany kolejno ci elementów w tablicach ........................................................................110
Stosowanie funkcji shuffle() .......................................................................................110
Stosowanie funkcji array_reverse() .............................................................................111
adowanie tablic z plików .................................................................................................112
Wykonywanie innych dzia a na tablicach ........................................................................114
Poruszanie si wewn trz tablicy
 funkcje each(), current(), reset(), end(), next(), pos() i prev() .............................114
Do czanie dowolnej funkcji do ka dego elementu tablicy  funkcja array_walk() ....115
Liczenie elementów tablicy: count(), sizeof() i array_count_values() .........................116
Konwersja tablic na zmienne skalarne  funkcja extract() ........................................117
Propozycje dalszych lektur ................................................................................................118
W nast pnym rozdziale .....................................................................................................118
Rozdzia 4. Manipulowanie ci gami i wyra enia regularne .............................. 119
Przyk adowa aplikacja  Inteligentny Formularz Pocztowy ...........................................119
Formatowanie ci gów .......................................................................................................121
Przycinanie ci gów  funkcje chop(), ltrim() i trim() ................................................121
Formatowanie ci gów w celu ich prezentacji ..............................................................122
Formatowanie ci gów do przechowania  funkcje addslashes() i stripslashes() ......125
czenie i rozdzielanie ci gów za pomoc funkcji ci gów ...............................................127
Stosowanie funkcji explode(), implode() i join() .........................................................127
Stosowanie funkcji strtok() .........................................................................................128
Stosowanie funkcji substr() .........................................................................................128
Porównywanie ci gów .......................................................................................................129
Porz dkowanie ci gów  funkcje strcmp(), strcasecmp() i strnatcmp() ....................129
Sprawdzanie d ugo ci ci gu za pomoc funkcji strlen() ..............................................130
Dopasowywanie i zamiana podci gów za pomoc funkcji ci gów ...................................130
Znajdowanie ci gów w ci gach  funkcje strstr(), strchr(), strrchr() i stristr() ..........131
Odnajdywanie pozycji podci gu  funkcje strpos() i strrpos() ..................................131
Zamiana podci gów  funkcje str_replace() i substr_replace() .................................132
Wprowadzenie do wyra e regularnych ............................................................................133
Podstawy .....................................................................................................................133
Zbiory i klasy znaków .................................................................................................134
Powtarzalno .............................................................................................................135
Podwyra enia ..............................................................................................................135
Podwyra enia policzalne .............................................................................................135
10 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Kotwiczenie na pocz tku lub na ko cu ci gu ..............................................................136
Rozga zianie ..............................................................................................................136
Dopasowywanie specjalnych znaków literowych .......................................................136
Podsumowanie znaków specjalnych ...........................................................................137
Umieszczanie wszystkiego razem (Inteligentny Formularz) .......................................137
Odnajdywanie podci gów za pomoc wyra e regularnych .............................................138
Zamiana podci gów za pomoc wyra e regularnych ......................................................139
Rozdzielanie ci gów za pomoc wyra e regularnych .....................................................139
Propozycje dalszych lektur ................................................................................................140
W nast pnym rozdziale .....................................................................................................140
Rozdzia 5. Ponowne wykorzystanie kodu i tworzenie funkcji ........................... 141
Zalety ponownego stosowania kodu ..................................................................................141
Koszt ...........................................................................................................................142
Niezawodno .............................................................................................................142
Spójno ......................................................................................................................142
Stosowanie funkcji require() i include() ............................................................................142
Rozszerzenia plików i require() ...................................................................................143
Stosowanie require() w szablonach stron WWW ..............................................................144
Stosowanie opcji auto_prepend_file i auto_append_file .............................................148
Stosowanie funkcji w PHP ................................................................................................149
Wywo ywanie funkcji .................................................................................................149
Wywo anie niezdefiniowanej funkcji ..........................................................................151
Wielko liter a nazwy funkcji ....................................................................................152
Definiowanie w asnych funkcji .........................................................................................152
Podstawowa struktura funkcji ...........................................................................................152
Nadawanie nazwy funkcji ...........................................................................................153
Parametry ..........................................................................................................................154
Zasi g ................................................................................................................................156
Przekazanie przez referencj czy przekazanie przez warto ? ..........................................158
Stosowanie s owa kluczowego return ................................................................................159
Zwracanie warto ci przez funkcje .....................................................................................160
Implementacja rekurencji ..................................................................................................161
Przestrzenie nazw ........................................................................................................162
Propozycje dalszych lektur ................................................................................................163
W nast pnym rozdziale .....................................................................................................163
Rozdzia 6. Obiektowy PHP .................................................................................... 165
Koncepcje programowania obiektowego ...........................................................................165
Klasy i obiekty ............................................................................................................166
Polimorfizm ................................................................................................................167
Dziedziczenie ..............................................................................................................167
Tworzenie klas, atrybutów i operacji w PHP .....................................................................168
Struktura klasy ............................................................................................................168
Konstruktory ...............................................................................................................168
Destruktory ..................................................................................................................169
Tworzenie egzemplarzy .....................................................................................................169
Stosowanie atrybutów klasy ..............................................................................................170
Kontrolowanie dost pu przy u yciu private i public .........................................................172
Wywo ywanie operacji klas ...............................................................................................172
Implementacja dziedziczenia w PHP .................................................................................173
Kontrolowanie widoczno ci w trakcie dziedziczenia przy u yciu private i protected .174
Uniewa nianie .............................................................................................................175
Zapobieganie dziedziczeniu i uniewa nianiu przy u yciu final ..................................176
Wielodziedziczenie .....................................................................................................177
Implementowanie interfejsów .....................................................................................177
Spis tre ci 11
Tworzenie klas ..................................................................................................................178
Tworzenie kodu dla w asnej klasy .....................................................................................179
Zaawansowane mechanizmy obiektowe w PHP ................................................................186
U ywanie sta ych klasowych ......................................................................................186
Implementowanie metod statycznych .........................................................................186
Sprawdzanie typu klasy i wskazywanie typu ..............................................................186
Pó ne wi zania statyczne ............................................................................................187
Klonowanie obiektów .................................................................................................188
U ywanie klas abstrakcyjnych ....................................................................................188
Przeci anie metod przy u yciu __call() .....................................................................188
U ywanie metody __autoload() ..................................................................................189
Implementowanie iteratorów i iteracji .........................................................................190
Przekszta canie klas w a cuchy znaków ....................................................................191
U ywanie API Reflection ............................................................................................192
W nast pnym rozdziale .....................................................................................................192
Rozdzia 7. Obs uga b dów i wyj tków .............................................................. 195
Koncepcja obs ugi wyj tków .............................................................................................195
Klasa Exception .................................................................................................................196
Wyj tki definiowane przez u ytkownika ..........................................................................197
Wyj tki w Cz ciach samochodowych Janka ....................................................................200
Wyj tki i inne mechanizmy obs ugi b dów w PHP ..........................................................202
Propozycje dalszych lektur ................................................................................................203
W nast pnym rozdziale .....................................................................................................203
Cz II Stosowanie MySQL ...........................................................205
Rozdzia 8. Projektowanie internetowej bazy danych ........................................ 207
Koncepcje relacyjnych baz danych ...................................................................................208
Tabele ..........................................................................................................................208
Kolumny .....................................................................................................................208
Wiersze .......................................................................................................................208
Warto ci ......................................................................................................................208
Klucze .........................................................................................................................209
Schematy .....................................................................................................................209
Relacje .........................................................................................................................210
Jak zaprojektowa internetow baz danych? ...................................................................211
Okre l obiekty wiata realnego, których model chcesz wykona ................................211
Unikaj przechowywania redundantnych danych .........................................................211
Zapisuj atomowe warto ci kolumn ..............................................................................213
Dobierz w a ciwe klucze .............................................................................................214
Pomy l o zapytaniach, które zadasz bazie ...................................................................214
Unikaj tworzenia tabel z wieloma pustymi polami .....................................................214
Typy tabel  podsumowanie ......................................................................................215
Architektura internetowej bazy danych .............................................................................215
Propozycje dalszych lektur ................................................................................................216
W nast pnym rozdziale .....................................................................................................216
Rozdzia 9. Tworzenie internetowej bazy danych ............................................... 217
U ytkowanie monitora MySQL ........................................................................................218
Logowanie si do serwera MySQL ...................................................................................219
Tworzenie baz i rejestrowanie u ytkowników ..................................................................220
Definiowanie u ytkowników i przywilejów ......................................................................220
12 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Wprowadzenie do systemu przywilejów MySQL .............................................................221
Zasada najmniejszego przywileju ................................................................................221
Rejestrowanie u ytkowników: polecenie GRANT ......................................................221
Typy i poziomy przywilejów ......................................................................................223
Polecenie REVOKE ....................................................................................................224
Przyk ady u ycia polece GRANT i REVOKE ..........................................................225
Rejestrowanie u ytkownika cz cego si z internetu .......................................................226
U ywanie odpowiedniej bazy danych ...............................................................................226
Tworzenie tabel bazy danych ............................................................................................227
Znaczenie dodatkowych atrybutów kolumn ................................................................228
Typy kolumn ...............................................................................................................229
Rzut oka na baz danych  polecenia SHOW i DESCRIBE .....................................231
Tworzenie indeksów ...................................................................................................232
Identyfikatory MySQL ......................................................................................................232
Wybór typów danych w kolumnach ..................................................................................233
Typy liczbowe .............................................................................................................233
Propozycje dalszych lektur ................................................................................................236
W nast pnym rozdziale .....................................................................................................237
Rozdzia 10. Praca z baz danych MySQL ............................................................. 239
Czym jest SQL? ................................................................................................................239
Zapisywanie danych do bazy .............................................................................................240
Wyszukiwanie danych w bazie ..........................................................................................242
Wyszukiwanie danych spe niaj cych okre lone kryteria ............................................243
Wyszukiwanie danych w wielu tabelach .....................................................................245
Szeregowanie danych w okre lonym porz dku ...........................................................249
Grupowanie i agregowanie danych .............................................................................250
Wskazanie wierszy, które maj by wy wietlone .......................................................252
U ywanie podzapyta .................................................................................................252
Dokonywanie zmian rekordów w bazie danych ................................................................255
Zmiana struktury istniej cych tabel ...................................................................................255
Usuwanie rekordów z bazy danych ...................................................................................257
Usuwanie tabel ..................................................................................................................257
Usuwanie ca ych baz danych .............................................................................................258
Propozycje dalszych lektur ................................................................................................258
W nast pnym rozdziale .....................................................................................................258
Rozdzia 11. czenie si z baz MySQL za pomoc PHP .................................... 259
Jak dzia a internetowa baza danych? .................................................................................259
Wykonywanie zapyta do bazy danych z poziomu strony WWW ....................................262
Sprawdzenie poprawno ci wpisanych danych .............................................................263
Ustanawianie po czenia z baz danych ......................................................................264
Wybór w a ciwej bazy danych ....................................................................................265
Wysy anie zapyta do bazy danych ............................................................................265
Odczytywanie rezultatów zapyta ...............................................................................266
Zamykanie po czenia z baz danych .........................................................................267
Wstawianie nowych danych do bazy .................................................................................267
U ywanie instrukcji przygotowywanych ...........................................................................270
U ywanie innych interfejsów bazodanowych PHP ...........................................................272
Stosowanie ogólnego interfejsu bazodanowego: PEAR MDB2 ..................................272
Propozycje dalszych lektur ................................................................................................274
W nast pnym rozdziale .....................................................................................................274
Spis tre ci 13
Rozdzia 12. Administrowanie MySQL dla zaawansowanych .............................. 275
Szczegó y systemu przywilejów ........................................................................................275
Tabela user ..................................................................................................................276
Tabele db i host ...........................................................................................................278
Tabele tables_priv, columns_priv i procs_priv ...........................................................278
Kontrola dost pu: w jaki sposób MySQL u ywa tabel przywilejów ...........................279
Zmiana przywilejów: kiedy zmiany zostan uwzgl dnione? ......................................281
Ochrona bazy danych ........................................................................................................282
MySQL z perspektywy systemu operacyjnego ...........................................................282
Has a ...........................................................................................................................282
Przywileje u ytkowników ...........................................................................................283
MySQL i internet ........................................................................................................283
Uzyskiwanie szczegó owych informacji o bazie danych ...................................................284
Uzyskiwanie informacji poleceniem SHOW ...............................................................284
Uzyskiwanie informacji o kolumnach za pomoc polecenia DESCRIBE ...................286
Jak wykonywane s zapytania: polecenie EXPLAIN ..................................................286
Optymalizowanie bazy danych ..........................................................................................291
Optymalizacja projektu bazy danych ..........................................................................291
Przywileje ....................................................................................................................291
Optymalizacja tabel .....................................................................................................291
Stosowanie indeksów ..................................................................................................292
U ywanie warto ci domy lnych ..................................................................................292
Wi cej wskazówek ......................................................................................................292
Tworzenie kopii zapasowej bazy danych MySQL ............................................................292
Przywracanie bazy danych MySQL ..................................................................................293
Implementowanie replikacji ..............................................................................................293
Konfigurowanie serwera nadrz dnego ........................................................................294
Transfer danych pocz tkowych ...................................................................................294
Konfigurowanie odbiorcy lub odbiorców ....................................................................295
Propozycje dalszych lektur ................................................................................................296
W nast pnym rozdziale .....................................................................................................296
Rozdzia 13. Zaawansowane programowanie w MySQL ...................................... 297
Instrukcja LOAD DATA INFILE .....................................................................................297
Maszyny zapisu .................................................................................................................298
Transakcje .........................................................................................................................299
Definicje dotycz ce transakcji .....................................................................................299
U ycie transakcji w InnoDB .......................................................................................300
Klucze obce .......................................................................................................................301
Procedury sk adowane .......................................................................................................302
Prosty przyk ad ............................................................................................................302
Zmienne lokalne ..........................................................................................................304
Kursory i struktury steruj ce .......................................................................................305
Propozycje dalszych lektur ................................................................................................308
W nast pnym rozdziale .....................................................................................................308
Cz III E-commerce i bezpiecze stwo ......................................309
Rozdzia 14. Komercyjne witryny internetowe ....................................................... 311
Co chcemy osi gn ? ........................................................................................................311
Rodzaje komercyjnych stron WWW .................................................................................311
Publikowanie informacji w broszurach internetowych ................................................312
Przyjmowanie zamówie na produkty i us ugi ............................................................315
Dostarczanie us ug lub wyrobów maj cych posta cyfrow .......................................319
14 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Zwi kszanie warto ci produktów i us ug ....................................................................319
Ograniczanie kosztów .................................................................................................320
Ryzyko i zagro enia ..........................................................................................................320
Crackerzy ....................................................................................................................321
Przyci gni cie niewystarczaj cej liczby klientów .......................................................321
Awarie sprz tu komputerowego ..................................................................................322
Awarie sieci elektrycznych, komunikacyjnych i komputerowych
oraz systemu wysy kowego ......................................................................................322
Silna konkurencja ........................................................................................................322
B dy w oprogramowaniu ...........................................................................................323
Zmiany polityki rz dowej ...........................................................................................323
Ograniczenie pojemno ci systemów ...........................................................................323
Wybór strategii ..................................................................................................................323
W nast pnym rozdziale .....................................................................................................324
Rozdzia 15. Bezpiecze stwo komercyjnych stron WWW ..................................... 325
Jak wag maj posiadane przez nas informacje? .............................................................326
Zagro enia bezpiecze stwa ...............................................................................................326
Ujawnienie informacji poufnych .................................................................................327
Utrata lub zniszczenie danych .....................................................................................328
Modyfikacje danych ....................................................................................................329
Blokada us ugi .............................................................................................................330
B dy w oprogramowaniu ...........................................................................................331
Zaprzeczenie korzystania z us ugi ...............................................................................332
U yteczno , wydajno , koszty i bezpiecze stwo ...........................................................333
Opracowanie polityki bezpiecze stwa ...............................................................................333
Zasady uwierzytelniania ....................................................................................................334
Podstawy szyfrowania .......................................................................................................335
Szyfrowanie z kluczem prywatnym ............................................................................336
Szyfrowanie z kluczem publicznym ............................................................................337
Podpis cyfrowy ............................................................................................................338
Certyfikaty cyfrowe ...........................................................................................................339
Bezpieczne serwery WWW ...............................................................................................339
Monitorowanie i zapisywanie zdarze ..............................................................................340
Zapory sieciowe ................................................................................................................341
Tworzenie kopii zapasowych ............................................................................................342
Tworzenie kopii zapasowych zwyk ych plików ..........................................................342
Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL .............................342
Bezpiecze stwo fizyczne ...................................................................................................343
W nast pnym rozdziale .....................................................................................................343
Rozdzia 16. Bezpiecze stwo aplikacji internetowych ......................................... 345
Strategie zapewniania bezpiecze stwa ..............................................................................345
Planowanie z wyprzedzeniem .....................................................................................346
Równowaga mi dzy bezpiecze stwem i u yteczno ci ..............................................346
Monitorowanie bezpiecze stwa ..................................................................................347
Ogólne podej cie do bezpiecze stwa ..........................................................................347
Rozpoznawanie zagro e ..................................................................................................347
Dost p do danych poufnych i ich modyfikowanie ......................................................347
Utrata lub zniszczenie danych .....................................................................................348
Zablokowanie us ugi ...................................................................................................348
Wstrzykiwanie kodu ....................................................................................................349
Z amanie zabezpiecze dost pu do serwera ................................................................349
Identyfikacja u ytkowników .............................................................................................349
Crackerzy ....................................................................................................................350
Nie wiadomi u ytkownicy zainfekowanych komputerów ..........................................350
Spis tre ci 15
Rozczarowani pracownicy ..........................................................................................350
Z odzieje sprz tu komputerowego ..............................................................................350
Autorzy systemów .......................................................................................................350
Zabezpieczanie kodu ród owego ......................................................................................351
Filtrowanie danych pochodz cych od u ytkowników .................................................351
Uniewa nianie danych wynikowych ...........................................................................355
Organizacja kodu ród owego .....................................................................................356
Zawarto kodu ród owego .......................................................................................357
Zagadnienia dotycz ce systemu plików ......................................................................358
Stabilno kodu i b dy ...............................................................................................358
Apostrofy wykonywania polece systemu operacyjnego i polecenie exec .................359
Zabezpieczanie serwera WWW oraz PHP .........................................................................360
Regularne uaktualnianie oprogramowania ..................................................................361
Analiza ustawie w pliku php.ini ................................................................................362
Konfiguracja serwera WWW ......................................................................................362
Aplikacje internetowe dzia aj ce na serwerach komercyjnych ...................................364
Bezpiecze stwo serwera bazy danych ...............................................................................365
U ytkownicy i system uprawnie ...............................................................................365
Wysy anie danych do serwera .....................................................................................366
czenie si z serwerem ..............................................................................................366
Praca serwera ..............................................................................................................367
Zabezpieczanie sieci ..........................................................................................................367
Instalacja zapory sieciowej ..........................................................................................368
Wykorzystanie strefy zdemilitaryzowanej ..................................................................368
Przygotowanie na ataki DoS i DDoS ..........................................................................369
Bezpiecze stwo komputerów i systemów operacyjnych ...................................................369
Uaktualnianie systemu operacyjnego ..........................................................................369
Udost pnianie tylko niezb dnych us ug ......................................................................370
Fizyczne zabezpieczenie serwera ................................................................................370
Planowanie dzia a na wypadek awarii .............................................................................371
W nast pnym rozdziale .....................................................................................................372
Rozdzia 17. Uwierzytelnianie przy u yciu PHP i MySQL ........................................ 373
Identyfikacja u ytkowników .............................................................................................373
Implementacja kontroli dost pu ........................................................................................374
Przechowywanie hase dost pu ...................................................................................376
Szyfrowanie hase .......................................................................................................378
Zastrzeganie wi cej ni jednej strony ..........................................................................379
Podstawowa metoda uwierzytelniania ...............................................................................380
Wykorzystanie podstawowej metody uwierzytelniania w PHP .........................................381
Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache
przy u yciu plików .htaccess ..........................................................................................383
Wykorzystanie modu u mod_auth_mysql do celów uwierzytelniania ...............................386
Instalacja modu u mod_auth_mysql ............................................................................386
Praca z mod_auth_mysql ............................................................................................387
Implementacja w asnej metody uwierzytelniania ..............................................................388
Propozycje dalszych lektur ................................................................................................388
W nast pnym rozdziale .....................................................................................................389
Rozdzia 18. Zabezpieczanie transakcji przy u yciu PHP i MySQL ....................... 391
Zapewnienie bezpiecze stwa transakcji ............................................................................391
Komputer u ytkownika ...............................................................................................392
Internet ........................................................................................................................393
System docelowy ........................................................................................................394
Wykorzystanie protoko u Secure Sockets Layer (SSL) ....................................................395
Kontrola danych pochodz cych od u ytkownika ..............................................................398
16 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Bezpieczne przechowywanie danych ................................................................................399
Ustalanie, czy powinno si przechowywa numery kart kredytowych ..............................400
Szyfrowanie danych w PHP ..............................................................................................401
Instalacja GPG ............................................................................................................401
Testowanie GPG .........................................................................................................404
Propozycje dalszych lektur ................................................................................................408
W nast pnej cz ci ............................................................................................................408
Cz IV Zaawansowane techniki PHP ..........................................409
Rozdzia 19. Interakcja z systemem plików i serwerem ....................................... 411
Wprowadzenie do wysy ania plików .................................................................................411
Kod HTML s u cy do wysy ania plików ...................................................................412
Tworzenie PHP obs uguj cego plik ............................................................................413
Najcz ciej spotykane problemy .................................................................................417
Stosowanie funkcji katalogowych .....................................................................................418
Odczyt z katalogów .....................................................................................................418
Otrzymywanie informacji na temat aktualnego katalogu ...........................................421
Tworzenie i usuwanie katalogów ................................................................................421
Interakcja z systemem plików ...........................................................................................422
Otrzymywanie informacji o pliku ...............................................................................422
Zmiana w a ciwo ci pliku ...........................................................................................424
Tworzenie, usuwanie i przenoszenie plików ...............................................................425
Stosowanie funkcji uruchamiaj cych programy ................................................................425
Interakcja ze rodowiskiem: funkcje getenv() i putenv() ..................................................427
Propozycje dalszych lektur ................................................................................................428
W nast pnym rozdziale .....................................................................................................428
Rozdzia 20. Stosowanie funkcji sieci i protoko u .................................................. 429
Przegl d protoko ów ..........................................................................................................429
Wysy anie i odczytywanie poczty elektronicznej ..............................................................430
Korzystanie z danych z innych witryn WWW ...................................................................430
Stosowanie funkcji po cze sieciowych ..........................................................................433
Tworzenie kopii bezpiecze stwa lub kopii lustrzanej pliku ..............................................436
Stosowanie FTP w celu utworzenia kopii bezpiecze stwa lub kopii lustrzanej pliku ......436
Wysy anie plików ........................................................................................................442
Unikanie przekroczenia dopuszczalnego czasu ...........................................................442
Stosowanie innych funkcji FTP ...................................................................................443
Propozycje dalszych lektur ................................................................................................443
W nast pnym rozdziale .....................................................................................................444
Rozdzia 21. Zarz dzanie dat i czasem ................................................................ 445
Uzyskiwanie informacji o dacie i czasie w PHP ................................................................445
Stosowanie funkcji date() ............................................................................................445
Obs uga znaczników czasu Uniksa .............................................................................447
Stosowanie funkcji getdate() .......................................................................................448
Sprawdzanie poprawno ci dat przy u yciu funkcji checkdate() ..................................449
Formatowanie znaczników czasu ................................................................................450
Konwersja pomi dzy formatami daty PHP i MySQL ........................................................450
Obliczanie dat w PHP ........................................................................................................452
Obliczanie dat w MySQL ..................................................................................................454
Stosowanie mikrosekund ...................................................................................................455
Stosowanie funkcji kalendarzowych .................................................................................455
Propozycje dalszych lektur ................................................................................................456
W nast pnym rozdziale .....................................................................................................456
Spis tre ci 17
Rozdzia 22. Generowanie obrazków .................................................................... 457
Konfigurowanie obs ugi obrazków w PHP ........................................................................457
Formaty obrazków .............................................................................................................458
JPEG ...........................................................................................................................459
PNG .............................................................................................................................459
WBMP ........................................................................................................................459
GIF ..............................................................................................................................459
Tworzenie obrazków .........................................................................................................460
Tworzenie kadru obrazka ............................................................................................460
Rysowanie lub umieszczanie tekstu w obrazku ...........................................................461
Wy wietlanie ostatecznej grafiki .................................................................................463
Ko cowe czynno ci porz dkuj ce ..............................................................................464
Stosowanie automatycznie generowanych obrazków na innych stronach .........................464
Stosowanie tekstu i czcionek do tworzenia obrazków .......................................................465
Konfiguracja podstawowego kadru .............................................................................467
Dopasowanie tekstu do przycisku ...............................................................................468
Nadawanie tekstowi odpowiedniej pozycji .................................................................470
Wpisywanie tekstu do przycisku .................................................................................471
Etap ko cowy ..............................................................................................................471
Rysowanie figur i wykresów danych .................................................................................471
Inne funkcje obrazków ......................................................................................................478
Propozycje dalszych lektur ................................................................................................478
W nast pnym rozdziale .....................................................................................................478
Rozdzia 23. Stosowanie kontroli sesji w PHP ......................................................... 479
Czym jest kontrola sesji? ...................................................................................................479
Podstawowa zasada dzia ania sesji ....................................................................................479
Czym jest cookie? .......................................................................................................480
Konfiguracja cookies w PHP ......................................................................................480
Stosowanie cookies w sesji .........................................................................................481
Przechowywanie identyfikatora sesji ..........................................................................481
Implementacja prostych sesji .............................................................................................482
Rozpoczynanie sesji ....................................................................................................482
Zg aszanie zmiennych sesji .........................................................................................482
Stosowanie zmiennych sesji ........................................................................................483
Usuwanie zmiennych i niszczenie sesji .......................................................................483
Przyk ad prostej sesji .........................................................................................................483
Konfiguracja kontroli sesji ................................................................................................485
Implementacja uwierzytelniania w kontroli sesji ...............................................................485
Propozycje dalszych lektur ................................................................................................491
W nast pnym rozdziale .....................................................................................................491
Rozdzia 24. Inne przydatne w asno ci .................................................................. 493
Stosowanie magicznych cudzys owów ..............................................................................493
Wykonywanie ci gów  funkcja eval() ...........................................................................494
Zako czenie wykonania  die i exit ................................................................................495
Serializacja zmiennych i obiektów ....................................................................................495
Pobieranie informacji na temat rodowiska PHP ...............................................................496
Uzyskiwanie informacji na temat za adowanych rozszerze ......................................496
Identyfikacja w a ciciela skryptu ................................................................................497
Uzyskiwanie informacji na temat daty modyfikacji skryptu .......................................497
Czasowa zmiana rodowiska wykonawczego ...................................................................497
Pod wietlanie róde ..........................................................................................................498
U ywanie PHP w wierszu polece ....................................................................................499
W nast pnej cz ci ............................................................................................................500
18 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Cz V Tworzenie praktycznych projektów PHP i MySQL .........501
Rozdzia 25. Stosowanie PHP i MySQL w du ych projektach ............................... 503
Zastosowanie in ynierii oprogramowania w tworzeniu aplikacji WWW ..........................504
Planowanie i prowadzenie projektu aplikacji WWW ........................................................504
Ponowne stosowanie kodu .................................................................................................505
Tworzenie kodu atwego w utrzymaniu .............................................................................506
Standardy kodowania ..................................................................................................506
Dzielenie kodu ............................................................................................................509
Stosowanie standardowej struktury katalogów ...........................................................509
Dokumentacja i dzielenie wewn trznych funkcji ........................................................510
Implementacja kontroli wersji ...........................................................................................510
Wybór rodowiska programistycznego .............................................................................511
Dokumentacja projektów ...................................................................................................511
Prototypowanie ..................................................................................................................512
Oddzielanie logiki i zawarto ci .........................................................................................513
Optymalizacja kodu ...........................................................................................................514
Stosowanie prostych optymalizacji .............................................................................514
Stosowanie produktów firmy Zend .............................................................................514
Testowanie ........................................................................................................................515
Propozycje dalszych lektur ................................................................................................516
W nast pnym rozdziale .....................................................................................................516
Rozdzia 26. Usuwanie b dów ............................................................................... 517
B dy programistyczne ......................................................................................................517
B dy sk adni ...............................................................................................................517
B dy wykonania .........................................................................................................519
B dy logiczne .............................................................................................................523
Pomoc w usuwaniu b dów w zmiennych .........................................................................525
Poziomy zg aszania b dów ...............................................................................................527
Zmiana ustawie zg aszania b dów ..................................................................................528
Wyzwalanie w asnych b dów ..........................................................................................529
Elegancka obs uga b dów ................................................................................................529
W nast pnym rozdziale .....................................................................................................532
Rozdzia 27. Tworzenie uwierzytelniania u ytkowników i personalizacji ............ 533
Sk adniki rozwi zania .......................................................................................................533
Identyfikacja u ytkownika i personalizacja .................................................................534
Przechowywanie zak adek ..........................................................................................535
Rekomendowanie zak adek .........................................................................................535
Przegl d rozwi zania .........................................................................................................535
Implementacja bazy danych ..............................................................................................537
Implementacja podstawowej witryny ................................................................................538
Implementacja uwierzytelniania u ytkowników ...............................................................540
Rejestracja u ytkowników ..........................................................................................540
Logowanie ...................................................................................................................545
Wylogowanie ..............................................................................................................548
Zmiana has a ...............................................................................................................549
Ustawianie zapomnianych hase ..................................................................................551
Implementacja przechowywania i odczytywania zak adek ..............................................555
Dodawanie zak adek ...................................................................................................555
Wy wietlanie zak adek ................................................................................................557
Usuwanie zak adek ......................................................................................................557
Implementacja rekomendacji .............................................................................................559
Rozwijanie projektu i mo liwe rozszerzenia .....................................................................562
W nast pnym rozdziale .....................................................................................................562
Spis tre ci 19
Rozdzia 28. Tworzenie koszyka na zakupy ........................................................... 563
Sk adniki rozwi zania .......................................................................................................563
Tworzenie katalogu online ..........................................................................................564
ledzenie zakupów u ytkownika podczas przegl dania ..............................................564
Implementacja systemu p atno ci ................................................................................564
Interfejs administratora ...............................................................................................565
Przegl d rozwi zania .........................................................................................................565
Implementacja bazy danych ..............................................................................................568
Implementacja katalogu online ..........................................................................................570
Przedstawianie kategorii .............................................................................................571
Wy wietlanie ksi ek danej kategorii .........................................................................574
Przedstawianie szczegó owych danych ksi ki ...........................................................575
Implementacja koszyka na zakupy ....................................................................................577
Stosowanie skryptu pokaz_kosz.php ...........................................................................577
Podgl d koszyka ..........................................................................................................580
Dodawanie produktów do koszyka .............................................................................582
Zapisywanie uaktualnionego koszyka .........................................................................583
Wy wietlanie podsumowania w pasku nag ówka .......................................................584
Pobyt w kasie ..............................................................................................................584
Implementacja p atno ci ....................................................................................................589
Implementacja interfejsu administratora ...........................................................................591
Rozwijanie projektu ..........................................................................................................598
Zastosowanie istniej cego systemu ...................................................................................598
W nast pnym rozdziale .....................................................................................................598
Rozdzia 29. Tworzenie serwisu poczty elektronicznej opartego na WWW ......... 599
Sk adniki rozwi zania .......................................................................................................599
Protoko y poczty: POP3 i IMAP .................................................................................599
Obs uga POP3 i IMAP w PHP ....................................................................................600
Przegl d rozwi zania .........................................................................................................601
Konfiguracja bazy danych .................................................................................................603
Architektura skryptu ..........................................................................................................604
Logowanie i wylogowanie .................................................................................................608
Konfiguracja kont ..............................................................................................................611
Tworzenie nowego konta ............................................................................................613
Modyfikacja istniej cego konta ...................................................................................614
Usuwanie konta ...........................................................................................................614
Odczytywanie poczty ........................................................................................................615
Wybór konta ................................................................................................................615
Przegl danie zawarto ci skrzynki ................................................................................617
Odczytywanie wiadomo ci pocztowych .....................................................................619
Przegl danie nag ówków wiadomo ci .........................................................................622
Usuwanie wiadomo ci .................................................................................................623
Wysy anie wiadomo ci ......................................................................................................623
Wysy anie nowej wiadomo ci .....................................................................................624
Odpowiadanie i przekazywanie poczty .......................................................................625
Rozwijanie projektu ..........................................................................................................626
W nast pnym rozdziale .....................................................................................................627
Rozdzia 30. Tworzenie mened era list pocztowych ............................................. 629
Sk adniki rozwi zania .......................................................................................................629
Konfiguracja bazy danych list i abonentów .................................................................630
Wysy anie plików ........................................................................................................630
Wysy anie wiadomo ci z za cznikami .......................................................................631
Przegl d rozwi zania .........................................................................................................631
Konfiguracja bazy danych .................................................................................................633
20 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Architektura skryptu ..........................................................................................................635
Implementacja logowania ..................................................................................................641
Tworzenie nowego konta ............................................................................................641
Logowanie ...................................................................................................................643
Implementacja funkcji u ytkownika ..................................................................................645
Przegl danie list ..........................................................................................................646
Przegl danie informacji na temat listy ........................................................................650
Przegl danie archiwum listy .......................................................................................652
Zapisywanie i wypisywanie ........................................................................................653
Zmiana konfiguracji konta ..........................................................................................654
Zmiana has a ...............................................................................................................654
Wylogowanie ..............................................................................................................656
Implementacja funkcji administratora ...............................................................................656
Tworzenie nowej listy .................................................................................................657
Wysy anie nowych wiadomo ci ..................................................................................658
Obs uga wysy ania wielu plików .................................................................................661
Podgl d wiadomo ci ...................................................................................................664
Rozsy anie wiadomo ci ...............................................................................................665
Rozwijanie projektu ..........................................................................................................670
W nast pnym rozdziale .....................................................................................................670
Rozdzia 31. Tworzenie forum WWW ........................................................................ 671
Proces ................................................................................................................................671
Sk adniki rozwi zania .......................................................................................................672
Przegl d rozwi zania .........................................................................................................673
Projektowanie bazy danych ...............................................................................................674
Przegl danie drzewa artyku ów .........................................................................................676
Rozwijanie i zwijanie ..................................................................................................678
Wy wietlanie artyku ów ..............................................................................................680
Korzystanie z klasy wezel_drzewa ..............................................................................681
Przegl danie pojedynczych artyku ów ..............................................................................687
Dodawanie nowych artyku ów ..........................................................................................688
Rozszerzenia ......................................................................................................................694
Wykorzystanie istniej cego systemu .................................................................................694
W nast pnym rozdziale .....................................................................................................694
Rozdzia 32. Tworzenie dokumentów spersonalizowanych w formacie PDF ...... 695
Opis projektu .....................................................................................................................695
Ocena formatów dokumentów ....................................................................................696
Sk adniki rozwi zania .......................................................................................................700
System pyta i odpowiedzi ..........................................................................................700
Oprogramowanie generuj ce dokumenty ....................................................................700
Przegl d rozwi zania .........................................................................................................703
Zadawanie pyta .........................................................................................................704
Ocena odpowiedzi .......................................................................................................705
Tworzenie certyfikatu RTF .........................................................................................707
Tworzenie certyfikatu PDF z szablonu .......................................................................710
Generowanie dokumentu PDF za pomoc PDFlib ......................................................713
Skrypt  Witaj, wiecie dla PDFlib .............................................................................713
Tworzenie certyfikatu za pomoc PDFlib ...................................................................717
Problemy zwi zane z nag ówkami ....................................................................................723
Rozwijanie projektu ..........................................................................................................724
W nast pnym rozdziale .....................................................................................................724
Spis tre ci 21
Rozdzia 33. Korzystanie z us ug sieciowych za pomoc XML i SOAP ................ 725
Opis projektu: korzystanie z j zyka XML i us ug sieciowych ...........................................725
Podstawy XML ...........................................................................................................726
Podstawy us ug sieciowych .........................................................................................729
Sk adniki rozwi zania .......................................................................................................730
Korzystanie z interfejsu us ug sieciowych Amazon.com ............................................730
Wczytywanie dokumentów XML: odpowiedzi REST ................................................731
Korzystanie z SOAP za pomoc PHP .........................................................................732
Buforowanie ................................................................................................................732
Opis rozwi zania ...............................................................................................................732
Aplikacja g ówna ........................................................................................................734
Wy wietlanie listy ksi ek z danej kategorii ...............................................................742
Tworzenie obiektu klasy WynikiWyszukiwania .........................................................743
Korzystanie z REST do wykonywania da i odczytywania wyników .....................750
Korzystanie z protoko u SOAP do wykonywania dania i odczytywania wyniku ....755
Buforowanie danych pochodz cych z dania ............................................................756
Konstrukcja koszyka na zakupy ..................................................................................758
Przej cie do kasy na witrynie Amazon.com ................................................................761
Instalacja kodu ród owego ...............................................................................................762
Kierunki rozwoju ...............................................................................................................762
Literatura ...........................................................................................................................762
Rozdzia 34. Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax .....763
Czym jest technologia Ajax? .............................................................................................764
dania i odpowiedzi HTTP .......................................................................................764
DHTML i XML ...........................................................................................................765
Kaskadowe arkusze stylów (CSS) ...............................................................................766
Skrypty dzia aj ce po stronie klienta ...........................................................................767
Skrypty dzia aj ce po stronie serwera .........................................................................768
XML i XSLT ...............................................................................................................768
Podstawy technologii Ajax ................................................................................................768
Obiekt XMLHTTPRequest .........................................................................................768
Komunikowanie si z serwerem ..................................................................................770
Przetwarzanie odpowiedzi serwera .............................................................................772
Po czenie wszystkich elementów aplikacji ................................................................773
Dodanie nowych elementów do wcze niejszych projektów ..............................................775
Dodanie elementów Ajaksa do witryny Zak adkaPHP ................................................777
ród a dodatkowych informacji ........................................................................................788
Dodatkowe informacje na temat Document Object Model (DOM) .............................789
Biblioteki JavaScript dla aplikacji Ajax ......................................................................789
Witryny internetowe przeznaczone dla programistów Ajax ........................................790
Dodatki .................................................................................................791
Dodatek A Instalacja PHP i MySQL ....................................................................... 793
Instalacja Apache, PHP i MySQL w systemie UNIX ........................................................794
Instalacja przy u yciu binariów ...................................................................................794
Instalacja przy u yciu kodów ród owych ..................................................................794
Plik httpd.conf  informacje ko cowe .......................................................................800
Czy obs uga PHP dzia a poprawnie? ...........................................................................800
Czy SSL dzia a poprawnie? ........................................................................................801
22 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Instalacja Apache, PHP i MySQL w systemie Windows ..................................................802
Instalacja MySQL w systemie Windows .....................................................................803
Instalacja serwera Apache w systemie Windows ........................................................804
Instalacja PHP w systemie Windows ..........................................................................806
Instalowanie PEAR ...........................................................................................................808
Inne konfiguracje ...............................................................................................................809
Dodatek B Zasoby internetowe ............................................................................ 811
Zasoby po wi cone PHP ...................................................................................................811
Zasoby po wi cone MySQL i SQL ...................................................................................813
Zasoby po wi cone serwerowi Apache .............................................................................813
Zasoby po wi cone tworzeniu stron WWW ......................................................................814
Skorowidz ............................................................................................. 815
Rozdzia 2.
Przechowywanie
i wyszukiwanie danych
W poprzednim rozdziale omówili my sposoby dost pu do danych umieszczonych w formularzu
HTML i metody manipulowania nimi. Teraz przedstawiamy metody zapisywania informacji w celu
pó niejszego ich wykorzystania. W wi kszo ci przypadków, w czaj c w to przyk ad z poprzed-
niego rozdzia u, celem jest przechowanie danych i pó niejsze ich za adowanie. W tym przyk adzie
nale y zapami ta zamówienie klienta, aby pó niej je zrealizowa .
W tym rozdziale opiszemy sposoby zapisania do pliku zamówienia przedstawionego w przyk adzie
oraz metody pó niejszego odczytania tego pliku. Poka emy równie , dlaczego takie rozwi za-
nie nie zawsze jest najlepsze. Pracuj c z wi ksz liczb zamówie , powinno si zamiast niego
u ywa systemu zarz dzania bazami danych, takiego jak MySQL.
W tym rozdziale zostan poruszone nast puj ce zagadnienia:
zapisywanie danych do pó niejszego u ycia,
otwieranie pliku,
tworzenie i zapisywanie pliku,
zamykanie pliku,
czytanie z pliku,
blokowanie pliku,
usuwanie pliku,
inne przydatne informacje na temat plików,
lepszy sposób obróbki danych: systemy zarz dzania bazami danych.
Zapisywanie danych do pó niejszego u ycia
Istniej dwa sposoby przechowywania danych  w pliku jednorodnym oraz w bazie danych.
Plik jednorodny mo e mie wiele ró nych formatów, lecz zazwyczaj terminem tym oznacza si
prosty plik tekstowy. W opisywanym przyk adzie dane s zapisywane w pliku tekstowym, jedno
zamówienie w jednym wierszu.
78 Cz I Stosowanie PHP
Zapisywanie zamówie w taki w a nie sposób jest rozwi zaniem bardzo prostym w realizacji, ale
zarazem jest ono obarczone licznymi ograniczeniami, co zostanie pokazane w dalszej cz ci roz-
dzia u. Przy obróbce danych znacznej wielko ci stosuje si zazwyczaj bazy danych. Mimo to
pliki jednorodne znajduj zastosowania i istniej przypadki, w których wiedza na ich temat jest
konieczna.
Proces zapisu i odczytu plików w PHP przebiega w zbli ony sposób jak w wielu innych, podob-
nych j zykach programowania. Osoby znaj ce j zyk C lub skrypty pow oki Uniksa powinny bez
trudu rozpozna podobie stwa tych procedur.
Przechowywanie i wyszukiwanie zamówie Janka
Poni ej u yta zostanie nieco zmodyfikowana wersja formularza zamówie , przedstawionego
w poprzednim rozdziale. Na pocz tku nale y przeanalizowa ten formularz i kod PHP stworzony
w celu obróbki zamówie .
Kod HTML i skrypty PHP zastosowane w tym rozdziale znajduj si w folderze rozdzial_02
(przyk ady s dost pne na p ycie CD do czonej do ksi ki).
Formularz zosta zmodyfikowany w celu atwego uzyskania adresu klienta. Nowa wersja formularza
jest przedstawiona na rysunku 2.1.
Rysunek 2.1.
Wersja formularza
zamówie pobieraj ca
równie adres klienta
Pole formularza zawieraj ce adres klienta nosi nazw adres. Podczas przetwarzania w PHP daje
ono zmienn o nazwie $adres, pod warunkiem stosowania stylu krótkiego dost pu do zmiennych.
Nale y pami ta , e przy zastosowaniu stylu d ugiego odwo anie do tej zmiennej to $REQUEST
['adres'], $_POST['adres'] lub $_GET['adres'], zale nie od metody zatwierdzenia (szczegó y
opisali my w rozdziale 1.).
W tym rozdziale ka de nadchodz ce zamówienie zostanie zapisane w tym samym pliku. Skon-
struowany pó niej interfejs WWW pozwoli pracownikom Janka na przegl danie przyj tych
zamówie .
Rozdzia 2. Przechowywanie i wyszukiwanie danych 79
Przetwarzanie plików
Zapisywanie danych w pliku nast puje w trzech etapach. S to:
1. Otwarcie pliku. Je eli dany plik nie istnieje, nale y go utworzy .
2. Zapisanie danych w pliku.
3. Zamkni cie pliku.
Podobnie, trójetapowo, przebiega odczytywanie danych z pliku:
1. Otwarcie pliku. Je eli plik nie mo e zosta otwarty (np. nie istnieje), fakt ten musi zosta
rozpoznany i program powinien zako czy si w elegancki sposób (tzn. nie bombarduj c
u ytkownika dok adnymi i niepotrzebnymi mu informacjami o b dach).
2. Odczytanie danych z pliku.
3. Zamkni cie pliku.
Przy odczytywaniu danych z pliku dost pnych jest wiele sposobów ustalania ilo ci pobieranych
naraz danych. Rozwi zania najcz ciej stosowane zostan opisane bardziej szczegó owo w poni -
szych punktach. Na pocz tek przedstawimy mechanizm otwierania plików.
Otwieranie pliku
Aby otworzy plik w PHP, stosuje si funkcj fopen(). Otwieraj c plik, nale y zadeklarowa spo-
sób, w jaki b dzie on u ywany. Sposób ten nosi nazw trybu otwarcia pliku.
Tryby otwarcia pliku
System operacyjny serwera musi mie informacje na temat przeznaczenia otwieranego pliku.
Musi wiedzie , czy plik mo e równocze nie zosta otwarty przez inny skrypt oraz czy u ytkow-
nik posiada uprawnienia do dost pu i modyfikacji pliku. Przede wszystkim tryb otwarcia pliku
dostarcza systemowi operacyjnemu mechanizmu przetwarzania da dost pu od innych u yt-
kowników b d skryptów oraz metody sprawdzania uprawnie dost pu do konkretnych plików.
Przy otwieraniu pliku nale y mie trzy informacje:
1. Mo na otworzy plik w nast puj cych trybach: tylko do odczytu, tylko do zapisu lub
do obu tych celów.
2. Przy zapisywaniu danych w pliku mo na nadpisa istniej ce dane b d doda nowe
na jego ko cu. Mo na równie opracowa zgrabny sposób zaka czania programu zamiast
nadpisywania pliku na pliku, który ju istnieje.
3. Przy zapisywaniu pliku przy u yciu systemu rozró niaj cego pliki tekstowe i binarne
mo na okre li dany typ.
Funkcja fopen() rozpoznaje po czenia tych trzech opcji.
80 Cz I Stosowanie PHP
Stosowanie funkcji fopen() do otwarcia pliku
Aby zapisa zamówienie klienta do pliku zamówie Janka, nale y zastosowa nast puj cy wiersz
kodu:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'w');
Przy wywo aniu funkcja fopen spodziewa si dwóch lub trzech parametrów. Zazwyczaj stosuje
si dwa, jak pokazano w powy szym przyk adzie.
Pierwszy parametr to nazwa pliku, który ma zosta otwarty. Mo na tu okre li cie k dost pu
do pliku, jak w powy szym przyk adzie; plik zamowienia.txt znajduje si w katalogu zamówie .
Zastosowana zosta a wbudowana w PHP zmienna $SERVER['DOCUMENT_ROOT'] lecz, ze wzgl du
na uci liwo stosowania pe nych nazw zmiennych formy, przypisali my jej krótsz nazw .
Zmienna ta wskazuje na podstawowy element drzewa katalogów serwera WWW. W wierszu
tym u yto symbolu .., oznaczaj cego  katalog nadrz dny katalogu macierzystego , który ze
wzgl du na bezpiecze stwo znajduje si poza drzewem katalogów. Nie mo na pozwoli na inny
sposób dost pu przez WWW do tego pliku poza dostarczanym interfejsem. cie ka tego typu
jest nazywana cie k wzgl dn , poniewa opisuje miejsce w systemie plików w zale no ci od
katalogu macierzystego.
Podobnie jak w przypadku nadawania zmiennym formy krótkich nazw, na pocz tku skryptu
nale y umie ci nast puj cy wiersz:
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
w celu skopiowania zawarto ci zmiennej nosz cej nazw d ug do zmiennej o krótkiej nazwie.
Analogicznie do ró norodno ci metod dost pu do danych formy, istniej równie ró ne sposoby
dost pu do predefiniowanych zmiennych serwera. W zale no ci od ustawie serwera (szczegó-
owe informacje na ten temat mo na znale w rozdziale 1.) mo na pozyska katalog macierzysty
za pomoc :
$_SERVER['DOCUMENT_ROOT']
$DOCUMENT_ROOT
$HTTP_SERVER_VARS['DOCUMENT_ROOT']
Podobnie jak w przypadku danych formy, zalecany jest pierwszy sposób.
Mo na równie okre li bezwzgl dn cie k dost pu do pliku, b d c cie k od katalogu
g ównego (/ w systemach Unix i zazwyczaj C:\ w systemach Windows). Na przyk adowym ser-
werze Uniksa cie ka ta mo e wygl da nast puj co: /home/ksiazka/zamowienia. Niedogodno ci
tej metody, zw aszcza w wypadku korzystania z obcego serwera, jest mo liwo modyfikacji
cie ki bezwzgl dnej, co mo e oznacza powa ne zmiany w wielu skryptach.
Je eli cie ka nie zostanie podana, PHP b dzie szuka pliku i ewentualnie utworzy go w tym samym
katalogu, w którym znajduje si skrypt. Mo e si to ró ni w zale no ci od faktu, czy PHP jest
uruchamiany poprzez jaki skrypt CGI, i zale y od konfiguracji serwera.
W rodowisku Uniksa stosuje si uko niki (/), natomiast w rodowisku Windows mo na u ywa
lewych (\) lub prawych uko ników (/), które musz jednak zosta oznaczone jako znaki specjalne,
aby funkcja fopen w a ciwie je zinterpretowa a. W tym celu nale y po prostu doda przed ka dym
symbolem jeszcze jeden lewy uko nik, jak pokazano w poni szym przyk adzie:
$wp = fopen("..\\..\\zamowienia\\zamowienia.txt", 'w');
Rozdzia 2. Przechowywanie i wyszukiwanie danych 81
Niewiele osób stosuje w cie kach dost pu w kodzie PHP znaki odwrotnych uko ników, ponie-
wa oznacza oby to, e kod ten b dzie dzia a tylko w systemach Windows. Stosowanie zwyk ych
uko ników pozwala na przenoszenie kodu mi dzy maszynami pracuj cymi w systemach Unix
i Windows bez konieczno ci wprowadzania w nim zmian.
Drugim parametrem funkcji fopen() jest tryb otwarcia pliku, okre laj cy jego przeznaczenie.
Powinien on zosta podany jako ci g. W powy szym przyk adzie funkcji fopen() zostaje prze-
kazana warto w, co oznacza otwarcie pliku do zapisu. Podsumowanie trybów otwarcia pliku
przedstawiono w tabeli 2.1.
Tabela 2.1. Podsumowanie trybów otwarcia pliku w funkcji fopen
Tryb Nazwa trybu Znaczenie
r Odczyt Otwarcie pliku do odczytu, poczynaj c od pocz tku pliku
r+ Odczyt Otwarcie pliku do odczytu i zapisu, poczynaj c od pocz tku pliku
w Zapis Otwarcie pliku do zapisu, poczynaj c od pocz tku pliku. Je eli plik istnieje, bie ca
zawarto zostanie skasowana. W przeciwnym wypadku nast pi próba jego utworzenia
w+ Zapis Otwarcie pliku do zapisu i odczytu, poczynaj c od pocz tku pliku. Je eli plik istnieje,
bie ca zawarto zostanie skasowana, je eli za nie, nast pi próba jego utworzenia
x Ostro ny zapis Otwarcie pliku do zapisu rozpoczynaj cego si na pocz tku pliku. Je li plik ju istnieje,
nie zostanie otwarty, funkcja fopen() zwróci warto false, a PHP wygeneruje ostrze enie
x+ Ostro ny zapis Otwarcie pliku do zapisu i odczytu rozpoczynaj cego si na pocz tku pliku. Je li plik ju
istnieje, nie zostanie otwarty, funkcja fopen() zwróci warto false, a PHP wygeneruje
ostrze enie
a Dodawanie Otwarcie pliku do dodawania zawarto ci, pocz wszy od ko ca istniej cej zawarto ci.
Je eli plik nie istnieje, nast pi próba jego utworzenia
a+ Dodawanie Otwarcie pliku do dodawania zawarto ci i odczytu, pocz wszy od ko ca istniej cej
zawarto ci. Je eli plik nie istnieje, nast pi próba jego utworzenia
b Tryb binarny Stosowany w po czeniu z jednym z powy szych typów w wypadku korzystania
z systemu rozró niaj cego pliki tekstowe i binarne. Windows go rozró nia, Unix  nie.
Programi ci PHP zalecaj , by zawsze u ywa tej opcji w celu zapewnienia sobie
maksymalnej przeno no ci. Jest to tryb domy lny
t Tryb tekstowy Stosowany w po czeniu z jednym z powy szych trybów. Tryb ten jest dost pny
jedynie w systemie Windows. Nie jest on zalecany, chyba e przed przeniesieniem
kodu zostanie zamieniony na tryb b
Tryb otwarcia pliku zastosowany w przyk adzie zale y od sposobu, w jaki system zostanie u yty.
Powy ej wyst puje tryb 'w', co oznacza, e w pliku b dzie mog o by zapami tane tylko jedno
zamówienie. Ka de nowo przyj te zamówienie nadpisze poprzednie. Nie jest to rozwi zanie
zbyt rozs dne, wi c lepiej u y trybu dodawania (oraz, zgodnie z zaleceniem, trybu binarnego):
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
Istnieje równie trzeci, opcjonalny parametr funkcji fopen(). Stosuje si go w celu szukania pliku
w lokalizacjach podanych w opcji include_path (ustawianej w konfiguracji PHP  szczegó y
w dodatku A). Aby u y tej opcji, nale y nada temu parametrowi warto 1. Nie trzeba wtedy
podawa cie ki dost pu do pliku.
$wp = fopen('zamowienia.txt', 'ab', true);
Czwarty parametr równie jest opcjonalny. Funkcja fopen() dopuszcza, by nazwy plików by y
poprzedzone nazw protoko u (na przyk ad http://), a same pliki by y otwierane ze zdalnych
82 Cz I Stosowanie PHP
lokalizacji. Niektóre protoko y pozwalaj ponadto na przekazywanie dodatkowych parametrów.
Taki sposób u ycia funkcji fopen() zostanie opisany bardziej szczegó owo w dalszej cz ci tego
rozdzia u.
Je eli funkcji fopen() uda si otwarcie pliku, zwraca ona zasób b d cy w rzeczywisto ci uchwy-
tem albo wska nikiem pliku i przechowuje go w zmiennej, w powy szym przyk adzie: $wp.
Zmienna ta jest stosowana przy kolejnych próbach dost pu do pliku, to znaczy przy odczytywa-
niu lub zapisywaniu danych.
Otwieranie pliku przez protokó FTP lub HTTP
Funkcja fopen() s u y do otwierania do odczytu lub zapisu plików lokalnych. Za jej pomoc mo na
tak e otwiera pliki poprzez FTP, HTTP i inne protoko y. W asno t mo na zablokowa , wy -
czaj c w pliku php.ini dyrektyw allow_url_fopen. Je eli wi c otwieranie plików zdalnych przy
u yciu fopen() sprawia k opoty, najpierw nale y zajrze do pliku php.ini.
Je eli wprowadzona nazwa pliku rozpoczyna si od ftp://, otwarte zostanie pasywne po czenie
FTP z serwerem, którego adres zosta wprowadzony, a funkcja zwróci warto wska nika na
pocz tek pliku.
Je eli wprowadzona nazwa pliku rozpoczyna si od http://, otwarte zostanie pasywne po czenie
HTTP z serwerem, którego adres zosta wprowadzony, a funkcja zwróci warto wska nika na
odpowied . Przy zastosowaniu trybu HTTP w starszych wersjach PHP adres odnosz cy si do
katalogu musi zawiera ko cz ce uko niki, jak w poni szym przyk adzie:
http://www.serwer.com/
a nie
http://www.serwer.com
Przy zastosowaniu drugiej wersji adresu (bez uko nika) serwer WWW u yje zwyk ego przekiero-
wania HTTP i prze le w odpowiedzi pierwszy z powy szych adresów (warto wykona to zadanie).
Nale y pami ta , e nazwy domen w URL-ach nie s ró nicowane ze wzgl du na wielko liter,
w przeciwie stwie do cie ek i nazw plików.
Problemy z otwieraniem plików
Popularnym b dem jest próba otwarcia pliku, co do którego nie posiada si praw odczytu lub
zapisu. (B d taki pojawia si zazwyczaj w systemach operacyjnych z rodziny Unix, od czasu do
czasu mo na jednak spotka si z nim w systemie Windows.) W takim przypadku PHP wy wietli
ostrze enie podobne do przedstawionego na rysunku 2.2.
Po pope nieniu takiego b du nale y upewni si , czy skrypt, który jest stosowany, posiada prawo
dost pu do danego pliku. Zale nie od konfiguracji serwera, skrypt mo e by uruchomiony z pra-
wami u ytkownika serwera WWW lub z prawami w a ciciela swojego katalogu.
W wi kszo ci systemów skrypt zostanie uruchomiony jako u ytkownik serwera WWW. Je eli
na przyk ad skrypt znajduje si w systemie uniksowym w katalogu ~/public_html/rozdzia 2,
nale y utworzy ogólnodost pny katalog, w którym przechowywane b d zamówienia. Aby to
uczyni , mo na wpisa :
mkdir ~/zamowienia
chmod 777 ~/zamowienia/
Rozdzia 2. Przechowywanie i wyszukiwanie danych 83
Rysunek 2.2.
Podczas nieudanej
próby otwarcia pliku PHP
wy wietla specyficzne
ostrze enie
Nale y pami ta , e katalogi i pliki z ogólnym prawem zapisu s bardzo niebezpieczne. W szczegól-
no ci nie powinno si u ywa katalogów dost pnych bezpo rednio z poziomu WWW, które posia-
daj mo liwo zapisu. Z tego powodu przyk adowy katalog zamowienia zosta umieszczony
dwa poziomy wy ej, ponad katalogiem public_html. Szczegó owe informacje na temat bezpie-
cze stwa s przedstawione w rozdziale 15.
Z e ustawienia dost pu do plików to najpopularniejszy, lecz nie jedyny b d pope niany przy
otwieraniu plików. Je eli plik nie mo e zosta otwarty, trzeba koniecznie o tym wiedzie , aby nie
próbowa odczytywa ani zapisywa w nim danych.
Je eli wywo anie funkcji fopen() nie powiedzie si , zwróci ona warto false. Mo na wtedy
zast pi oryginalny komunikat o b dzie PHP innym, bardziej przyjaznym dla u ytkownika:
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
if (!$wp) {
echo "

Zamówienie Pa stwa nie mo e zosta przyj te w tej chwili.
Prosz spróbowa pó niej.

";
exit;
}
Symbol @ umieszczony przed wywo aniem funkcji fopen() nakazuje PHP wyt umienie wszystkich
b dów wynik ych z tego wywo ania. Zazwyczaj warto wiedzie , kiedy wyst puje b d. Kwesti
t rozwa ymy pó niej.
Wiersz ten mo na równie zapisa w nast puj cy sposób:
$wp = @fopen("$DOCUMENT_ROOT/../ zamowienia/zamowienia.txt". 'a');
jednak w takiej sytuacji nie wida wyra nie, e stosowane jest ukrywanie b dów, co mo e utrud-
ni debugowanie kodu.
Opisana metoda stanowi najprostszy sposób radzenia sobie z b dami. Bardziej elegancki sposób
obs ugi b dów zostanie przedstawiony w rozdziale 7.
84 Cz I Stosowanie PHP
Instrukcja if sprawdza warto zmiennej $wp, aby ustali , czy wywo anie funkcji fopen() zwró-
ci o prawid owy wska nik. Je eli nie, wy wietla komunikat o b dzie i ko czy dzia anie skryptu.
Poniewa strona zako czy si w tym miejscu, w powy szym kodzie zamkni te zosta y równie
znaczniki HTML, aby kod HTML dzia a bezb dnie.
Wynik dzia ania powy szego fragmentu skryptu zosta przedstawiony na rysunku 2.3.
Rysunek 2.3.
Stosowanie w asnych
komunikatów o b dach
zamiast tych
wbudowanych w PHP
jest niew tpliwie
bardziej przyjazne
dla u ytkownika
Zapisywanie danych w pliku
Zapisywanie danych w pliku w PHP jest stosunkowo proste. Stosuje si do tego funkcj fwrite()
(zapis do pliku) lub fputs() (umieszczenie ci gu w pliku). Funkcja fputs() jest inn nazw funkcji
fwrite(). Funkcj fwrite() wywo uje si w nast puj cy sposób:
fwrite($wp, $ciagwyjsciowy);
Funkcja ta nakazuje PHP zapisanie ci gu zawartego w zmiennej $ciagwyjsciowy do pliku wska-
zywanego przez zmienn $wp.
Alternatyw dla funkcji fwrite() jest funkcja file_put_contents(). Jej prototyp przedstawia si
nast puj co:
int file_put_contents ( string nazwa_pliku,
string dane
[, int znaczniki
[, resource kontekst]])
Funkcja zapisuje ci g znaków zawarty w danych do pliku o nazwie nazwa_pliku, bez potrzeby
wywo ywania funkcji fopen() (ani fclose()). Jest to nowa funkcja, wprowadzona w PHP5, a funk-
cj dla niej komplementarn jest file_get_contents(), o której nied ugo powiemy. Opcjonalnych
parametrów znaczniki i kontekst najcz ciej u ywa si w trakcie zapisywania do plików zdal-
nych przy u yciu na przyk ad HTTP i FTP. (Funkcje te zostan omówione w rozdziale 20.).
Rozdzia 2. Przechowywanie i wyszukiwanie danych 85
Parametry funkcji fwrite()
Funkcja fwrite() pobiera trzy parametry, lecz ostatni z nich jest opcjonalny. Oto prototyp funkcji
fwrite():
int fwrite(resource wskaznik_pliku, string ciag, int [dlugosc]);
Trzeci parametr, dlugosc, zawiera maksymaln mo liw do zapisania liczb bajtów. Je eli para-
metr ten zosta umieszczony w wywo aniu funkcji, fwrite() b dzie zapisywa ciag w pliku
wskazanym przez wskaznik pliku, dopóki nie osi gnie ko ca ciagu lub zapisze dlugosc bajtów,
zale nie od tego, co wyst pi wcze niej.
D ugo a cucha znaków mo na odczyta , u ywaj c funkcji PHP o nazwie strlen() w nast pu-
j cy sposób:
fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
Trzeciego parametru u ywa si w trakcie zapisywania w trybie binarnym, poniewa mo na
dzi ki niemu unikn pewnych komplikacji zwi zanych ze zgodno ci mi dzy platformami.
Formaty plików
Tworz c plik danych podobny do przyk adowego, mo na okre li dowolny format przechowy-
wania danych. Je eli jednak dane te b d wykorzystywane pó niej przez jak aplikacj , nale y
zastosowa si do zasad okre lonych przez t aplikacj .
Poni ej przedstawiono ci g opisuj cy jeden rekord w pliku danych:
$ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
.$iloscswiec." swiec zaplonowych\t".$wartosc
."PLN\t".$adres."\n";
W tym prostym przyk adzie ka dy rekord jest zapisany w osobnym wierszu pliku. Metod t
zastosowano, poniewa wyst puje w niej prosty separator rekordów: znak nowego wiersza. Znaki
te przedstawia si za pomoc sekwencji "\n", gdy s niewidzialne.
W ca ej ksi ce pola danych b d zapisywane za ka dym razem w jednakowym porz dku i oddzie-
lane znakami tabulacji. Poniewa znak ten równie jest niewidzialny, przedstawia si go za pomoc
sekwencji "\t". Mo na wybra dowolny, czytelny znak podzia u.
Znak podzia u powinien by znakiem, który nie wyst puje po ród wprowadzanych danych, lub
te dane powinny zosta przekszta cone w celu usuni cia wyst puj cych w nich znaków podzia u.
Przekszta canie danych zostanie omówione w rozdziale 4. Na razie nale y przyj , e przy
wprowadzaniu zamówienia nie zostanie u yty znak tabulacji, co jest zdarzeniem mo liwym, lecz
ma o prawdopodobnym.
Stosowanie specjalnych znaków separuj cych pola pozwala na atwiejsze rozdzielenie zmiennych
przy odczytywaniu danych. Kwestia ta zostanie rozwa ona w rozdziale 3. oraz w rozdziale 4.
Tymczasem ka de zamówienie b dzie traktowane jako pojedynczy ci g.
Po przyj ciu kilku zamówie zawarto pliku powinna wygl da podobnie do przedstawionej
na listingu 2.1.
86 Cz I Stosowanie PHP
Listing 2.1. zamowienia.txt  przyk ad pliku zamówie
19:35, 18 lipca 2008 4 opon 1 butelek oleju 6 wiec zap onowych 1820.00PLN
ul. Krótka 22, Kraków
19:37, 18 lipca 2008 1 opon 0 butelek oleju 0 wiec zap onowych 400.00PLN
ul. G ówna 33, Gliwice
19:38, 18 lipca 2008 0 opon 1 butelek oleju 4 wiec zap onowych 180.00PLN
ul. Akacjowa 127, Warszawa
Zamykanie pliku
Po zako czeniu korzystania z pliku nale y go zamkn . Stosuje si w tym celu funkcj fclose()
w nast puj cy sposób:
fclose($wp);
Funkcja ta zwraca warto true, je eli zamykanie powiod o si , lub false, w przeciwnym wypadku.
Dzia anie to ma znacznie wi ksze szanse powodzenia ni otwieranie pliku  i w tym przypadku
nie zdecydowano si na jego sprawdzenie.
Pe en listing ostatecznej wersji skryptu przetworzzamowienie.php przedstawiono na listingu 2.2.
Listing 2.2. przetworzzamowienie.php  Ostateczna wersja skryptu przetwarzaj cego zamówienia
// utworzenie krótkich nazw zmiennych
$iloscopon = $_POST['iloscopon'];
$iloscoleju = $_POST['iloscoleju'];
$iloscswiec = $_POST['iloscswiec'];
$adres = $_POST['adres'];
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$data=date('H:i, jS F Y');
?>


Cz ci samochodowe Janka  wyniki zamówienia


Cz ci samochodowe Janka


Wyniki zamówienia


echo "

Zamówienie przyj te o ".$data."

";
echo "

Zamówienie Pa stwa wygl da nast puj co:

";
$ilosc = 0;
$ilosc = $iloscopon + $iloscoleju + $iloscswiec;
echo "Zamówionych cz ci: ".$ilosc."
";
if($ilosc == 0) {
echo "Na poprzedniej stronie nie zosta o z o one adne zamówienie!
";
} else {
if ($iloscopon > 0) {
echo $iloscopon." opon
";
Rozdzia 2. Przechowywanie i wyszukiwanie danych 87
}
if ($iloscoleju > 0) {
echo $iloscoleju." butelek oleju
";
}
if ($iloscswiec > 0) {
echo $iloscswiec." wiec zap onowych
";
}
}
$wartosc=0.00;
define('CENAOPON', 100);
define('CENAOLEJU', 10);
define('CENASWIEC', 4);
$wartosc =$iloscopon * CENAOPON + $iloscoleju * CENAOLEJU + $iloscswiec * CENASWIEC;
$wartosc=number_format($wartosc, 2, '.', ' ');
echo "

Warto zamówienia wynosi ".$wartosc."

";
echo "

Adres wysy ki to ".$adres. "

";
$ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
.$iloscswiec." swiec zap onowych\t".$wartosc
."PLN\t". $adres."\n";
// otwarcie pliku w celu dopisywania
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
flock($wp, LOCK_EX);
if (!$wp) {
echo "

Zamówienie Pa stwa nie mo e zosta przyj te w tej chwili.
Prosz spróbowa pó niej.

";
exit;
}
fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
flock($wp, LOCK_UN);
fclose($wp);
echo "

Zamówienie zapisane.

";
?>


Odczyt z pliku
Klienci Janka mog ju sk ada swoje zamówienia przez sie WWW, lecz je eli pracownicy firmy
chc je obejrze , musz otworzy plik w asnor cznie.
Mo na stworzy interfejs WWW pozwalaj cy pracownikom na atwe odczytywanie plików. Kod
tego interfejsu zosta przedstawiony na listingu 2.3.
88 Cz I Stosowanie PHP
Listing 2.3. zobaczzamowienia.php  interfejs pozwalaj cy pracownikom Janka na ogl danie zawarto ci plików
// utworzenie krótkich nazw zmiennych
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>


Cz ci samochodowe Janka  zamówienia klientów


Cz ci samochodowe Janka


Zamówienia klientów


@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
if (!$wp) {
echo "

Brak zamówie .
Prosz spróbowa pó niej.

";
exit;
}
while (!feof($wp)) {
$zamowienie = fgets($wp, 999);
echo $zamowienie."
";
}
fclose($wp);
?>


Skrypt ten dzia a na zasadzie opisanej powy ej  otwarcie pliku, odczyt z pliku, zamkni cie pliku.
Wynik uruchomienia powy szego skryptu, wykorzystuj cego plik danych z listingu 2.1, jest przed-
stawiony na rysunku 2.4.
Rysunek 2.4.
Skrypt
zobaczzamowienia.php
wy wietla w oknie
przegl darki wszystkie
zamówienia znajduj ce
si w pliku
zamowienia.txt
Rozdzia 2. Przechowywanie i wyszukiwanie danych 89
Nale y teraz przyjrze si dok adnie funkcjom wykorzystanym w powy szym skrypcie.
Otwieranie pliku w celu odczytu  fopen()
Do otwarcia pliku ponownie zosta a wykorzystana funkcja fopen(). W tym przypadku plik zosta
otwarty jedynie do odczytu, tak wi c zastosowano tryb 'rb':
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
Wiedzie , kiedy przesta  feof()
W powy szym przyk adzie p tla while zosta a zastosowana w celu odczytu danych z pliku a
do jego ko ca. P tla while sprawdza koniec pliku przy u yciu funkcji feof():
while (!feof($wp))
Funkcja feof() u ywa wska nika pliku jako swojego jedynego parametru. Zwraca ona warto
true, je eli wska nik pliku znajduje si na jego ko cu. Chocia nazwa funkcji mo e wydawa si
dziwna, atwo j zapami ta , wiedz c, e feof znaczy w skrócie File End Of File (plik koniec
pliku).
W tym przypadku (i zwyczajowo przy odczytywaniu pliku) plik jest odczytywany a do osi -
gni cia EOF.
Odczytywanie pliku wiersz po wierszu  fgets(), fgetss() i fgetcsv()
W powy szym przyk adzie do odczytania danych z pliku u yta zosta a funkcja fgets():
$zamowienie = fgets($wp, 999);
Funkcja ta jest stosowana do odczytywania pliku wiersz po wierszu. W powy szym przypadku
b dzie odczytywa a dane, dopóki nie trafi na znak nowego wiersza (\n), na EOF lub przeczyta
998 bajtów pliku. Maksymalna d ugo odczytu jest równa wpisanej liczbie minus jeden bajt.
Istnieje wiele ró nych funkcji stosowanych do odczytywania danych z pliku. Na przyk ad funk-
cja fgets() jest przydatna przy obróbce plików zawieraj cych zwyk y tekst, który odczytujemy
fragmentami.
Interesuj c odmian fgets() jest funkcja fgetss(), która posiada nast puj cy prototyp:
string fgetss(int wskaznik_pliku, int dlugosc, string [dozwolone_znaczniki]);
Funkcja ta podobna jest do fgets(), z wyj tkiem tego, e usuwa z czytanego ci gu wszystkie
znaczniki PHP i HTML, poza wyszczególnionymi w parametrze dozwolone_znaczniki. Stosuje
si j w celach bezpiecze stwa przy odczytywaniu plików napisanych przez innych programi-
stów lub zawieraj cych informacje wprowadzone przez u ytkowników. Niekontrolowany obcy
kod HTML mo e zniszczy dok adnie zaplanowany proces formatowania strony. Niekontrolo-
wany obcy kod PHP mo e odda ca w adz nad serwerem z o liwemu u ytkownikowi.
Inn odmian funkcji fgets() jest funkcja fgetcsv(). Posiada ona nast puj cy prototyp:
array fgetcsv(resource wskaznik_pliku, int dlugosc, string [znak_podzia u [, string za cznik]]);
Funkcja ta s u y do rozdzielania wierszy pliku w celu zrekonstruowania zmiennych, kiedy wcze-
niej zastosowany zosta znak podzia u (taki jak zaproponowany powy ej) lub przecinek (u ywany
90 Cz I Stosowanie PHP
w wi kszo ci arkuszy kalkulacyjnych i innych aplikacji). Oznacza to, e przy jej stosowaniu plik
jest odczytywany nie wiersz po wierszu, lecz od znaku podzia u do znaku podzia u. Wywo anie
tej funkcji nast puje podobnie jak w przypadku fgets(), lecz przekazuje si jej równie znak
podzia u u yty do odseparowania pól. Na przyk ad:
$zamowienie = fgetcsv($wp, 100, "\t");
Powy sze polecenie odczyta wiersz z pliku i podzieli j tam, gdzie natrafi na znak tabulacji (\t).
Wyniki zwracane s w postaci tablicy (w powy szym przyk adowym kodzie: $zamowienie). Tablice
zostan opisane dok adniej w rozdziale 3.
Parametr dlugosc powinien mie wi ksz warto ni d ugo (wyra on w liczbie znaków) naj-
d u szego wiersza odczytywanego pliku.
Parametr za cznik s u y do wskazywania znaków, jakimi jest otoczone ka de pole w wierszu.
Je li nie zostanie on podany, przyj ta zostanie domy lnie warto " (podwójny cudzys ów).
Odczyt ca ego pliku  readfile(), fpassthru(), file()
Plik mo na odczytywa nie tylko wiersz po wierszu, lecz równie ca y w jednym przebiegu. W tym
celu nale y pos u y si jedn z trzech metod.
Pierwsza z nich polega na zastosowaniu funkcji readfile(). Mo na zast pi niemal ca y powy szy
skrypt jednym wierszem kodu:
readfile("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Wywo anie funkcji readfile() otwiera plik, wy wietla zawarto w oknie przegl darki, po czym
zamyka plik. Prototyp funkcji readfile() jest nast puj cy:
int readfile(string nazwa_pliku, int [u ycie_opcji_include_path[, resource kontekst]]);
Opcjonalny drugi parametr okre la, czy PHP powinien szuka pliku przez opcj include_path,
i dzia a w sposób identyczny jak fopen(). Opcjonalny parametr kontekst u ywany jest jedynie
wówczas, gdy pliki s otwierane zdalnie na przyk ad za po rednictwem HTTP; ten sposób u y-
wania funkcji zostanie szerzej opisany w rozdziale 20. Funkcja zwraca ca kowit liczb bajtów
odczytanych z pliku.
Drug funkcj tego typu jest fpassthru(). W celu jej zastosowania nale y najpierw otworzy plik za
pomoc fopen(), a potem przekaza warto wska nika pliku funkcji fpassthru(), która wy wietli
zawarto tego pliku w okienku przegl darki. Po zako czeniu dzia ania funkcja zamyka plik.
Powy szy skrypt mo na zast pi funkcj fpassthru() w nast puj cy sposób:
$wp = fopen("DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
fpassthru($wp);
Funkcja fpassthru zwraca warto true, je eli odczyt powiedzie si , w przeciwnym wypadku 
false.
Trzeci metod odczytu ca ego pliku jest zastosowanie funkcji file(). Dzia a ona w identyczny
sposób jak readfile() z jednym wyj tkiem  zamiast wy wietli zawarto pliku w przegl darce,
zamienia j na tablic . Kwestia ta zostanie szczegó owo opisana w rozdziale 3. Tymczasem poni ej
zosta o przedstawione jej przyk adowe zastosowanie:
$tablicapliku = file("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Rozdzia 2. Przechowywanie i wyszukiwanie danych 91
Polecenie to wczytuje ca y plik w tablic o nazwie $tablicapliku. Ka dy wiersz pliku zostanie
zachowany jako osobny element tablicy. Warto zwróci uwag , e we wcze niejszych wersjach PHP
funkcja file() nie by a binarnie bezpieczna.
Czwart dost pn opcj jest wykorzystanie funkcji file_get_contents(). Dzia a ona tak samo jak
funkcja readfile(), z t tylko ró nic , e zwraca zawarto pliku w postaci a cucha znaków,
a nie przesy a jej do przegl darki.
Odczyt pojedynczego znaku  fgetc()
Inn metod jest odczytywanie pliku znak po znaku. Mo na tego dokona , stosuj c funkcj fgetc().
Jako jedyny parametr pobiera ona wska nik pliku i zwraca nast pny znajduj cy si w pliku znak.
Mo na zamieni p tl while w przyk adowym skrypcie na inn , u ywaj c funkcji fgetc()
w nast puj cy sposób:
while (!feof($wp)) {
$znak = fgetc($wp);
if (!feof($wp))
echo ($znak=="\n" ? "
": $znak);
}
Powy szy kod odczytuje za pomoc funkcji fgetc() pojedynczy znak z pliku i zapisuje go w zmien-
nej $znak, dopóki nie zostanie osi gni ty koniec pliku. Pó niej zastosowana zostaje ma a sztuczka
zamieniaj ca znaki ko ca wiersza (\n), na z amania wierszy HTML (
).
Dzieje si tak jedynie w celu czystego sformatowania strony. W przypadku próby wy wietlenia
pliku ze znakami nowych wierszy mi dzy rekordami ca y plik zosta by wy wietlony jako jeden
wiersz (warto sprawdzi ). Przegl darki nie generuj znaków niewidocznych, dlatego trzeba je
zast powa znakami HTML oznaczaj cymi nowy wiersz (
). W celu przeprowadzenia tej
zamiany zastosowany zosta operator trójkowy.
Pomniejszym efektem ubocznym stosowania funkcji fgetc() zamiast fgets() jest fakt, e w prze-
ciwie stwie do funkcji fgets() zwraca ona znak EOF. Dlatego po przeczytaniu znaku nale y ponow-
nie u y feof(), aby znak ten nie zosta wy wietlony w przegl darce.
Je eli nie istnieje wyra ny powód odczytywania pliku znak po znaku, stosowanie tej metody nie
jest polecane.
Odczytywanie zadanej d ugo ci  fread()
Ostatni metod odczytywania pliku jest zastosowanie funkcji fread() w celu odczytania z pliku
zadanej liczby bajtów. Funkcja ta posiada nast puj cy prototyp:
string fread(resource wskaznik_pliku, int dlugosc);
Funkcja fread() odczytuje przekazan jej liczb bajtów, chyba e wcze niej napotka znak ko ca
pliku lub pakietu sieciowego.
Inne przydatne funkcje plikowe
Poza powy szymi istnieje jeszcze kilka przydatnych w niektórych zastosowaniach funkcji pliko-
wych. Cz z nich zostanie opisana poni ej.
92 Cz I Stosowanie PHP
Sprawdzanie istnienia pliku  file_exists()
W celu sprawdzenia istnienia pliku bez otwierania go stosuje si funkcj file_exists():
if (file_exists("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt")) {
echo 'S zamówienia czekaj ce na przyj cie.';
} else {
echo 'Aktualnie nie ma adnych zamówie .';
}
Okre lanie wielko ci pliku  filesize()
W celu sprawdzenia wielko ci pliku stosuje si funkcj filesize():
echo filesize("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Funkcja ta zwraca wielko pliku w bajtach i mo e zosta zastosowana w po czeniu z funkcj
fread() w celu odczytania jednorazowo ca ego pliku (lub jakiej jego cz ci). Mo na zast pi ca y
przyk adowy skrypt nast puj cymi wierszami kodu:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
echo nl2br(fread($wp, filesize("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt"));
fclose($wp);
Funkcja nl2br() przekszta ca w generowanym kodzie HTML znaki \n w znaki nowego wiersza
(
).
Kasowanie pliku  unlink()
Mo na skasowa plik zamówie po ich przyj ciu, stosuj c w tym celu funkcj unlink() (nie ist-
nieje funkcja o nazwie delete). Na przyk ad:
unlink("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Powy sza funkcja zwraca warto false, je eli plik nie móg zosta usuni ty. Sytuacja taka zdarza
si zazwyczaj z powodu niewystarczaj cych praw do pliku b d je eli plik nie istnieje.
Poruszanie si wewn trz pliku  rewind(), fseek() i ftell()
Mo na porusza si w obr bie pliku i poznawa pozycje wska nika wewn trz tego pliku, stosuj c
funkcje rewind(), fseek() i ftell().
Funkcja rewind() ustawia wska nik pliku z powrotem na jego pocz tku. Funkcja ftell() infor-
muje, jak daleko (w bajtach) zosta przesuni ty wska nik. Na ko cu powy szego skryptu (przed
poleceniem fclose()) mo na na przyk ad doda nast puj ce wiersze :
echo 'Ko cowa pozycja wska nika pliku wynosi '.(ftell($wp));
echo '
';
rewind($wp);
echo 'Po przewini ciu, pozycja wynosi '.(ftell($wp));
echo '
';
Wynik wy wietlony w przegl darce powinien by podobny do przedstawionego na rysunku 2.5.
Funkcja fseek() stosowana jest do ustawiania wska nika pliku w dowolnym punkcie pliku. Jej pro-
totyp wygl da nast puj co:
int fseek(resource wskaznik_pliku, int offset [, int sk d]);
Rozdzia 2. Przechowywanie i wyszukiwanie danych 93
Rysunek 2.5.
Kiedy zamówienia s
przeczytane, wska nik
pliku wskazuje na jego
koniec, offset 311
bajtów. Wywo anie
przewini cia ustawia
go na pozycji 0
(na pocz tku pliku)
Wywo anie funkcji fseek() ustawia wska nik pliku wp w punkcie wskazywanym przez sk d i prze-
suwa o offset bajtów, licz c od pocz tku pliku. Opcjonalny parametr sk d posiada domy ln
warto SEEK_SET, czyli pocz tek pliku. Parametr ten mo e równie mie warto ci SEEK_CUR (bie-
ca pozycja wska nika pliku) oraz SEEK_END (koniec pliku).
Funkcja rewind() jest równoznaczna z wywo aniem funkcji fseek() z zerowym offsetem. Na przy-
k ad mo na zastosowa funkcj fseek() w celu znalezienia rodkowego rekordu w pliku danych
lub po to, aby przeprowadzi przeszukiwanie binarne. Zazwyczaj po osi gni ciu poziomu z o o-
no ci wymagaj cego stosowania takich mechanizmów polecane jest zastosowanie bazy danych.
Blokowanie pliku
Mo na wyobrazi sobie sytuacj , w której dwóch klientów stara si zamówi produkt w tym
samym czasie (dzieje si tak cz sto, zw aszcza gdy strona jest licznie odwiedzana). Co si stanie,
gdy jeden z klientów wywo a funkcj fopen() i zacznie zapis w pliku, a drugi uczyni to samo?
Jak b dzie wygl da ostateczna zawarto pliku? Czy najpierw zostanie zapisane pierwsze zamó-
wienie, a pó niej drugie, czy te odwrotnie? A mo e dojdzie do sytuacji niepo danej, na przy-
k ad oba zamówienia wymieszaj si ze sob ? Odpowied na powy sze pytania zale y od konkret-
nego systemu operacyjnego, ale zazwyczaj jest to wielka niewiadoma.
W celu unikni cia powy szych problemów stosuje si blokowanie plików. W PHP wykorzystuje
si w tym celu funkcj flock(). Powinna ona zosta wywo ana po otwarciu pliku, lecz przed odczy-
taniem go lub zapisaniem w nim danych.
Funkcja flock() posiada nast puj cy prototyp:
bool flock(resource wskaznik_pliku, int dzialanie [, int zablokuj])
Funkcji flock() nale y przekaza wska nik otwartego pliku i cyfr okre laj c wymagany rodzaj
zamka. Funkcja ta zwraca true, je eli zamek zosta prawid owo za o ony, a false w przeciw-
nym wypadku. Opcjonalny trzeci parametr b dzie zawiera warto true, je li za o enie zamka
spowoduje zablokowanie bie cego procesu (czyli zmuszenie go do przej cia w stan oczekiwania).
94 Cz I Stosowanie PHP
Mo liwe warto ci parametru dzialanie s przedstawione w tabeli 2.2.
Tabela 2.2. Warto ci parametru dzialanie funkcji flock()
Warto parametru dzialanie Znaczenie
LOCK_SH (dawniej 1) Blokowanie odczytu. Pozwala na dzielenie pliku z innymi czytaj cymi
LOCK_EX (dawniej 2) Blokowanie zapisu. Wy cza plik z u ytku; nie mo e on by dzielony
LOCK_UN (dawniej 3) Zwolnienie istniej cej blokady
LOCK_NB (dawniej 4) Dodanie warto ci 4 do parametru dzia anie przeciwdzia a zablokowaniu
próby za o enia blokady
Stosuj c funkcj flock(), nale y doda j do wszystkich skryptów korzystaj cych z pliku. W innym
przypadku jest ona bezwarto ciowa.
Nale y zwróci uwag , i flock() nie dzia a w systemie NFS i innych sieciowych systemach
plików. Nie dzia a ona równie w starszych systemach plików, które nie obs uguj blokowania
plików  systemem takim jest na przyk ad FAT. W niektórych systemach operacyjnych funkcja
ta jest zaimplementowana na poziomie procesu i nie b dzie dzia a prawid owo, je li stosowany
b dzie wielow tkowy API serwera.
Aby zastosowa j w powy szym przyk adzie, nale y zmieni skrypt przetworzzamowienie.php
w nast puj cy sposób:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
flock($wp, LOCK_EX); // blokada zapisu pliku
fwrite($wp, $ciagwyjsciowy);
flock($wp, LOCK_UN); // zwolnienie blokady zapisu
fclose($wp);
Do skryptu zobaczzamowienia.php nale y równie doda blokady:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'r');
flock($wp, LOCK_SH); // blokada odczytu pliku
// odczyt z pliku
flock($wp, LOCK_UN); // zwolnienie blokady odczytu
fclose($wp);
Kod jest teraz du o solidniejszy, ale ci gle niedoskona y. Co by si sta o, gdyby dwa skrypty jedno-
cze nie usi owa y za o y blokad ? Spowodowa oby to  wy cig o bardzo niepewnym wyniku, co
wywo a oby wiele kolejnych problemów. Lepsz metod jest zastosowanie DBMS (ang. Database
Management System  system zarz dzania bazami danych).
Lepszy sposób obróbki danych
 systemy zarz dzania bazami danych
Wszystkie powy sze przyk ady u ywa y plików jednorodnych. W drugiej cz ci tej ksi ki opisze-
my alternatyw tej metody  MySQL, system zarz dzania relacyjnymi bazami danych (RDBMS).
Mo na by zapyta , w jakim celu?
Rozdzia 2. Przechowywanie i wyszukiwanie danych 95
Problemy zwi zane ze stosowaniem plików jednorodnych
Istnieje kilka problemów zwi zanych z prac z plikami jednorodnymi:
Praca z du ym plikiem mo e by bardzo powolna.
Poszukiwanie konkretnego rekordu lub grupy rekordów w pliku jednorodnym jest trudne.
Je eli rekordy s uporz dkowane, mo na zastosowa pewien sposób przeszukiwania
binarnego w po czeniu z rekordami o ustalonej szeroko ci i przeszukiwaniem wed ug
pola kluczowego. Aby znale pewne wzory informacji (na przyk ad wyszukuj c wszystkich
klientów zamieszka ych w Gliwicach), nale y sprawdza indywidualnie ka dy rekord.
Problemy sprawia dost p jednoczesny. Powy ej przedstawione zosta y sposoby blokowania
plików, ale, jak opisano powy ej, mo e to spowodowa wy cig lub  w skie gard o . W razie
du ego ruchu na stronie liczna grupa u ytkowników mo e czeka na odblokowanie pliku,
aby z o y zamówienie. Je eli potrwa to zbyt d ugo, przenios si do konkurencji.
Wszystkie przedstawione powy ej procesy przetwarzania plików dzia aj sekwencyjnie
 rozpoczynaj od pocz tku pliku i czytaj go do ko ca. Aby umie ci lub skasowa rekordy
znajduj ce si w rodku pliku, nale y umie ci ca y plik w pami ci, dokona zmian,
a na ko cu zapisa go w ca o ci. Podczas pracy z du ymi plikami konieczno wykonywania
wszystkich tych kroków mo e sprawia problemy.
Poza ograniczonymi mo liwo ciami, oferowanymi przez pozwolenia dost pu do plików,
nie istnieje adna prosta metoda tworzenia ró nych poziomów dost pu do danych.
Jak RDBMS rozwi zuj powy sze problemy?
Relacyjne systemy zarz dzania bazami danych umo liwiaj rozwi zania wszystkich powy szych
kwestii.
RDBMS pozwalaj na znacznie szybszy dost p do plików ni pliki jednorodne. MySQL,
system bazodanowy prezentowany w tej ksi ce, nale y do najszybszych RDBMS.
RDBMS mo na zadawa zapytania o dane spe niaj ce konkretne kryteria.
RDBMS posiadaj wbudowany mechanizm zapewniania równoleg ego dost pu, który
pozostaje poza kr giem pracy programisty.
RDBMS pozwalaj na swobodny dost p do danych.
RDBMS posiadaj wbudowany system przywilejów. MySQL jest w tej dziedzinie
szczególnie rozbudowany.
Prawdopodobnie g ównym powodem u ywania RDBMS jest fakt, e funkcjonalno , któr powinny
posiada systemy przechowywania danych, zosta a ju w nich zaimplementowana (a przynajmniej
jej wi kszo ). Oczywi cie mo na napisa w asn bibliotek funkcji PHP, lecz po co ponownie
wymy la ko o?
W cz ci II tej ksi ki opiszemy ogóln zasad dzia ania relacyjnych baz danych, a w szczegól-
no ci konfiguracj i zastosowanie MySQL w tworzeniu stron WWW opartych na bazach danych.
Je eli tworzony jest prosty system, który nie wymaga pe nowymiarowej bazy danych, natomiast
chcemy unikn zak adania zamków i innych komplikacji zwi zanych z u ywaniem plików p a-
skich, mo na u y nowego rozszerzenia PHP o nazwie SQLite. Udost pnia ono SQL-owy interfejs do
pliku p askiego. W tej ksi ce skupimy si na u ywaniu serwera MySQL, natomiast wi cej informa-
cji na temat SQLite mo na znale pod adresami http://sqlite.org/ oraz http://www.php.net/sqlite.
96 Cz I Stosowanie PHP
Propozycje dalszych lektur
Wi cej informacji na temat interakcji z systemem plików znajduje si w rozdziale 19. Opiszemy
w nim metody zmiany pozwole dost pu, w asno ci i nazw plików, a tak e prac z katalogami
oraz interakcj ze rodowiskiem systemu plików.
Zalecamy równie lektur rozdzia u na temat systemów plików w podr czniku elektronicznym
PHP, dost pnym pod adresem http://www.php.net/filesystem.
W nast pnym rozdziale
W kolejnym rozdziale przedstawimy tablice  czym s i jak mog zosta zastosowane w skryp-
tach PHP do przetwarzania danych.


Wyszukiwarka

Podobne podstrony:
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v
PHP i MySQL Tworzenie stron WWW VP Wyd3
Tworzenie stron WWW Ćwiczenia praktyczne Wydanie III
PHP i MySQL Tworzenie aplikacji WWW phmsap
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
informatyka tworzenie stron www kurs wydanie iii radoslaw sokol ebook
ABC tworzenia stron WWW Wydanie II

więcej podobnych podstron