PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie czwarte phmsv4

background image

PHP i MySQL. Tworzenie stron WWW.
Vademecum profesjonalisty
Wydanie czwarte

Autorzy:

Luke Welling

,

Laura Thomson

T³umaczenie: 978-83-246-0821-8
ISBN: 83-7197-641-0
Tytu³ orygina³u:

PHP and MySQL Web

Development, Fourth Edition

Format: 172

×245, stron: 856

Kolejne, uaktualnione wydanie najbardziej znanego, bestsellerowego podrêcznika dla
webmasterów na temat tworzenia dynamicznych witryn internetowych! Ponad 30 000
sprzedanych egzemplarzy poprzednich wydañ!!! Recepta na sukces w przypadku
tworzenia profesjonalnych stron WWW jest niezwykle prosta: wystarcz¹ ogromne
mo¿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!

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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.

background image

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.

background image

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.

background image

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');

background image

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

background image

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/

background image

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.

background image

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.).

background image

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.

background image

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 />";

background image

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.

background image

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

background image

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

background image

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");

background image

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.

background image

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 wska nika 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]);

background image

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).

background image

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?

background image

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.

background image

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.


Wyszukiwarka

Podobne podstrony:
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie 2
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie trzecie phmsv3
php i mysql tworzenie stron www vademecum profesjonalisty [helion] CONZDUWNFQFYUVVHCKLSSSQE7VYZR7HO
rozdział tworzenie internetowej?zy?nych z php i mysql tworzenie stron www vademecum profesjonalisty
7e 24p+i+mysql +tworzenie+stron+www+vademecum+profesjonalisty+ 5bhelion 5d JYJZNAZTJGAJTCVIA5GE6WDA
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty
PHP i MySQL Tworzenie stron WWW Wydanie drugie Vademecum profesjonalisty phms2v

więcej podobnych podstron