PHP i MySQL. Tworzenie stron WWW.
Vademecum profesjonalisty
Wydanie czwarte
Autorzy:
T³umaczenie: 978-83-246-0821-8
ISBN: 83-7197-641-0
Tytu³ orygina³u:
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¿liwoœci PHP, niezrównana wydajnoœæ MySQL i wielka, chêtna do pomocy spo³ecznoœæ,
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 treci
O autorach ............................................................................................ 23
O wspóautorach .................................................................................. 25
Wprowadzenie ...................................................................................... 27
Cz I
Stosowanie PHP ..................................................................37
Rozdzia 1.
Podstawowy kurs PHP ........................................................................... 39
Zastosowanie PHP ...............................................................................................................40
Tworzenie przykadowej aplikacji: „Czci samochodowe Janka” .....................................40
Formularz zamówienia ..................................................................................................40
Przetwarzanie formularza ..............................................................................................41
Osadzanie PHP w HTML ....................................................................................................42
Zastosowanie znaczników PHP .....................................................................................43
Instrukcje PHP ..............................................................................................................44
Odstpy .........................................................................................................................44
Komentarze ...................................................................................................................45
Dodawanie zawartoci dynamicznej ....................................................................................45
Wywoywanie funkcji ...................................................................................................46
Uywanie funkcji date() ................................................................................................46
Dostp do zmiennych formularza ........................................................................................47
Zmienne formularza ......................................................................................................47
czenie cigów ............................................................................................................49
Zmienne i cigi znaków ................................................................................................50
Identyfikatory ......................................................................................................................51
Typy zmiennych ..................................................................................................................51
Typy danych w PHP ......................................................................................................51
Sia typu ........................................................................................................................52
Rzutowanie typu ............................................................................................................52
Zmienne zmiennych ......................................................................................................53
Deklarowanie i uywanie staych ........................................................................................53
Zasig zmiennych ................................................................................................................54
Uywanie operatorów ..........................................................................................................55
Operatory arytmetyczne ................................................................................................55
Operatory cigów ..........................................................................................................56
Operatory przypisania ...................................................................................................56
Operatory porówna ......................................................................................................58
Operatory logiczne ........................................................................................................59
Operatory bitowe ...........................................................................................................60
Pozostae operatory .......................................................................................................60
8
PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Obliczanie sum w formularzu ..............................................................................................62
Pierwszestwo i kolejno ...................................................................................................63
Zarzdzanie 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 dziaa przy uyciu iteracji .............................................................................71
Ptle while .....................................................................................................................72
Ptle for i foreach ..........................................................................................................73
Ptle do..while ...............................................................................................................74
Wyamywanie si ze struktury skryptu ................................................................................75
Uywanie alternatywnych skadni struktur sterujcych .......................................................75
Uywanie struktury declare .................................................................................................76
W nastpnym rozdziale .......................................................................................................76
Rozdzia 2.
Przechowywanie i wyszukiwanie danych .......................................... 77
Zapisywanie danych do pó niejszego uycia ......................................................................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 caego pliku — readfile(), fpassthru(), file() .....................................................90
Odczyt pojedynczego znaku — fgetc() .........................................................................91
Odczytywanie zadanej dugoci — fread() ....................................................................91
Inne przydatne funkcje plikowe ...........................................................................................91
Sprawdzanie istnienia pliku — file_exists() ..................................................................92
Okrelanie wielkoci pliku — filesize() ........................................................................92
Kasowanie pliku — unlink() .........................................................................................92
Poruszanie si wewntrz pliku — rewind(), fseek() i ftell() ..........................................92
Blokowanie pliku ................................................................................................................93
Lepszy sposób obróbki danych — systemy zarzdzania bazami danych ...........................94
Problemy zwizane ze stosowaniem plików jednorodnych ...........................................95
Jak RDBMS rozwizuj powysze problemy? ..............................................................95
Propozycje dalszych lektur ..................................................................................................96
W nastpnym rozdziale .......................................................................................................96
Spis treci
9
Rozdzia 3.
Stosowanie
tablic
.................................................................................. 97
Czym s tablice? ..................................................................................................................97
Tablice indeksowane numerycznie ......................................................................................98
Inicjowanie tablic indeksowanych numerycznie ...........................................................98
Dostp do zawartoci tablicy .........................................................................................99
Dostp do tablic przy zastosowaniu ptli ....................................................................100
Tablice z innymi indeksami ...............................................................................................100
Inicjowanie tablicy ......................................................................................................100
Dostp do elementów tablicy ......................................................................................101
Stosowanie ptli ..........................................................................................................101
Operatory tablicowe ..........................................................................................................103
Tablice wielowymiarowe ..................................................................................................103
Sortowanie tablic ...............................................................................................................106
Stosowanie funkcji sort() ............................................................................................106
Stosowanie funkcji asort() i ksort() do porzdkowania tablic .....................................107
Sortowanie odwrotne ...................................................................................................107
Sortowanie tablic wielowymiarowych ...............................................................................108
Typy sortowa definiowane przez uytkownika .........................................................108
Odwrotne sortowanie zdefiniowane przez uytkownika .............................................109
Zmiany kolejnoci elementów w tablicach ........................................................................110
Stosowanie funkcji shuffle() .......................................................................................110
Stosowanie funkcji array_reverse() .............................................................................111
adowanie tablic z plików .................................................................................................112
Wykonywanie innych dziaa na tablicach ........................................................................114
Poruszanie si wewntrz tablicy
— funkcje each(), current(), reset(), end(), next(), pos() i prev() .............................114
Doczanie dowolnej funkcji do kadego 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 nastpnym rozdziale .....................................................................................................118
Rozdzia 4.
Manipulowanie cigami i wyraenia regularne .............................. 119
Przykadowa aplikacja — Inteligentny Formularz Pocztowy ...........................................119
Formatowanie cigów .......................................................................................................121
Przycinanie cigów — funkcje chop(), ltrim() i trim() ................................................121
Formatowanie cigów w celu ich prezentacji ..............................................................122
Formatowanie cigów do przechowania — funkcje addslashes() i stripslashes() ......125
czenie i rozdzielanie cigów za pomoc funkcji cigów ...............................................127
Stosowanie funkcji explode(), implode() i join() .........................................................127
Stosowanie funkcji strtok() .........................................................................................128
Stosowanie funkcji substr() .........................................................................................128
Porównywanie cigów .......................................................................................................129
Porzdkowanie cigów — funkcje strcmp(), strcasecmp() i strnatcmp() ....................129
Sprawdzanie dugoci cigu za pomoc funkcji strlen() ..............................................130
Dopasowywanie i zamiana podcigów za pomoc funkcji cigów ...................................130
Znajdowanie cigów w cigach — funkcje strstr(), strchr(), strrchr() i stristr() ..........131
Odnajdywanie pozycji podcigu — funkcje strpos() i strrpos() ..................................131
Zamiana podcigów — funkcje str_replace() i substr_replace() .................................132
Wprowadzenie do wyrae regularnych ............................................................................133
Podstawy .....................................................................................................................133
Zbiory i klasy znaków .................................................................................................134
Powtarzalno .............................................................................................................135
Podwyraenia ..............................................................................................................135
Podwyraenia policzalne .............................................................................................135
10
PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Kotwiczenie na pocztku lub na kocu cigu ..............................................................136
Rozgazianie ..............................................................................................................136
Dopasowywanie specjalnych znaków literowych .......................................................136
Podsumowanie znaków specjalnych ...........................................................................137
Umieszczanie wszystkiego razem (Inteligentny Formularz) .......................................137
Odnajdywanie podcigów za pomoc wyrae regularnych .............................................138
Zamiana podcigów za pomoc wyrae regularnych ......................................................139
Rozdzielanie cigów za pomoc wyrae regularnych .....................................................139
Propozycje dalszych lektur ................................................................................................140
W nastpnym 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
Wywoywanie funkcji .................................................................................................149
Wywoanie niezdefiniowanej funkcji ..........................................................................151
Wielko liter a nazwy funkcji ....................................................................................152
Definiowanie wasnych funkcji .........................................................................................152
Podstawowa struktura funkcji ...........................................................................................152
Nadawanie nazwy funkcji ...........................................................................................153
Parametry ..........................................................................................................................154
Zasig ................................................................................................................................156
Przekazanie przez referencj czy przekazanie przez warto? ..........................................158
Stosowanie sowa kluczowego return ................................................................................159
Zwracanie wartoci przez funkcje .....................................................................................160
Implementacja rekurencji ..................................................................................................161
Przestrzenie nazw ........................................................................................................162
Propozycje dalszych lektur ................................................................................................163
W nastpnym 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 dostpu przy uyciu private i public .........................................................172
Wywoywanie operacji klas ...............................................................................................172
Implementacja dziedziczenia w PHP .................................................................................173
Kontrolowanie widocznoci w trakcie dziedziczenia przy uyciu private i protected .174
Uniewanianie .............................................................................................................175
Zapobieganie dziedziczeniu i uniewanianiu przy uyciu final ..................................176
Wielodziedziczenie .....................................................................................................177
Implementowanie interfejsów .....................................................................................177
Spis treci
11
Tworzenie klas ..................................................................................................................178
Tworzenie kodu dla wasnej klasy .....................................................................................179
Zaawansowane mechanizmy obiektowe w PHP ................................................................186
Uywanie staych klasowych ......................................................................................186
Implementowanie metod statycznych .........................................................................186
Sprawdzanie typu klasy i wskazywanie typu ..............................................................186
Pó ne wizania statyczne ............................................................................................187
Klonowanie obiektów .................................................................................................188
Uywanie klas abstrakcyjnych ....................................................................................188
Przecianie metod przy uyciu __call() .....................................................................188
Uywanie metody __autoload() ..................................................................................189
Implementowanie iteratorów i iteracji .........................................................................190
Przeksztacanie klas w acuchy znaków ....................................................................191
Uywanie API Reflection ............................................................................................192
W nastpnym rozdziale .....................................................................................................192
Rozdzia 7.
Obsuga bdów i wyjtków .............................................................. 195
Koncepcja obsugi wyjtków .............................................................................................195
Klasa Exception .................................................................................................................196
Wyjtki definiowane przez uytkownika ..........................................................................197
Wyjtki w Czciach samochodowych Janka ....................................................................200
Wyjtki i inne mechanizmy obsugi bdów w PHP ..........................................................202
Propozycje dalszych lektur ................................................................................................203
W nastpnym 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
Wartoci ......................................................................................................................208
Klucze .........................................................................................................................209
Schematy .....................................................................................................................209
Relacje .........................................................................................................................210
Jak zaprojektowa internetow baz danych? ...................................................................211
Okrel obiekty wiata realnego, których model chcesz wykona ................................211
Unikaj przechowywania redundantnych danych .........................................................211
Zapisuj atomowe wartoci kolumn ..............................................................................213
Dobierz waciwe klucze .............................................................................................214
Pomyl 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 nastpnym rozdziale .....................................................................................................216
Rozdzia 9.
Tworzenie internetowej bazy danych ............................................... 217
Uytkowanie monitora MySQL ........................................................................................218
Logowanie si do serwera MySQL ...................................................................................219
Tworzenie baz i rejestrowanie uytkowników ..................................................................220
Definiowanie uytkownikó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 uytkowników: polecenie GRANT ......................................................221
Typy i poziomy przywilejów ......................................................................................223
Polecenie REVOKE ....................................................................................................224
Przykady uycia polece GRANT i REVOKE ..........................................................225
Rejestrowanie uytkownika czcego si z internetu .......................................................226
Uywanie 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 nastpnym 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 speniajcych okrelone kryteria ............................................243
Wyszukiwanie danych w wielu tabelach .....................................................................245
Szeregowanie danych w okrelonym porzdku ...........................................................249
Grupowanie i agregowanie danych .............................................................................250
Wskazanie wierszy, które maj by wywietlone .......................................................252
Uywanie podzapyta .................................................................................................252
Dokonywanie zmian rekordów w bazie danych ................................................................255
Zmiana struktury istniejcych tabel ...................................................................................255
Usuwanie rekordów z bazy danych ...................................................................................257
Usuwanie tabel ..................................................................................................................257
Usuwanie caych baz danych .............................................................................................258
Propozycje dalszych lektur ................................................................................................258
W nastpnym rozdziale .....................................................................................................258
Rozdzia 11.
czenie si z baz MySQL za pomoc PHP .................................... 259
Jak dziaa internetowa baza danych? .................................................................................259
Wykonywanie zapyta do bazy danych z poziomu strony WWW ....................................262
Sprawdzenie poprawnoci wpisanych danych .............................................................263
Ustanawianie poczenia z baz danych ......................................................................264
Wybór waciwej bazy danych ....................................................................................265
Wysyanie zapyta do bazy danych ............................................................................265
Odczytywanie rezultatów zapyta ...............................................................................266
Zamykanie poczenia z baz danych .........................................................................267
Wstawianie nowych danych do bazy .................................................................................267
Uywanie instrukcji przygotowywanych ...........................................................................270
Uywanie innych interfejsów bazodanowych PHP ...........................................................272
Stosowanie ogólnego interfejsu bazodanowego: PEAR MDB2 ..................................272
Propozycje dalszych lektur ................................................................................................274
W nastpnym rozdziale .....................................................................................................274
Spis treci
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 dostpu: w jaki sposób MySQL uywa tabel przywilejów ...........................279
Zmiana przywilejów: kiedy zmiany zostan uwzgldnione? ......................................281
Ochrona bazy danych ........................................................................................................282
MySQL z perspektywy systemu operacyjnego ...........................................................282
Hasa ...........................................................................................................................282
Przywileje uytkownikó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
Uywanie wartoci domylnych ..................................................................................292
Wicej wskazówek ......................................................................................................292
Tworzenie kopii zapasowej bazy danych MySQL ............................................................292
Przywracanie bazy danych MySQL ..................................................................................293
Implementowanie replikacji ..............................................................................................293
Konfigurowanie serwera nadrzdnego ........................................................................294
Transfer danych pocztkowych ...................................................................................294
Konfigurowanie odbiorcy lub odbiorców ....................................................................295
Propozycje dalszych lektur ................................................................................................296
W nastpnym rozdziale .....................................................................................................296
Rozdzia 13.
Zaawansowane programowanie w MySQL ...................................... 297
Instrukcja LOAD DATA INFILE .....................................................................................297
Maszyny zapisu .................................................................................................................298
Transakcje .........................................................................................................................299
Definicje dotyczce transakcji .....................................................................................299
Uycie transakcji w InnoDB .......................................................................................300
Klucze obce .......................................................................................................................301
Procedury skadowane .......................................................................................................302
Prosty przykad ............................................................................................................302
Zmienne lokalne ..........................................................................................................304
Kursory i struktury sterujce .......................................................................................305
Propozycje dalszych lektur ................................................................................................308
W nastpnym rozdziale .....................................................................................................308
Cz III
E-commerce i bezpieczestwo ......................................309
Rozdzia 14.
Komercyjne
witryny
internetowe ....................................................... 311
Co chcemy osign? ........................................................................................................311
Rodzaje komercyjnych stron WWW .................................................................................311
Publikowanie informacji w broszurach internetowych ................................................312
Przyjmowanie zamówie na produkty i usugi ............................................................315
Dostarczanie usug lub wyrobów majcych posta cyfrow .......................................319
14
PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty
Zwikszanie wartoci produktów i usug ....................................................................319
Ograniczanie kosztów .................................................................................................320
Ryzyko i zagroenia ..........................................................................................................320
Crackerzy ....................................................................................................................321
Przycignicie niewystarczajcej liczby klientów .......................................................321
Awarie sprztu komputerowego ..................................................................................322
Awarie sieci elektrycznych, komunikacyjnych i komputerowych
oraz systemu wysykowego ......................................................................................322
Silna konkurencja ........................................................................................................322
Bdy w oprogramowaniu ...........................................................................................323
Zmiany polityki rzdowej ...........................................................................................323
Ograniczenie pojemnoci systemów ...........................................................................323
Wybór strategii ..................................................................................................................323
W nastpnym rozdziale .....................................................................................................324
Rozdzia 15.
Bezpieczestwo komercyjnych stron WWW ..................................... 325
Jak wag maj posiadane przez nas informacje? .............................................................326
Zagroenia bezpieczestwa ...............................................................................................326
Ujawnienie informacji poufnych .................................................................................327
Utrata lub zniszczenie danych .....................................................................................328
Modyfikacje danych ....................................................................................................329
Blokada usugi .............................................................................................................330
Bdy w oprogramowaniu ...........................................................................................331
Zaprzeczenie korzystania z usugi ...............................................................................332
Uyteczno, wydajno, koszty i bezpieczestwo ...........................................................333
Opracowanie polityki bezpieczestwa ...............................................................................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 zwykych plików ..........................................................342
Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL .............................342
Bezpieczestwo fizyczne ...................................................................................................343
W nastpnym rozdziale .....................................................................................................343
Rozdzia 16.
Bezpieczestwo
aplikacji
internetowych
......................................... 345
Strategie zapewniania bezpieczestwa ..............................................................................345
Planowanie z wyprzedzeniem .....................................................................................346
Równowaga midzy bezpieczestwem i uytecznoci ..............................................346
Monitorowanie bezpieczestwa ..................................................................................347
Ogólne podejcie do bezpieczestwa ..........................................................................347
Rozpoznawanie zagroe ..................................................................................................347
Dostp do danych poufnych i ich modyfikowanie ......................................................347
Utrata lub zniszczenie danych .....................................................................................348
Zablokowanie usugi ...................................................................................................348
Wstrzykiwanie kodu ....................................................................................................349
Zamanie zabezpiecze dostpu do serwera ................................................................349
Identyfikacja uytkowników .............................................................................................349
Crackerzy ....................................................................................................................350
Niewiadomi uytkownicy zainfekowanych komputerów ..........................................350
Spis treci
15
Rozczarowani pracownicy ..........................................................................................350
Zodzieje sprztu komputerowego ..............................................................................350
Autorzy systemów .......................................................................................................350
Zabezpieczanie kodu ródowego ......................................................................................351
Filtrowanie danych pochodzcych od uytkowników .................................................351
Uniewanianie danych wynikowych ...........................................................................355
Organizacja kodu ródowego .....................................................................................356
Zawarto kodu ródowego .......................................................................................357
Zagadnienia dotyczce systemu plików ......................................................................358
Stabilno kodu i bdy ...............................................................................................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 dziaajce na serwerach komercyjnych ...................................364
Bezpieczestwo serwera bazy danych ...............................................................................365
Uytkownicy i system uprawnie ...............................................................................365
Wysyanie 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
Bezpieczestwo komputerów i systemów operacyjnych ...................................................369
Uaktualnianie systemu operacyjnego ..........................................................................369
Udostpnianie tylko niezbdnych usug ......................................................................370
Fizyczne zabezpieczenie serwera ................................................................................370
Planowanie dziaa na wypadek awarii .............................................................................371
W nastpnym rozdziale .....................................................................................................372
Rozdzia 17.
Uwierzytelnianie przy uyciu PHP i MySQL ........................................ 373
Identyfikacja uytkowników .............................................................................................373
Implementacja kontroli dostpu ........................................................................................374
Przechowywanie hase dostpu ...................................................................................376
Szyfrowanie hase .......................................................................................................378
Zastrzeganie wicej ni jednej strony ..........................................................................379
Podstawowa metoda uwierzytelniania ...............................................................................380
Wykorzystanie podstawowej metody uwierzytelniania w PHP .........................................381
Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache
przy uyciu plików .htaccess ..........................................................................................383
Wykorzystanie moduu mod_auth_mysql do celów uwierzytelniania ...............................386
Instalacja moduu mod_auth_mysql ............................................................................386
Praca z mod_auth_mysql ............................................................................................387
Implementacja wasnej metody uwierzytelniania ..............................................................388
Propozycje dalszych lektur ................................................................................................388
W nastpnym rozdziale .....................................................................................................389
Rozdzia 18.
Zabezpieczanie transakcji przy uyciu PHP i MySQL ....................... 391
Zapewnienie bezpieczestwa transakcji ............................................................................391
Komputer uytkownika ...............................................................................................392
Internet ........................................................................................................................393
System docelowy ........................................................................................................394
Wykorzystanie protokou Secure Sockets Layer (SSL) ....................................................395
Kontrola danych pochodzcych od uytkownika ..............................................................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 nastpnej czci ............................................................................................................408
Cz IV
Zaawansowane techniki PHP ..........................................409
Rozdzia 19.
Interakcja z systemem plików i serwerem ....................................... 411
Wprowadzenie do wysyania plików .................................................................................411
Kod HTML sucy do wysyania plików ...................................................................412
Tworzenie PHP obsugujcego plik ............................................................................413
Najczciej 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 waciwoci pliku ...........................................................................................424
Tworzenie, usuwanie i przenoszenie plików ...............................................................425
Stosowanie funkcji uruchamiajcych programy ................................................................425
Interakcja ze rodowiskiem: funkcje getenv() i putenv() ..................................................427
Propozycje dalszych lektur ................................................................................................428
W nastpnym rozdziale .....................................................................................................428
Rozdzia 20.
Stosowanie funkcji sieci i protokou .................................................. 429
Przegld protokoów ..........................................................................................................429
Wysyanie i odczytywanie poczty elektronicznej ..............................................................430
Korzystanie z danych z innych witryn WWW ...................................................................430
Stosowanie funkcji pocze sieciowych ..........................................................................433
Tworzenie kopii bezpieczestwa lub kopii lustrzanej pliku ..............................................436
Stosowanie FTP w celu utworzenia kopii bezpieczestwa lub kopii lustrzanej pliku ......436
Wysyanie plików ........................................................................................................442
Unikanie przekroczenia dopuszczalnego czasu ...........................................................442
Stosowanie innych funkcji FTP ...................................................................................443
Propozycje dalszych lektur ................................................................................................443
W nastpnym rozdziale .....................................................................................................444
Rozdzia 21.
Zarzdzanie dat i czasem ................................................................ 445
Uzyskiwanie informacji o dacie i czasie w PHP ................................................................445
Stosowanie funkcji date() ............................................................................................445
Obsuga znaczników czasu Uniksa .............................................................................447
Stosowanie funkcji getdate() .......................................................................................448
Sprawdzanie poprawnoci dat przy uyciu funkcji checkdate() ..................................449
Formatowanie znaczników czasu ................................................................................450
Konwersja pomidzy 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 nastpnym rozdziale .....................................................................................................456
Spis treci
17
Rozdzia 22.
Generowanie
obrazków .................................................................... 457
Konfigurowanie obsugi 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
Wywietlanie ostatecznej grafiki .................................................................................463
Kocowe czynnoci porzdkujce ..............................................................................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 kocowy ..............................................................................................................471
Rysowanie figur i wykresów danych .................................................................................471
Inne funkcje obrazków ......................................................................................................478
Propozycje dalszych lektur ................................................................................................478
W nastpnym rozdziale .....................................................................................................478
Rozdzia 23.
Stosowanie kontroli sesji w PHP ......................................................... 479
Czym jest kontrola sesji? ...................................................................................................479
Podstawowa zasada dziaania 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
Zgaszanie zmiennych sesji .........................................................................................482
Stosowanie zmiennych sesji ........................................................................................483
Usuwanie zmiennych i niszczenie sesji .......................................................................483
Przykad prostej sesji .........................................................................................................483
Konfiguracja kontroli sesji ................................................................................................485
Implementacja uwierzytelniania w kontroli sesji ...............................................................485
Propozycje dalszych lektur ................................................................................................491
W nastpnym rozdziale .....................................................................................................491
Rozdzia 24.
Inne przydatne wasnoci .................................................................. 493
Stosowanie magicznych cudzysowów ..............................................................................493
Wykonywanie cigów — funkcja eval() ...........................................................................494
Zakoczenie wykonania — die i exit ................................................................................495
Serializacja zmiennych i obiektów ....................................................................................495
Pobieranie informacji na temat rodowiska PHP ...............................................................496
Uzyskiwanie informacji na temat zaadowanych rozszerze ......................................496
Identyfikacja waciciela skryptu ................................................................................497
Uzyskiwanie informacji na temat daty modyfikacji skryptu .......................................497
Czasowa zmiana rodowiska wykonawczego ...................................................................497
Podwietlanie róde ..........................................................................................................498
Uywanie PHP w wierszu polece ....................................................................................499
W nastpnej czci ............................................................................................................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 duych projektach ............................... 503
Zastosowanie inynierii 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 wewntrznych funkcji ........................................................510
Implementacja kontroli wersji ...........................................................................................510
Wybór rodowiska programistycznego .............................................................................511
Dokumentacja projektów ...................................................................................................511
Prototypowanie ..................................................................................................................512
Oddzielanie logiki i zawartoci .........................................................................................513
Optymalizacja kodu ...........................................................................................................514
Stosowanie prostych optymalizacji .............................................................................514
Stosowanie produktów firmy Zend .............................................................................514
Testowanie ........................................................................................................................515
Propozycje dalszych lektur ................................................................................................516
W nastpnym rozdziale .....................................................................................................516
Rozdzia 26.
Usuwanie
bdów ............................................................................... 517
Bdy programistyczne ......................................................................................................517
Bdy skadni ...............................................................................................................517
Bdy wykonania .........................................................................................................519
Bdy logiczne .............................................................................................................523
Pomoc w usuwaniu bdów w zmiennych .........................................................................525
Poziomy zgaszania bdów ...............................................................................................527
Zmiana ustawie zgaszania bdów ..................................................................................528
Wyzwalanie wasnych bdów ..........................................................................................529
Elegancka obsuga bdów ................................................................................................529
W nastpnym rozdziale .....................................................................................................532
Rozdzia 27.
Tworzenie uwierzytelniania uytkowników i personalizacji ............ 533
Skadniki rozwizania .......................................................................................................533
Identyfikacja uytkownika i personalizacja .................................................................534
Przechowywanie zakadek ..........................................................................................535
Rekomendowanie zakadek .........................................................................................535
Przegld rozwizania .........................................................................................................535
Implementacja bazy danych ..............................................................................................537
Implementacja podstawowej witryny ................................................................................538
Implementacja uwierzytelniania uytkowników ...............................................................540
Rejestracja uytkowników ..........................................................................................540
Logowanie ...................................................................................................................545
Wylogowanie ..............................................................................................................548
Zmiana hasa ...............................................................................................................549
Ustawianie zapomnianych hase ..................................................................................551
Implementacja przechowywania i odczytywania zakadek ..............................................555
Dodawanie zakadek ...................................................................................................555
Wywietlanie zakadek ................................................................................................557
Usuwanie zakadek ......................................................................................................557
Implementacja rekomendacji .............................................................................................559
Rozwijanie projektu i moliwe rozszerzenia .....................................................................562
W nastpnym rozdziale .....................................................................................................562
Spis treci
19
Rozdzia 28.
Tworzenie koszyka na zakupy ........................................................... 563
Skadniki rozwizania .......................................................................................................563
Tworzenie katalogu online ..........................................................................................564
ledzenie zakupów uytkownika podczas przegldania ..............................................564
Implementacja systemu patnoci ................................................................................564
Interfejs administratora ...............................................................................................565
Przegld rozwizania .........................................................................................................565
Implementacja bazy danych ..............................................................................................568
Implementacja katalogu online ..........................................................................................570
Przedstawianie kategorii .............................................................................................571
Wywietlanie ksiek danej kategorii .........................................................................574
Przedstawianie szczegóowych danych ksiki ...........................................................575
Implementacja koszyka na zakupy ....................................................................................577
Stosowanie skryptu pokaz_kosz.php ...........................................................................577
Podgld koszyka ..........................................................................................................580
Dodawanie produktów do koszyka .............................................................................582
Zapisywanie uaktualnionego koszyka .........................................................................583
Wywietlanie podsumowania w pasku nagówka .......................................................584
Pobyt w kasie ..............................................................................................................584
Implementacja patnoci ....................................................................................................589
Implementacja interfejsu administratora ...........................................................................591
Rozwijanie projektu ..........................................................................................................598
Zastosowanie istniejcego systemu ...................................................................................598
W nastpnym rozdziale .....................................................................................................598
Rozdzia 29.
Tworzenie serwisu poczty elektronicznej opartego na WWW ......... 599
Skadniki rozwizania .......................................................................................................599
Protokoy poczty: POP3 i IMAP .................................................................................599
Obsuga POP3 i IMAP w PHP ....................................................................................600
Przegld rozwizania .........................................................................................................601
Konfiguracja bazy danych .................................................................................................603
Architektura skryptu ..........................................................................................................604
Logowanie i wylogowanie .................................................................................................608
Konfiguracja kont ..............................................................................................................611
Tworzenie nowego konta ............................................................................................613
Modyfikacja istniejcego konta ...................................................................................614
Usuwanie konta ...........................................................................................................614
Odczytywanie poczty ........................................................................................................615
Wybór konta ................................................................................................................615
Przegldanie zawartoci skrzynki ................................................................................617
Odczytywanie wiadomoci pocztowych .....................................................................619
Przegldanie nagówków wiadomoci .........................................................................622
Usuwanie wiadomoci .................................................................................................623
Wysyanie wiadomoci ......................................................................................................623
Wysyanie nowej wiadomoci .....................................................................................624
Odpowiadanie i przekazywanie poczty .......................................................................625
Rozwijanie projektu ..........................................................................................................626
W nastpnym rozdziale .....................................................................................................627
Rozdzia 30.
Tworzenie menedera list pocztowych ............................................. 629
Skadniki rozwizania .......................................................................................................629
Konfiguracja bazy danych list i abonentów .................................................................630
Wysyanie plików ........................................................................................................630
Wysyanie wiadomoci z zacznikami .......................................................................631
Przegld rozwizania .........................................................................................................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 uytkownika ..................................................................................645
Przegldanie list ..........................................................................................................646
Przegldanie informacji na temat listy ........................................................................650
Przegldanie archiwum listy .......................................................................................652
Zapisywanie i wypisywanie ........................................................................................653
Zmiana konfiguracji konta ..........................................................................................654
Zmiana hasa ...............................................................................................................654
Wylogowanie ..............................................................................................................656
Implementacja funkcji administratora ...............................................................................656
Tworzenie nowej listy .................................................................................................657
Wysyanie nowych wiadomoci ..................................................................................658
Obsuga wysyania wielu plików .................................................................................661
Podgld wiadomoci ...................................................................................................664
Rozsyanie wiadomoci ...............................................................................................665
Rozwijanie projektu ..........................................................................................................670
W nastpnym rozdziale .....................................................................................................670
Rozdzia 31.
Tworzenie forum WWW ........................................................................ 671
Proces ................................................................................................................................671
Skadniki rozwizania .......................................................................................................672
Przegld rozwizania .........................................................................................................673
Projektowanie bazy danych ...............................................................................................674
Przegldanie drzewa artykuów .........................................................................................676
Rozwijanie i zwijanie ..................................................................................................678
Wywietlanie artykuów ..............................................................................................680
Korzystanie z klasy wezel_drzewa ..............................................................................681
Przegldanie pojedynczych artykuów ..............................................................................687
Dodawanie nowych artykuów ..........................................................................................688
Rozszerzenia ......................................................................................................................694
Wykorzystanie istniejcego systemu .................................................................................694
W nastpnym rozdziale .....................................................................................................694
Rozdzia 32.
Tworzenie dokumentów spersonalizowanych w formacie PDF ...... 695
Opis projektu .....................................................................................................................695
Ocena formatów dokumentów ....................................................................................696
Skadniki rozwizania .......................................................................................................700
System pyta i odpowiedzi ..........................................................................................700
Oprogramowanie generujce dokumenty ....................................................................700
Przegld rozwizania .........................................................................................................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 zwizane z nagówkami ....................................................................................723
Rozwijanie projektu ..........................................................................................................724
W nastpnym rozdziale .....................................................................................................724
Spis treci
21
Rozdzia 33.
Korzystanie z usug sieciowych za pomoc XML i SOAP ................ 725
Opis projektu: korzystanie z jzyka XML i usug sieciowych ...........................................725
Podstawy XML ...........................................................................................................726
Podstawy usug sieciowych .........................................................................................729
Skadniki rozwizania .......................................................................................................730
Korzystanie z interfejsu usug sieciowych Amazon.com ............................................730
Wczytywanie dokumentów XML: odpowiedzi REST ................................................731
Korzystanie z SOAP za pomoc PHP .........................................................................732
Buforowanie ................................................................................................................732
Opis rozwizania ...............................................................................................................732
Aplikacja gówna ........................................................................................................734
Wywietlanie listy ksiek z danej kategorii ...............................................................742
Tworzenie obiektu klasy WynikiWyszukiwania .........................................................743
Korzystanie z REST do wykonywania da i odczytywania wyników .....................750
Korzystanie z protokou SOAP do wykonywania dania i odczytywania wyniku ....755
Buforowanie danych pochodzcych z dania ............................................................756
Konstrukcja koszyka na zakupy ..................................................................................758
Przejcie do kasy na witrynie Amazon.com ................................................................761
Instalacja kodu ródowego ...............................................................................................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 dziaajce po stronie klienta ...........................................................................767
Skrypty dziaajce po stronie serwera .........................................................................768
XML i XSLT ...............................................................................................................768
Podstawy technologii Ajax ................................................................................................768
Obiekt XMLHTTPRequest .........................................................................................768
Komunikowanie si z serwerem ..................................................................................770
Przetwarzanie odpowiedzi serwera .............................................................................772
Poczenie wszystkich elementów aplikacji ................................................................773
Dodanie nowych elementów do wczeniejszych projektów ..............................................775
Dodanie elementów Ajaksa do witryny ZakadkaPHP ................................................777
róda 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 uyciu binariów ...................................................................................794
Instalacja przy uyciu kodów ródowych ..................................................................794
Plik httpd.conf — informacje kocowe .......................................................................800
Czy obsuga PHP dziaa poprawnie? ...........................................................................800
Czy SSL dziaa 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 powicone PHP ...................................................................................................811
Zasoby powicone MySQL i SQL ...................................................................................813
Zasoby powicone serwerowi Apache .............................................................................813
Zasoby powicone tworzeniu stron WWW ......................................................................814
Skorowidz ............................................................................................. 815
Rozdzia 2.
Przechowywanie
i wyszukiwanie danych
W poprzednim rozdziale omówilimy sposoby dostpu do danych umieszczonych w formularzu
HTML i metody manipulowania nimi. Teraz przedstawiamy metody zapisywania informacji w celu
pó niejszego ich wykorzystania. W wikszoci przypadków, wczajc w to przykad z poprzed-
niego rozdziau, celem jest przechowanie danych i pó niejsze ich zaadowanie. W tym przykadzie
naley zapamita zamówienie klienta, aby pó niej je zrealizowa.
W tym rozdziale opiszemy sposoby zapisania do pliku zamówienia przedstawionego w przykadzie
oraz metody pó niejszego odczytania tego pliku. Pokaemy równie, dlaczego takie rozwiza-
nie nie zawsze jest najlepsze. Pracujc z wiksz liczb zamówie, powinno si zamiast niego
uywa systemu zarzdzania bazami danych, takiego jak MySQL.
W tym rozdziale zostan poruszone nastpujce zagadnienia:
zapisywanie danych do pó niejszego uycia,
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 zarzdzania bazami danych.
Zapisywanie danych do pó niejszego uycia
Istniej dwa sposoby przechowywania danych — w pliku jednorodnym oraz w bazie danych.
Plik jednorodny moe mie wiele rónych formatów, lecz zazwyczaj terminem tym oznacza si
prosty plik tekstowy. W opisywanym przykadzie dane s zapisywane w pliku tekstowym, jedno
zamówienie w jednym wierszu.
78
Cz I
Stosowanie PHP
Zapisywanie zamówie w taki wanie sposób jest rozwizaniem bardzo prostym w realizacji, ale
zarazem jest ono obarczone licznymi ograniczeniami, co zostanie pokazane w dalszej czci roz-
dziau. Przy obróbce danych znacznej wielkoci 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 zbliony sposób jak w wielu innych, podob-
nych jzykach programowania. Osoby znajce jzyk C lub skrypty powoki Uniksa powinny bez
trudu rozpozna podobiestwa tych procedur.
Przechowywanie i wyszukiwanie zamówie Janka
Poniej uyta zostanie nieco zmodyfikowana wersja formularza zamówie, przedstawionego
w poprzednim rozdziale. Na pocztku naley 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
(przykady s dostpne na pycie CD doczonej do ksiki).
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 pobierajca
równie adres klienta
Pole formularza zawierajce adres klienta nosi nazw
adres
. Podczas przetwarzania w PHP daje
ono zmienn o nazwie
$adres
, pod warunkiem stosowania stylu krótkiego dostpu do zmiennych.
Naley pamita, e przy zastosowaniu stylu dugiego odwoanie do tej zmiennej to
$REQUEST
´['adres']
,
$_POST['adres']
lub
$_GET['adres']
, zalenie od metody zatwierdzenia (szczegóy
opisalimy w rozdziale 1.).
W tym rozdziale kade nadchodzce zamówienie zostanie zapisane w tym samym pliku. Skon-
struowany pó niej interfejs WWW pozwoli pracownikom Janka na przegldanie przyjtych
zamówie.
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
79
Przetwarzanie plików
Zapisywanie danych w pliku nastpuje w trzech etapach. S to:
1.
Otwarcie pliku. Jeeli dany plik nie istnieje, naley go utworzy.
2.
Zapisanie danych w pliku.
3.
Zamknicie pliku.
Podobnie, trójetapowo, przebiega odczytywanie danych z pliku:
1.
Otwarcie pliku. Jeeli plik nie moe zosta otwarty (np. nie istnieje), fakt ten musi zosta
rozpoznany i program powinien zakoczy si w elegancki sposób (tzn. nie bombardujc
uytkownika dokadnymi i niepotrzebnymi mu informacjami o bdach).
2.
Odczytanie danych z pliku.
3.
Zamknicie pliku.
Przy odczytywaniu danych z pliku dostpnych jest wiele sposobów ustalania iloci pobieranych
naraz danych. Rozwizania najczciej stosowane zostan opisane bardziej szczegóowo w poni-
szych punktach. Na pocztek przedstawimy mechanizm otwierania plików.
Otwieranie pliku
Aby otworzy plik w PHP, stosuje si funkcj
fopen()
. Otwierajc plik, naley zadeklarowa spo-
sób, w jaki bdzie on uywany. 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 moe równoczenie zosta otwarty przez inny skrypt oraz czy uytkow-
nik posiada uprawnienia do dostpu i modyfikacji pliku. Przede wszystkim tryb otwarcia pliku
dostarcza systemowi operacyjnemu mechanizmu przetwarzania da dostpu od innych uyt-
kowników bd skryptów oraz metody sprawdzania uprawnie dostpu do konkretnych plików.
Przy otwieraniu pliku naley mie trzy informacje:
1.
Mona otworzy plik w nastpujcych trybach: tylko do odczytu, tylko do zapisu lub
do obu tych celów.
2.
Przy zapisywaniu danych w pliku mona nadpisa istniejce dane bd doda nowe
na jego kocu. Mona równie opracowa zgrabny sposób zakaczania programu zamiast
nadpisywania pliku na pliku, który ju istnieje.
3.
Przy zapisywaniu pliku przy uyciu systemu rozróniajcego pliki tekstowe i binarne
mona okreli dany typ.
Funkcja
fopen()
rozpoznaje poczenia tych trzech opcji.
80
Cz I
Stosowanie PHP
Stosowanie funkcji fopen() do otwarcia pliku
Aby zapisa zamówienie klienta do pliku zamówie Janka, naley zastosowa nastpujcy wiersz
kodu:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'w');
Przy wywoaniu funkcja
fopen
spodziewa si dwóch lub trzech parametrów. Zazwyczaj stosuje
si dwa, jak pokazano w powyszym przykadzie.
Pierwszy parametr to nazwa pliku, który ma zosta otwarty. Mona tu okreli ciek dostpu
do pliku, jak w powyszym przykadzie; plik zamowienia.txt znajduje si w katalogu zamówie.
Zastosowana zostaa wbudowana w PHP zmienna
$SERVER['DOCUMENT_ROOT']
lecz, ze wzgldu
na uciliwo stosowania penych nazw zmiennych formy, przypisalimy jej krótsz nazw.
Zmienna ta wskazuje na podstawowy element drzewa katalogów serwera WWW. W wierszu
tym uyto symbolu
..
, oznaczajcego „katalog nadrzdny katalogu macierzystego”, który ze
wzgldu na bezpieczestwo znajduje si poza drzewem katalogów. Nie mona pozwoli na inny
sposób dostpu przez WWW do tego pliku poza dostarczanym interfejsem. cieka tego typu
jest nazywana ciek wzgldn, poniewa opisuje miejsce w systemie plików w zalenoci od
katalogu macierzystego.
Podobnie jak w przypadku nadawania zmiennym formy krótkich nazw, na pocztku skryptu
naley umieci nastpujcy wiersz:
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
w celu skopiowania zawartoci zmiennej noszcej nazw dug do zmiennej o krótkiej nazwie.
Analogicznie do rónorodnoci metod dostpu do danych formy, istniej równie róne sposoby
dostpu do predefiniowanych zmiennych serwera. W zalenoci od ustawie serwera (szczegó-
owe informacje na ten temat mona znale w rozdziale 1.) mona 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.
Mona równie okreli bezwzgldn ciek dostpu do pliku, bdc ciek od katalogu
gównego (/ w systemach Unix i zazwyczaj C:\ w systemach Windows). Na przykadowym ser-
werze Uniksa cieka ta moe wyglda nastpujco: /home/ksiazka/zamowienia. Niedogodnoci
tej metody, zwaszcza w wypadku korzystania z obcego serwera, jest moliwo modyfikacji
cieki bezwzgldnej, co moe oznacza powane zmiany w wielu skryptach.
Jeeli cieka nie zostanie podana, PHP bdzie szuka pliku i ewentualnie utworzy go w tym samym
katalogu, w którym znajduje si skrypt. Moe si to róni w zalenoci od faktu, czy PHP jest
uruchamiany poprzez jaki skrypt CGI, i zaley od konfiguracji serwera.
W rodowisku Uniksa stosuje si ukoniki (
/
), natomiast w rodowisku Windows mona uywa
lewych (
\
) lub prawych ukoników (
/
), które musz jednak zosta oznaczone jako znaki specjalne,
aby funkcja
fopen
waciwie je zinterpretowaa. W tym celu naley po prostu doda przed kadym
symbolem jeszcze jeden lewy ukonik, jak pokazano w poniszym przykadzie:
$wp = fopen("..\\..\\zamowienia\\zamowienia.txt", 'w');
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
81
Niewiele osób stosuje w ciekach dostpu w kodzie PHP znaki odwrotnych ukoników, ponie-
wa oznaczaoby to, e kod ten bdzie dziaa tylko w systemach Windows. Stosowanie zwykych
ukoników pozwala na przenoszenie kodu midzy maszynami pracujcymi w systemach Unix
i Windows bez koniecznoci wprowadzania w nim zmian.
Drugim parametrem funkcji
fopen()
jest tryb otwarcia pliku, okrelajcy jego przeznaczenie.
Powinien on zosta podany jako cig. W powyszym przykadzie 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, poczynajc od pocztku pliku
r+
Odczyt
Otwarcie pliku do odczytu i zapisu, poczynajc od pocztku pliku
w
Zapis
Otwarcie pliku do zapisu, poczynajc od pocztku pliku. Jeeli plik istnieje, bieca
zawarto zostanie skasowana. W przeciwnym wypadku nastpi próba jego utworzenia
w+
Zapis
Otwarcie pliku do zapisu i odczytu, poczynajc od pocztku pliku. Jeeli plik istnieje,
bieca zawarto zostanie skasowana, jeeli za nie, nastpi próba jego utworzenia
x
Ostrony zapis
Otwarcie pliku do zapisu rozpoczynajcego si na pocztku pliku. Jeli plik ju istnieje,
nie zostanie otwarty, funkcja
fopen()
zwróci warto
false
, a PHP wygeneruje ostrzeenie
x+
Ostrony zapis
Otwarcie pliku do zapisu i odczytu rozpoczynajcego si na pocztku pliku. Jeli plik ju
istnieje, nie zostanie otwarty, funkcja
fopen()
zwróci warto
false
, a PHP wygeneruje
ostrzeenie
a
Dodawanie
Otwarcie pliku do dodawania zawartoci, poczwszy od koca istniejcej zawartoci.
Jeeli plik nie istnieje, nastpi próba jego utworzenia
a+
Dodawanie
Otwarcie pliku do dodawania zawartoci i odczytu, poczwszy od koca istniejcej
zawartoci. Jeeli plik nie istnieje, nastpi próba jego utworzenia
b
Tryb binarny
Stosowany w poczeniu z jednym z powyszych typów w wypadku korzystania
z systemu rozróniajcego pliki tekstowe i binarne. Windows go rozrónia, Unix — nie.
Programici PHP zalecaj, by zawsze uywa tej opcji w celu zapewnienia sobie
maksymalnej przenonoci. Jest to tryb domylny
t
Tryb tekstowy
Stosowany w poczeniu z jednym z powyszych trybów. Tryb ten jest dostpny
jedynie w systemie Windows. Nie jest on zalecany, chyba e przed przeniesieniem
kodu zostanie zamieniony na tryb
b
Tryb otwarcia pliku zastosowany w przykadzie zaley od sposobu, w jaki system zostanie uyty.
Powyej wystpuje tryb
'w'
, co oznacza, e w pliku bdzie mogo by zapamitane tylko jedno
zamówienie. Kade nowo przyjte zamówienie nadpisze poprzednie. Nie jest to rozwizanie
zbyt rozsdne, wic lepiej uy 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 uy tej opcji, naley nada temu parametrowi warto
1
. Nie trzeba wtedy
podawa cieki dostpu do pliku.
$wp = fopen('zamowienia.txt', 'ab', true);
Czwarty parametr równie jest opcjonalny. Funkcja
fopen()
dopuszcza, by nazwy plików byy
poprzedzone nazw protokou (na przykad
http://
), a same pliki byy otwierane ze zdalnych
82
Cz I
Stosowanie PHP
lokalizacji. Niektóre protokoy pozwalaj ponadto na przekazywanie dodatkowych parametrów.
Taki sposób uycia funkcji
fopen()
zostanie opisany bardziej szczegóowo w dalszej czci tego
rozdziau.
Jeeli funkcji
fopen()
uda si otwarcie pliku, zwraca ona zasób bdcy w rzeczywistoci uchwy-
tem albo wska nikiem pliku i przechowuje go w zmiennej, w powyszym przykadzie:
$wp
.
Zmienna ta jest stosowana przy kolejnych próbach dostpu do pliku, to znaczy przy odczytywa-
niu lub zapisywaniu danych.
Otwieranie pliku przez protokó FTP lub HTTP
Funkcja
fopen()
suy do otwierania do odczytu lub zapisu plików lokalnych. Za jej pomoc mona
take otwiera pliki poprzez FTP, HTTP i inne protokoy. Wasno t mona zablokowa, wy-
czajc w pliku php.ini dyrektyw
allow_url_fopen
. Jeeli wic otwieranie plików zdalnych przy
uyciu
fopen()
sprawia kopoty, najpierw naley zajrze do pliku php.ini.
Jeeli wprowadzona nazwa pliku rozpoczyna si od ftp://, otwarte zostanie pasywne poczenie
FTP z serwerem, którego adres zosta wprowadzony, a funkcja zwróci warto wska nika na
pocztek pliku.
Jeeli wprowadzona nazwa pliku rozpoczyna si od http://, otwarte zostanie pasywne poczenie
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 odnoszcy si do
katalogu musi zawiera koczce ukoniki, jak w poniszym przykadzie:
http://www.serwer.com/
a nie
http://www.serwer.com
Przy zastosowaniu drugiej wersji adresu (bez ukonika) serwer WWW uyje zwykego przekiero-
wania HTTP i przele w odpowiedzi pierwszy z powyszych adresów (warto wykona to zadanie).
Naley pamita, e nazwy domen w URL-ach nie s rónicowane ze wzgldu na wielko liter,
w przeciwiestwie do cieek i nazw plików.
Problemy z otwieraniem plików
Popularnym bdem jest próba otwarcia pliku, co do którego nie posiada si praw odczytu lub
zapisu. (Bd taki pojawia si zazwyczaj w systemach operacyjnych z rodziny Unix, od czasu do
czasu mona jednak spotka si z nim w systemie Windows.) W takim przypadku PHP wywietli
ostrzeenie podobne do przedstawionego na rysunku 2.2.
Po popenieniu takiego bdu naley upewni si, czy skrypt, który jest stosowany, posiada prawo
dostpu do danego pliku. Zalenie od konfiguracji serwera, skrypt moe by uruchomiony z pra-
wami uytkownika serwera WWW lub z prawami waciciela swojego katalogu.
W wikszoci systemów skrypt zostanie uruchomiony jako uytkownik serwera WWW. Jeeli
na przykad skrypt znajduje si w systemie uniksowym w katalogu ~/public_html/rozdzia2,
naley utworzy ogólnodostpny katalog, w którym przechowywane bd zamówienia. Aby to
uczyni, mona wpisa:
mkdir ~/zamowienia
chmod 777 ~/zamowienia/
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
83
Rysunek 2.2.
Podczas nieudanej
próby otwarcia pliku PHP
wywietla specyficzne
ostrzeenie
Naley pamita, e katalogi i pliki z ogólnym prawem zapisu s bardzo niebezpieczne. W szczegól-
noci nie powinno si uywa katalogów dostpnych bezporednio z poziomu WWW, które posia-
daj moliwo zapisu. Z tego powodu przykadowy katalog zamowienia zosta umieszczony
dwa poziomy wyej, ponad katalogiem public_html. Szczegóowe informacje na temat bezpie-
czestwa s przedstawione w rozdziale 15.
Ze ustawienia dostpu do plików to najpopularniejszy, lecz nie jedyny bd popeniany przy
otwieraniu plików. Jeeli plik nie moe zosta otwarty, trzeba koniecznie o tym wiedzie, aby nie
próbowa odczytywa ani zapisywa w nim danych.
Jeeli wywoanie funkcji
fopen()
nie powiedzie si, zwróci ona warto
false
. Mona wtedy
zastpi oryginalny komunikat o bdzie PHP innym, bardziej przyjaznym dla uytkownika:
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'ab');
if (!$wp) {
echo "<p><strong> Zamówienie Pastwa nie moe zosta przyjte w tej chwili.
Prosz spróbowa póniej.</strong></p></body></html>";
exit;
}
Symbol
@
umieszczony przed wywoaniem funkcji
fopen()
nakazuje PHP wytumienie wszystkich
bdów wynikych z tego wywoania. Zazwyczaj warto wiedzie, kiedy wystpuje bd. Kwesti
t rozwaymy pó niej.
Wiersz ten mona równie zapisa w nastpujcy sposób:
$wp = @fopen("$DOCUMENT_ROOT/../ zamowienia/zamowienia.txt". 'a');
jednak w takiej sytuacji nie wida wyra nie, e stosowane jest ukrywanie bdów, co moe utrud-
ni debugowanie kodu.
Opisana metoda stanowi najprostszy sposób radzenia sobie z bdami. Bardziej elegancki sposób
obsugi bdów zostanie przedstawiony w rozdziale 7.
84
Cz I
Stosowanie PHP
Instrukcja
if
sprawdza warto zmiennej
$wp
, aby ustali, czy wywoanie funkcji
fopen()
zwró-
cio prawidowy wska nik. Jeeli nie, wywietla komunikat o bdzie i koczy dziaanie skryptu.
Poniewa strona zakoczy si w tym miejscu, w powyszym kodzie zamknite zostay równie
znaczniki HTML, aby kod HTML dziaa bezbdnie.
Wynik dziaania powyszego fragmentu skryptu zosta przedstawiony na rysunku 2.3.
Rysunek 2.3.
Stosowanie wasnych
komunikatów o bdach
zamiast tych
wbudowanych w PHP
jest niewtpliwie
bardziej przyjazne
dla uytkownika
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 cigu w pliku). Funkcja
fputs()
jest inn nazw funkcji
fwrite()
. Funkcj
fwrite()
wywouje si w nastpujcy sposób:
fwrite($wp, $ciagwyjsciowy);
Funkcja ta nakazuje PHP zapisanie cigu zawartego w zmiennej
$ciagwyjsciowy
do pliku wska-
zywanego przez zmienn
$wp
.
Alternatyw dla funkcji
fwrite()
jest funkcja
file_put_contents()
. Jej prototyp przedstawia si
nastpujco:
int file_put_contents ( string nazwa_pliku,
string dane
[, int znaczniki
[, resource kontekst]])
Funkcja zapisuje cig znaków zawarty w danych do pliku o nazwie
nazwa_pliku
, bez potrzeby
wywoywania funkcji
fopen()
(ani
fclose()
). Jest to nowa funkcja, wprowadzona w PHP5, a funk-
cj dla niej komplementarn jest
file_get_contents()
, o której niedugo powiemy. Opcjonalnych
parametrów
znaczniki
i
kontekst
najczciej uywa si w trakcie zapisywania do plików zdal-
nych przy uyciu na przykad 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 moliw do zapisania liczb bajtów. Jeeli para-
metr ten zosta umieszczony w wywoaniu funkcji,
fwrite()
bdzie zapisywa
ciag
w pliku
wskazanym przez
wskaznik pliku
, dopóki nie osignie koca
ciagu
lub zapisze
dlugosc
bajtów,
zalenie od tego, co wystpi wczeniej.
Dugo acucha znaków mona odczyta, uywajc funkcji PHP o nazwie
strlen()
w nastpu-
jcy sposób:
fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
Trzeciego parametru uywa si w trakcie zapisywania w trybie binarnym, poniewa mona
dziki niemu unikn pewnych komplikacji zwizanych ze zgodnoci midzy platformami.
Formaty plików
Tworzc plik danych podobny do przykadowego, mona okreli dowolny format przechowy-
wania danych. Jeeli jednak dane te bd wykorzystywane pó niej przez jak aplikacj, naley
zastosowa si do zasad okrelonych przez t aplikacj.
Poniej przedstawiono cig opisujcy 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 przykadzie kady rekord jest zapisany w osobnym wierszu pliku. Metod t
zastosowano, poniewa wystpuje w niej prosty separator rekordów: znak nowego wiersza. Znaki
te przedstawia si za pomoc sekwencji
"\n"
, gdy s niewidzialne.
W caej ksice pola danych bd zapisywane za kadym razem w jednakowym porzdku i oddzie-
lane znakami tabulacji. Poniewa znak ten równie jest niewidzialny, przedstawia si go za pomoc
sekwencji
"\t"
. Mona wybra dowolny, czytelny znak podziau.
Znak podziau powinien by znakiem, który nie wystpuje poród wprowadzanych danych, lub
te dane powinny zosta przeksztacone w celu usunicia wystpujcych w nich znaków podziau.
Przeksztacanie danych zostanie omówione w rozdziale 4. Na razie naley przyj, e przy
wprowadzaniu zamówienia nie zostanie uyty znak tabulacji, co jest zdarzeniem moliwym, lecz
mao prawdopodobnym.
Stosowanie specjalnych znaków separujcych pola pozwala na atwiejsze rozdzielenie zmiennych
przy odczytywaniu danych. Kwestia ta zostanie rozwaona w rozdziale 3. oraz w rozdziale 4.
Tymczasem kade zamówienie bdzie traktowane jako pojedynczy cig.
Po przyjciu kilku zamówie zawarto pliku powinna wyglda podobnie do przedstawionej
na listingu 2.1.
86
Cz I
Stosowanie PHP
Listing 2.1. zamowienia.txt — przykad pliku zamówie
19:35, 18 lipca 2008 4 opon 1 butelek oleju 6 wiec zaponowych 1820.00PLN
´ul. Krótka 22, Kraków
19:37, 18 lipca 2008 1 opon 0 butelek oleju 0 wiec zaponowych 400.00PLN
´ul. Gówna 33, Gliwice
19:38, 18 lipca 2008 0 opon 1 butelek oleju 4 wiec zaponowych 180.00PLN
´ul. Akacjowa 127, Warszawa
Zamykanie pliku
Po zakoczeniu korzystania z pliku naley go zamkn. Stosuje si w tym celu funkcj
fclose()
w nastpujcy sposób:
fclose($wp);
Funkcja ta zwraca warto
true
, jeeli zamykanie powiodo si, lub
false
, w przeciwnym wypadku.
Dziaanie to ma znacznie wiksze szanse powodzenia ni otwieranie pliku — i w tym przypadku
nie zdecydowano si na jego sprawdzenie.
Peen listing ostatecznej wersji skryptu przetworzzamowienie.php przedstawiono na listingu 2.2.
Listing 2.2. przetworzzamowienie.php — Ostateczna wersja skryptu przetwarzajcego zamówienia
<?php
// 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');
?>
<html>
<head>
<title>Czci samochodowe Janka — wyniki zamówienia</title>
</head>
<body>
<h1>Czci samochodowe Janka</h1>
<h2>Wyniki zamówienia</h2>
<?php
echo "<p>Zamówienie przyjte o ".$data."</p>";
echo "<p>Zamówienie Pastwa wygl da nastpuj co: </p>";
$ilosc = 0;
$ilosc = $iloscopon + $iloscoleju + $iloscswiec;
echo "Zamówionych czci: ".$ilosc."<br />";
if($ilosc == 0) {
echo "Na poprzedniej stronie nie zostao zoone adne zamówienie!<br />";
} else {
if ($iloscopon > 0) {
echo $iloscopon." opon<br />";
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
87
}
if ($iloscoleju > 0) {
echo $iloscoleju." butelek oleju<br />";
}
if ($iloscswiec > 0) {
echo $iloscswiec." wiec zaponowych<br />";
}
}
$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 "<p>Warto zamówienia wynosi ".$wartosc."</p>";
echo "<p>Adres wysyki to ".$adres. "</p>";
$ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t"
.$iloscswiec." swiec zaponowych\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 "<p><strong> Zamówienie Pastwa nie moe zosta przyjte w tej chwili.
Prosz spróbowa póniej.</strong></p></body></html>";
exit;
}
fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
flock($wp, LOCK_UN);
fclose($wp);
echo "<p>Zamówienie zapisane.</p>";
?>
</body>
</html>
Odczyt z pliku
Klienci Janka mog ju skada swoje zamówienia przez sie WWW, lecz jeeli pracownicy firmy
chc je obejrze, musz otworzy plik wasnorcznie.
Mona stworzy interfejs WWW pozwalajcy 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 pozwalajcy pracownikom Janka na ogldanie zawartoci plików
<?php
// utworzenie krótkich nazw zmiennych
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<html>
<head>
<title>Czci samochodowe Janka — zamówienia klientów</title>
</head>
<body>
<h1>Czci samochodowe Janka</h1>
<h2>Zamówienia klientów</h2>
<?php
@ $wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
if (!$wp) {
echo "<p><strong>Brak zamówie.
Prosz spróbowa póniej.</strong></p>";
exit;
}
while (!feof($wp)) {
$zamowienie = fgets($wp, 999);
echo $zamowienie."<br />";
}
fclose($wp);
?>
</body>
</html>
Skrypt ten dziaa na zasadzie opisanej powyej — otwarcie pliku, odczyt z pliku, zamknicie pliku.
Wynik uruchomienia powyszego skryptu, wykorzystujcego plik danych z listingu 2.1, jest przed-
stawiony na rysunku 2.4.
Rysunek 2.4.
Skrypt
zobaczzamowienia.php
wywietla w oknie
przegldarki wszystkie
zamówienia znajdujce
si w pliku
zamowienia.txt
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
89
Naley teraz przyjrze si dokadnie funkcjom wykorzystanym w powyszym skrypcie.
Otwieranie pliku w celu odczytu — fopen()
Do otwarcia pliku ponownie zostaa wykorzystana funkcja
fopen()
. W tym przypadku plik zosta
otwarty jedynie do odczytu, tak wic zastosowano tryb
'rb'
:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
Wiedzie , kiedy przesta — feof()
W powyszym przykadzie ptla
while
zostaa zastosowana w celu odczytu danych z pliku a
do jego koca. Ptla
while
sprawdza koniec pliku przy uyciu funkcji
feof()
:
while (!feof($wp))
Funkcja
feof()
uywa wska nika pliku jako swojego jedynego parametru. Zwraca ona warto
true
, jeeli wska nik pliku znajduje si na jego kocu. Chocia nazwa funkcji moe wydawa si
dziwna, atwo j zapamita, wiedzc, 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-
gnicia
EOF
.
Odczytywanie pliku wiersz po wierszu — fgets(), fgetss() i fgetcsv()
W powyszym przykadzie do odczytania danych z pliku uyta zostaa funkcja
fgets()
:
$zamowienie = fgets($wp, 999);
Funkcja ta jest stosowana do odczytywania pliku wiersz po wierszu. W powyszym przypadku
bdzie odczytywaa dane, dopóki nie trafi na znak nowego wiersza (
\n
), na
EOF
lub przeczyta
998 bajtów pliku. Maksymalna dugo odczytu jest równa wpisanej liczbie minus jeden bajt.
Istnieje wiele rónych funkcji stosowanych do odczytywania danych z pliku. Na przykad funk-
cja
fgets()
jest przydatna przy obróbce plików zawierajcych zwyky tekst, który odczytujemy
fragmentami.
Interesujc odmian
fgets()
jest funkcja
fgetss()
, która posiada nastpujcy prototyp:
string fgetss(int wskaznik_pliku, int dlugosc, string [dozwolone_znaczniki]);
Funkcja ta podobna jest do
fgets()
, z wyjtkiem tego, e usuwa z czytanego cigu wszystkie
znaczniki PHP i HTML, poza wyszczególnionymi w parametrze
dozwolone_znaczniki
. Stosuje
si j w celach bezpieczestwa przy odczytywaniu plików napisanych przez innych programi-
stów lub zawierajcych informacje wprowadzone przez uytkowników. Niekontrolowany obcy
kod HTML moe zniszczy dokadnie zaplanowany proces formatowania strony. Niekontrolo-
wany obcy kod PHP moe odda ca wadz nad serwerem zoliwemu uytkownikowi.
Inn odmian funkcji
fgets()
jest funkcja
fgetcsv()
. Posiada ona nastpujcy prototyp:
array fgetcsv(resource wskaznik_pliku, int dlugosc, string [znak_podziau [, string zacznik]]);
Funkcja ta suy do rozdzielania wierszy pliku w celu zrekonstruowania zmiennych, kiedy wcze-
niej zastosowany zosta znak podziau (taki jak zaproponowany powyej) lub przecinek (uywany
90
Cz I
Stosowanie PHP
w wikszoci arkuszy kalkulacyjnych i innych aplikacji). Oznacza to, e przy jej stosowaniu plik
jest odczytywany nie wiersz po wierszu, lecz od znaku podziau do znaku podziau. Wywoanie
tej funkcji nastpuje podobnie jak w przypadku
fgets()
, lecz przekazuje si jej równie znak
podziau uyty do odseparowania pól. Na przykad:
$zamowienie = fgetcsv($wp, 100, "\t");
Powysze polecenie odczyta wiersz z pliku i podzieli j tam, gdzie natrafi na znak tabulacji (
\t
).
Wyniki zwracane s w postaci tablicy (w powyszym przykadowym kodzie:
$zamowienie
). Tablice
zostan opisane dokadniej w rozdziale 3.
Parametr
dlugosc
powinien mie wiksz warto ni dugo (wyraon w liczbie znaków) naj-
duszego wiersza odczytywanego pliku.
Parametr
zacznik
suy do wskazywania znaków, jakimi jest otoczone kade pole w wierszu.
Jeli nie zostanie on podany, przyjta zostanie domylnie warto
"
(podwójny cudzysów).
Odczyt caego pliku — readfile(), fpassthru(), file()
Plik mona odczytywa nie tylko wiersz po wierszu, lecz równie cay w jednym przebiegu. W tym
celu naley posuy si jedn z trzech metod.
Pierwsza z nich polega na zastosowaniu funkcji
readfile()
. Mona zastpi niemal cay powyszy
skrypt jednym wierszem kodu:
readfile("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Wywoanie funkcji
readfile()
otwiera plik, wywietla zawarto w oknie przegldarki, po czym
zamyka plik. Prototyp funkcji
readfile()
jest nastpujcy:
int readfile(string nazwa_pliku, int [uycie_opcji_include_path[, resource kontekst]]);
Opcjonalny drugi parametr okrela, czy PHP powinien szuka pliku przez opcj
include_path
,
i dziaa w sposób identyczny jak
fopen()
. Opcjonalny parametr kontekst uywany jest jedynie
wówczas, gdy pliki s otwierane zdalnie na przykad za porednictwem HTTP; ten sposób uy-
wania funkcji zostanie szerzej opisany w rozdziale 20. Funkcja zwraca cakowit liczb bajtów
odczytanych z pliku.
Drug funkcj tego typu jest
fpassthru()
. W celu jej zastosowania naley najpierw otworzy plik za
pomoc
fopen()
, a potem przekaza warto wska nika pliku funkcji
fpassthru()
, która wywietli
zawarto tego pliku w okienku przegldarki. Po zakoczeniu dziaania funkcja zamyka plik.
Powyszy skrypt mona zastpi funkcj
fpassthru()
w nastpujcy sposób:
$wp = fopen("DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
fpassthru($wp);
Funkcja
fpassthru
zwraca warto
true
, jeeli odczyt powiedzie si, w przeciwnym wypadku —
false
.
Trzeci metod odczytu caego pliku jest zastosowanie funkcji
file()
. Dziaa ona w identyczny
sposób jak
readfile()
z jednym wyjtkiem — zamiast wywietli zawarto pliku w przegldarce,
zamienia j na tablic. Kwestia ta zostanie szczegóowo opisana w rozdziale 3. Tymczasem poniej
zostao przedstawione jej przykadowe zastosowanie:
$tablicapliku = file("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
91
Polecenie to wczytuje cay plik w tablic o nazwie
$tablicapliku
. Kady wiersz pliku zostanie
zachowany jako osobny element tablicy. Warto zwróci uwag, e we wczeniejszych wersjach PHP
funkcja
file()
nie bya binarnie bezpieczna.
Czwart dostpn opcj jest wykorzystanie funkcji
file_get_contents()
. Dziaa ona tak samo jak
funkcja
readfile()
, z t tylko rónic, e zwraca zawarto pliku w postaci acucha znaków,
a nie przesya jej do przegldarki.
Odczyt pojedynczego znaku — fgetc()
Inn metod jest odczytywanie pliku znak po znaku. Mona tego dokona, stosujc funkcj
fgetc()
.
Jako jedyny parametr pobiera ona wska nik pliku i zwraca nastpny znajdujcy si w pliku znak.
Mona zamieni ptl
while
w przykadowym skrypcie na inn, uywajc funkcji
fgetc()
w nastpujcy sposób:
while (!feof($wp)) {
$znak = fgetc($wp);
if (!feof($wp))
echo ($znak=="\n" ? "<br />": $znak);
}
Powyszy kod odczytuje za pomoc funkcji
fgetc()
pojedynczy znak z pliku i zapisuje go w zmien-
nej
$znak
, dopóki nie zostanie osignity koniec pliku. Pó niej zastosowana zostaje maa sztuczka
zamieniajca znaki koca wiersza (
\n
), na zamania wierszy HTML (
<br />
).
Dzieje si tak jedynie w celu czystego sformatowania strony. W przypadku próby wywietlenia
pliku ze znakami nowych wierszy midzy rekordami cay plik zostaby wywietlony jako jeden
wiersz (warto sprawdzi). Przegldarki nie generuj znaków niewidocznych, dlatego trzeba je
zastpowa znakami HTML oznaczajcymi nowy wiersz (
<br />
). W celu przeprowadzenia tej
zamiany zastosowany zosta operator trójkowy.
Pomniejszym efektem ubocznym stosowania funkcji
fgetc()
zamiast
fgets()
jest fakt, e w prze-
ciwiestwie do funkcji
fgets()
zwraca ona znak
EOF
. Dlatego po przeczytaniu znaku naley ponow-
nie uy
feof()
, aby znak ten nie zosta wywietlony w przegldarce.
Jeeli nie istnieje wyra ny powód odczytywania pliku znak po znaku, stosowanie tej metody nie
jest polecane.
Odczytywanie zadanej dugoci — fread()
Ostatni metod odczytywania pliku jest zastosowanie funkcji
fread()
w celu odczytania z pliku
zadanej liczby bajtów. Funkcja ta posiada nastpujcy prototyp:
string fread(resource wskaznik_pliku, int dlugosc);
Funkcja
fread()
odczytuje przekazan jej liczb bajtów, chyba e wczeniej napotka znak koca
pliku lub pakietu sieciowego.
Inne przydatne funkcje plikowe
Poza powyszymi istnieje jeszcze kilka przydatnych w niektórych zastosowaniach funkcji pliko-
wych. Cz z nich zostanie opisana poniej.
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 przyjcie.';
} else {
echo 'Aktualnie nie ma adnych zamówie.';
}
Okrelanie wielkoci pliku — filesize()
W celu sprawdzenia wielkoci pliku stosuje si funkcj
filesize()
:
echo filesize("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Funkcja ta zwraca wielko pliku w bajtach i moe zosta zastosowana w poczeniu z funkcj
fread()
w celu odczytania jednorazowo caego pliku (lub jakiej jego czci). Mona zastpi cay
przykadowy skrypt nastpujcymi wierszami kodu:
$wp = fopen("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt", 'rb');
echo nl2br(fread($wp, filesize("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt"));
fclose($wp);
Funkcja
nl2br()
przeksztaca w generowanym kodzie HTML znaki
\n
w znaki nowego wiersza
(
<br />
).
Kasowanie pliku — unlink()
Mona skasowa plik zamówie po ich przyjciu, stosujc w tym celu funkcj
unlink()
(nie ist-
nieje funkcja o nazwie
delete
). Na przykad:
unlink("$DOCUMENT_ROOT/../zamowienia/zamowienia.txt");
Powysza funkcja zwraca warto
false
, jeeli plik nie móg zosta usunity. Sytuacja taka zdarza
si zazwyczaj z powodu niewystarczajcych praw do pliku bd jeeli plik nie istnieje.
Poruszanie si wewntrz pliku — rewind(), fseek() i ftell()
Mona porusza si w obrbie pliku i poznawa pozycje wska nika wewntrz tego pliku, stosujc
funkcje
rewind()
,
fseek()
i
ftell()
.
Funkcja
rewind()
ustawia wska nik pliku z powrotem na jego pocztku. Funkcja
ftell()
infor-
muje, jak daleko (w bajtach) zosta przesunity wska nik. Na kocu powyszego skryptu (przed
poleceniem
fclose()
) mona na przykad doda nastpujce wiersze :
echo 'Kocowa pozycja wskanika pliku wynosi '.(ftell($wp));
echo '<br />';
rewind($wp);
echo 'Po przewiniciu, pozycja wynosi '.(ftell($wp));
echo '<br />';
Wynik wywietlony w przegldarce 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 wyglda nastpujco:
int fseek(resource wskaznik_pliku, int offset [, int skd]);
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. Wywoanie
przewinicia ustawia
go na pozycji 0
(na pocztku pliku)
Wywoanie funkcji
fseek()
ustawia wska nik pliku
wp
w punkcie wskazywanym przez
skd
i prze-
suwa o
offset
bajtów, liczc od pocztku pliku. Opcjonalny parametr
skd
posiada domyln
warto
SEEK_SET
, czyli pocztek pliku. Parametr ten moe równie mie wartoci
SEEK_CUR
(bie-
ca pozycja wska nika pliku) oraz
SEEK_END
(koniec pliku).
Funkcja
rewind()
jest równoznaczna z wywoaniem funkcji
fseek()
z zerowym offsetem. Na przy-
kad mona zastosowa funkcj
fseek()
w celu znalezienia rodkowego rekordu w pliku danych
lub po to, aby przeprowadzi przeszukiwanie binarne. Zazwyczaj po osigniciu poziomu zoo-
noci wymagajcego stosowania takich mechanizmów polecane jest zastosowanie bazy danych.
Blokowanie pliku
Mona wyobrazi sobie sytuacj, w której dwóch klientów stara si zamówi produkt w tym
samym czasie (dzieje si tak czsto, zwaszcza gdy strona jest licznie odwiedzana). Co si stanie,
gdy jeden z klientów wywoa funkcj
fopen()
i zacznie zapis w pliku, a drugi uczyni to samo?
Jak bdzie wyglda ostateczna zawarto pliku? Czy najpierw zostanie zapisane pierwsze zamó-
wienie, a pó niej drugie, czy te odwrotnie? A moe dojdzie do sytuacji niepodanej, na przy-
kad oba zamówienia wymieszaj si ze sob? Odpowied na powysze pytania zaley od konkret-
nego systemu operacyjnego, ale zazwyczaj jest to wielka niewiadoma.
W celu uniknicia powyszych problemów stosuje si blokowanie plików. W PHP wykorzystuje
si w tym celu funkcj
flock()
. Powinna ona zosta wywoana po otwarciu pliku, lecz przed odczy-
taniem go lub zapisaniem w nim danych.
Funkcja
flock()
posiada nastpujcy prototyp:
bool flock(resource wskaznik_pliku, int dzialanie [, int zablokuj])
Funkcji
flock()
naley przekaza wska nik otwartego pliku i cyfr okrelajc wymagany rodzaj
zamka. Funkcja ta zwraca
true
, jeeli zamek zosta prawidowo zaoony, a
false
w przeciw-
nym wypadku. Opcjonalny trzeci parametr bdzie zawiera warto
true
, jeli zaoenie zamka
spowoduje zablokowanie biecego procesu (czyli zmuszenie go do przejcia w stan oczekiwania).
94
Cz I
Stosowanie PHP
Moliwe wartoci parametru
dzialanie
s przedstawione w tabeli 2.2.
Tabela 2.2. Wartoci parametru dzialanie funkcji flock()
Warto parametru dzialanie
Znaczenie
LOCK_SH
(dawniej 1)
Blokowanie odczytu. Pozwala na dzielenie pliku z innymi czytajcymi
LOCK_EX
(dawniej 2)
Blokowanie zapisu. Wycza plik z uytku; nie moe on by dzielony
LOCK_UN
(dawniej 3)
Zwolnienie istniejcej blokady
LOCK_NB
(dawniej 4)
Dodanie wartoci 4 do parametru
dziaanie
przeciwdziaa zablokowaniu
próby zaoenia blokady
Stosujc funkcj
flock()
, naley doda j do wszystkich skryptów korzystajcych z pliku. W innym
przypadku jest ona bezwartociowa.
Naley zwróci uwag, i
flock()
nie dziaa w systemie NFS i innych sieciowych systemach
plików. Nie dziaa ona równie w starszych systemach plików, które nie obsuguj blokowania
plików — systemem takim jest na przykad FAT. W niektórych systemach operacyjnych funkcja
ta jest zaimplementowana na poziomie procesu i nie bdzie dziaa prawidowo, jeli stosowany
bdzie wielowtkowy API serwera.
Aby zastosowa j w powyszym przykadzie, naley zmieni skrypt przetworzzamowienie.php
w nastpujcy 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 naley 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 duo solidniejszy, ale cigle niedoskonay. Co by si stao, gdyby dwa skrypty jedno-
czenie usioway zaoy blokad? Spowodowaoby to „wycig” o bardzo niepewnym wyniku, co
wywoaoby wiele kolejnych problemów. Lepsz metod jest zastosowanie DBMS (ang. Database
Management System — system zarzdzania bazami danych).
Lepszy sposób obróbki danych
— systemy zarzdzania bazami danych
Wszystkie powysze przykady uyway plików jednorodnych. W drugiej czci tej ksiki opisze-
my alternatyw tej metody — MySQL, system zarzdzania relacyjnymi bazami danych (RDBMS).
Mona by zapyta, w jakim celu?
Rozdzia 2.
Przechowywanie i wyszukiwanie danych
95
Problemy zwizane ze stosowaniem plików jednorodnych
Istnieje kilka problemów zwizanych z prac z plikami jednorodnymi:
Praca z duym plikiem moe by bardzo powolna.
Poszukiwanie konkretnego rekordu lub grupy rekordów w pliku jednorodnym jest trudne.
Jeeli rekordy s uporzdkowane, mona zastosowa pewien sposób przeszukiwania
binarnego w poczeniu z rekordami o ustalonej szerokoci i przeszukiwaniem wedug
pola kluczowego. Aby znale pewne wzory informacji (na przykad wyszukujc wszystkich
klientów zamieszkaych w Gliwicach), naley sprawdza indywidualnie kady rekord.
Problemy sprawia dostp jednoczesny. Powyej przedstawione zostay sposoby blokowania
plików, ale, jak opisano powyej, moe to spowodowa wycig lub „wskie gardo”. W razie
duego ruchu na stronie liczna grupa uytkowników moe czeka na odblokowanie pliku,
aby zoy zamówienie. Jeeli potrwa to zbyt dugo, przenios si do konkurencji.
Wszystkie przedstawione powyej procesy przetwarzania plików dziaaj sekwencyjnie
— rozpoczynaj od pocztku pliku i czytaj go do koca. Aby umieci lub skasowa rekordy
znajdujce si w rodku pliku, naley umieci cay plik w pamici, dokona zmian,
a na kocu zapisa go w caoci. Podczas pracy z duymi plikami konieczno wykonywania
wszystkich tych kroków moe sprawia problemy.
Poza ograniczonymi moliwociami, oferowanymi przez pozwolenia dostpu do plików,
nie istnieje adna prosta metoda tworzenia rónych poziomów dostpu do danych.
Jak RDBMS rozwizuj powysze problemy?
Relacyjne systemy zarzdzania bazami danych umoliwiaj rozwizania wszystkich powyszych
kwestii.
RDBMS pozwalaj na znacznie szybszy dostp do plików ni pliki jednorodne. MySQL,
system bazodanowy prezentowany w tej ksice, naley do najszybszych RDBMS.
RDBMS mona zadawa zapytania o dane speniajce konkretne kryteria.
RDBMS posiadaj wbudowany mechanizm zapewniania równolegego dostpu, który
pozostaje poza krgiem pracy programisty.
RDBMS pozwalaj na swobodny dostp do danych.
RDBMS posiadaj wbudowany system przywilejów. MySQL jest w tej dziedzinie
szczególnie rozbudowany.
Prawdopodobnie gównym powodem uywania RDBMS jest fakt, e funkcjonalno, któr powinny
posiada systemy przechowywania danych, zostaa ju w nich zaimplementowana (a przynajmniej
jej wikszo). Oczywicie mona napisa wasn bibliotek funkcji PHP, lecz po co ponownie
wymyla koo?
W czci II tej ksiki opiszemy ogóln zasad dziaania relacyjnych baz danych, a w szczegól-
noci konfiguracj i zastosowanie MySQL w tworzeniu stron WWW opartych na bazach danych.
Jeeli tworzony jest prosty system, który nie wymaga penowymiarowej bazy danych, natomiast
chcemy unikn zakadania zamków i innych komplikacji zwizanych z uywaniem plików pa-
skich, mona uy nowego rozszerzenia PHP o nazwie SQLite. Udostpnia ono SQL-owy interfejs do
pliku paskiego. W tej ksice skupimy si na uywaniu serwera MySQL, natomiast wicej informa-
cji na temat SQLite mona znale pod adresami http://sqlite.org/ oraz http://www.php.net/sqlite.
96
Cz I
Stosowanie PHP
Propozycje dalszych lektur
Wicej informacji na temat interakcji z systemem plików znajduje si w rozdziale 19. Opiszemy
w nim metody zmiany pozwole dostpu, wasnoci i nazw plików, a take prac z katalogami
oraz interakcj ze rodowiskiem systemu plików.
Zalecamy równie lektur rozdziau na temat systemów plików w podrczniku elektronicznym
PHP, dostpnym pod adresem http://www.php.net/filesystem.
W nastpnym rozdziale
W kolejnym rozdziale przedstawimy tablice — czym s i jak mog zosta zastosowane w skryp-
tach PHP do przetwarzania danych.