PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Wydanie czwarte Autorzy: Luke Welling, Laura Thomson T³umaczenie: 978-83-246-0821-8 ISBN:



Podobne dokumenty
WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Instrukcja Obsługi STRONA PODMIOTOWA BIP

O autorze 11 O recenzentach 13 Przedmowa 15

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Instrukcja zarządzania systemem informatycznym służącym do przetwarzania danych osobowych

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Wtedy wystarczy wybrać właściwego Taga z listy.

Microsoft Management Console

Instrukcja programu PControl Powiadowmienia.

Podstawa programowa kształcenia ogólnego informatyki w gimnazjum

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Kancelaris - Zmiany w wersji 2.50

1. Podstawy budowania wyra e regularnych (Regex)

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Archiwum Prac Dyplomowych

emszmal 3: Automatyczne księgowanie przelewów w menedżerze sprzedaży BaseLinker (plugin dostępny w wersji ecommerce)

Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy

PERSON Kraków

Projektowanie bazy danych

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

Polityka prywatności strony internetowej wcrims.pl

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Poniżej instrukcja użytkowania platformy

Konfiguracja historii plików

Elementy i funkcjonalno

Zarządzanie Zasobami by CTI. Instrukcja

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

Pierwsze logowanie do systemu I-Bank

Warszawa, r.

API transakcyjne BitMarket.pl

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

Baza danych. Baza danych jest to zbiór danych powi zanych mi dzy sob pewnymi zale no ciami.

Rozwiązywanie nazw w sieci. Identyfikowanie komputerów w sieci

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

I. Zakładanie nowego konta użytkownika.

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

INSTRUKCJA WebPTB 1.0

Pracownia internetowa w szkole podstawowej (edycja 2004)

Instrukcja instalacji oprogramowania TSG wer. 5.0 z dost pem do danych poprzez sie Internet.

Logowanie do systemu Faktura elektroniczna

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

VinCent Office. Moduł Drukarki Fiskalnej

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

InsERT GT Własne COM 1.0

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Foldery z dokumentami 1.0 dodatek do Symfonia Faktura dla 1 firmy

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap Urzędzie Gminy w Ułężu

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

TWORZENIE I NADZOROWANIE DOKUMENTÓW SYSTEMOWYCH (PROCEDUR, KSIĘGI JAKOŚCI I KART USŁUG) SJ Data:

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO

O autorze... 9 Wprowadzenie... 11

Instrukcja pod czenia komputera z systemem Microsoft Windows Vista/7 do sieci PWSZ-FREE-WIFI

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Strona główna góra

A X E S S INSTRUKCJA UŻYTKOWNIKA

I. INSTALACJA BAZY DANYCH ORACLE10g EXPRESS EDITION

PRESTASHOP INTEGRATOR XL BY CTI INSTRUKCJA

Instrukcja wprowadzania ocen do systemu USOSweb

INSTRUKCJA RUCHU I EKSPLOATACJI SIECI DYSTRYBUCYJNEJ

Aneks nr 8 z dnia r. do Regulaminu Świadczenia Krajowych Usług Przewozu Drogowego Przesyłek Towarowych przez Raben Polska sp. z o.o.

Zad.1 Pokazać pierwszeństwo trybu odmów przed zezwalaj.

Bazy danych. Andrzej Łachwa, UJ, /15

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

Instalacja Plugin. Rys. 1. Folder Plugin.

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Postanowienia ogólne. Usługodawcy oraz prawa do Witryn internetowych lub Aplikacji internetowych

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

Warunki Oferty PrOmOcyjnej usługi z ulgą

System kontroli wersji SVN

Ajax a bezpieczeństwo aplikacji webowych. Jakub Wierzgała

Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ).

INSTRUKCJA Panel administracyjny

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Praca na wielu bazach danych część 2. (Wersja 8.1)

Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?

Automatyzacja procesu publikowania w bibliotece cyfrowej

PHP i MySQL dla każdego / Marcin Lis. Wyd. 3. Gliwice, cop Spis treści

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

Ewidencja abonentów. Kalkulacja opłat

Technologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L

Opis instalacji systemu Intranet Komunikator

1. Liczba wszystkich otrzymanych przez Użytkownika graficznych ocen sprzedaży na poziomie minimum 100 punktów.

Procedury uzyskania dostępu do systemu SIL

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Aplikacje internetowe oparte na kluczowych technologiach Java Enterprise(Servlet,JSP,JDBC, )

INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT

dbsamples.udl lub przygotowany wcześniej plik dla Excela) i OK,

1. PODMIOTEM ŚWIADCZĄCYM USŁUGI DROGĄ ELEKTRONICZNĄ JEST 1) SALESBEE TECHNOLOGIES SP. Z O.O. Z SIEDZIBĄ W KRAKOWIE, UL.

Instrukcja pod czenia komputera z systemem Microsoft Windows XP do sieci PWSZ-FREE-WIFI

Linux LAMP, czyli Apache, Php i MySQL

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Usuni cie has a admina dodatek do Symfonia Kadry i P ace dla 1 firmy

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Transkrypt:

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!

Spis tre ci O autorach... 23 O wspó autorach... 25 Wprowadzenie... 27 Cz I Stosowanie PHP...37 Rozdzia 1. Podstawowy kurs PHP... 39 Zastosowanie PHP...40 Tworzenie przyk adowej aplikacji: Cz ci samochodowe Janka...40 Formularz zamówienia...40 Przetwarzanie formularza...41 Osadzanie PHP w HTML...42 Zastosowanie znaczników PHP...43 Instrukcje PHP...44 Odst py...44 Komentarze...45 Dodawanie zawarto ci dynamicznej...45 Wywo ywanie funkcji...46 U ywanie funkcji date()...46 Dost p do zmiennych formularza...47 Zmienne formularza...47 czenie ci gów...49 Zmienne i ci gi znaków...50 Identyfikatory...51 Typy zmiennych...51 Typy danych w PHP...51 Si a typu...52 Rzutowanie typu...52 Zmienne zmiennych...53 Deklarowanie i u ywanie sta ych...53 Zasi g zmiennych...54 U ywanie operatorów...55 Operatory arytmetyczne...55 Operatory ci gów...56 Operatory przypisania...56 Operatory porówna...58 Operatory logiczne...59 Operatory bitowe...60 Pozosta e operatory...60

8 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Obliczanie sum w formularzu...62 Pierwsze stwo i kolejno...63 Zarz dzanie zmiennymi...65 Sprawdzanie i ustawianie typów zmiennych...65 Sprawdzanie stanu zmiennej...66 Reinterpretacja zmiennych...67 Podejmowanie decyzji za pomoc instrukcji warunkowych...67 Instrukcja if...67 Bloki kodu...68 Instrukcja else...68 Instrukcja elseif...69 Instrukcja switch...69 Porównanie ró nych instrukcji warunkowych...71 Powtarzanie dzia a przy u yciu iteracji...71 P tle while...72 P tle for i foreach...73 P tle do..while...74 Wy amywanie si ze struktury skryptu...75 U ywanie alternatywnych sk adni struktur steruj cych...75 U ywanie struktury declare...76 W nast pnym rozdziale...76 Rozdzia 2. Przechowywanie i wyszukiwanie danych... 77 Zapisywanie danych do pó niejszego u ycia...77 Przechowywanie i wyszukiwanie zamówie Janka...78 Przetwarzanie plików...79 Otwieranie pliku...79 Tryby otwarcia pliku...79 Stosowanie funkcji fopen() do otwarcia pliku...80 Otwieranie pliku przez protokó FTP lub HTTP...82 Problemy z otwieraniem plików...82 Zapisywanie danych w pliku...84 Parametry funkcji fwrite()...85 Formaty plików...85 Zamykanie pliku...86 Odczyt z pliku...87 Otwieranie pliku w celu odczytu fopen()...89 Wiedzie, kiedy przesta feof()...89 Odczytywanie pliku wiersz po wierszu fgets(), fgetss() i fgetcsv()...89 Odczyt ca ego pliku readfile(), fpassthru(), file()...90 Odczyt pojedynczego znaku fgetc()...91 Odczytywanie zadanej d ugo ci fread()...91 Inne przydatne funkcje plikowe...91 Sprawdzanie istnienia pliku file_exists()...92 Okre lanie wielko ci pliku filesize()...92 Kasowanie pliku unlink()...92 Poruszanie si wewn trz pliku rewind(), fseek() i ftell()...92 Blokowanie pliku...93 Lepszy sposób obróbki danych systemy zarz dzania bazami danych...94 Problemy zwi zane ze stosowaniem plików jednorodnych...95 Jak RDBMS rozwi zuj powy sze problemy?...95 Propozycje dalszych lektur...96 W nast pnym rozdziale...96

Spis tre ci 9 Rozdzia 3. Stosowanie tablic... 97 Czym s tablice?...97 Tablice indeksowane numerycznie...98 Inicjowanie tablic indeksowanych numerycznie...98 Dost p do zawarto ci tablicy...99 Dost p do tablic przy zastosowaniu p tli...100 Tablice z innymi indeksami...100 Inicjowanie tablicy...100 Dost p do elementów tablicy...101 Stosowanie p tli...101 Operatory tablicowe...103 Tablice wielowymiarowe...103 Sortowanie tablic...106 Stosowanie funkcji sort()...106 Stosowanie funkcji asort() i ksort() do porz dkowania tablic...107 Sortowanie odwrotne...107 Sortowanie tablic wielowymiarowych...108 Typy sortowa definiowane przez u ytkownika...108 Odwrotne sortowanie zdefiniowane przez u ytkownika...109 Zmiany kolejno ci elementów w tablicach...110 Stosowanie funkcji shuffle()...110 Stosowanie funkcji array_reverse()...111 adowanie tablic z plików...112 Wykonywanie innych dzia a na tablicach...114 Poruszanie si wewn trz tablicy funkcje each(), current(), reset(), end(), next(), pos() i prev()...114 Do czanie dowolnej funkcji do ka dego elementu tablicy funkcja array_walk()...115 Liczenie elementów tablicy: count(), sizeof() i array_count_values()...116 Konwersja tablic na zmienne skalarne funkcja extract()...117 Propozycje dalszych lektur...118 W nast pnym rozdziale...118 Rozdzia 4. Manipulowanie ci gami i wyra enia regularne... 119 Przyk adowa aplikacja Inteligentny Formularz Pocztowy...119 Formatowanie ci gów...121 Przycinanie ci gów funkcje chop(), ltrim() i trim()...121 Formatowanie ci gów w celu ich prezentacji...122 Formatowanie ci gów do przechowania funkcje addslashes() i stripslashes()...125 czenie i rozdzielanie ci gów za pomoc funkcji ci gów...127 Stosowanie funkcji explode(), implode() i join()...127 Stosowanie funkcji strtok()...128 Stosowanie funkcji substr()...128 Porównywanie ci gów...129 Porz dkowanie ci gów funkcje strcmp(), strcasecmp() i strnatcmp()...129 Sprawdzanie d ugo ci ci gu za pomoc funkcji strlen()...130 Dopasowywanie i zamiana podci gów za pomoc funkcji ci gów...130 Znajdowanie ci gów w ci gach funkcje strstr(), strchr(), strrchr() i stristr()...131 Odnajdywanie pozycji podci gu funkcje strpos() i strrpos()...131 Zamiana podci gów funkcje str_replace() i substr_replace()...132 Wprowadzenie do wyra e regularnych...133 Podstawy...133 Zbiory i klasy znaków...134 Powtarzalno...135 Podwyra enia...135 Podwyra enia policzalne...135

10 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Kotwiczenie na pocz tku lub na ko cu ci gu...136 Rozga zianie...136 Dopasowywanie specjalnych znaków literowych...136 Podsumowanie znaków specjalnych...137 Umieszczanie wszystkiego razem (Inteligentny Formularz)...137 Odnajdywanie podci gów za pomoc wyra e regularnych...138 Zamiana podci gów za pomoc wyra e regularnych...139 Rozdzielanie ci gów za pomoc wyra e regularnych...139 Propozycje dalszych lektur...140 W nast pnym rozdziale...140 Rozdzia 5. Ponowne wykorzystanie kodu i tworzenie funkcji... 141 Zalety ponownego stosowania kodu...141 Koszt...142 Niezawodno...142 Spójno...142 Stosowanie funkcji require() i include()...142 Rozszerzenia plików i require()...143 Stosowanie require() w szablonach stron WWW...144 Stosowanie opcji auto_prepend_file i auto_append_file...148 Stosowanie funkcji w PHP...149 Wywo ywanie funkcji...149 Wywo anie niezdefiniowanej funkcji...151 Wielko liter a nazwy funkcji...152 Definiowanie w asnych funkcji...152 Podstawowa struktura funkcji...152 Nadawanie nazwy funkcji...153 Parametry...154 Zasi g...156 Przekazanie przez referencj czy przekazanie przez warto?...158 Stosowanie s owa kluczowego return...159 Zwracanie warto ci przez funkcje...160 Implementacja rekurencji...161 Przestrzenie nazw...162 Propozycje dalszych lektur...163 W nast pnym rozdziale...163 Rozdzia 6. Obiektowy PHP... 165 Koncepcje programowania obiektowego...165 Klasy i obiekty...166 Polimorfizm...167 Dziedziczenie...167 Tworzenie klas, atrybutów i operacji w PHP...168 Struktura klasy...168 Konstruktory...168 Destruktory...169 Tworzenie egzemplarzy...169 Stosowanie atrybutów klasy...170 Kontrolowanie dost pu przy u yciu private i public...172 Wywo ywanie operacji klas...172 Implementacja dziedziczenia w PHP...173 Kontrolowanie widoczno ci w trakcie dziedziczenia przy u yciu private i protected.174 Uniewa nianie...175 Zapobieganie dziedziczeniu i uniewa nianiu przy u yciu final...176 Wielodziedziczenie...177 Implementowanie interfejsów...177

Spis tre ci 11 Tworzenie klas...178 Tworzenie kodu dla w asnej klasy...179 Zaawansowane mechanizmy obiektowe w PHP...186 U ywanie sta ych klasowych...186 Implementowanie metod statycznych...186 Sprawdzanie typu klasy i wskazywanie typu...186 Pó ne wi zania statyczne...187 Klonowanie obiektów...188 U ywanie klas abstrakcyjnych...188 Przeci anie metod przy u yciu call()...188 U ywanie metody autoload()...189 Implementowanie iteratorów i iteracji...190 Przekszta canie klas w a cuchy znaków...191 U ywanie API Reflection...192 W nast pnym rozdziale...192 Rozdzia 7. Obs uga b dów i wyj tków... 195 Koncepcja obs ugi wyj tków...195 Klasa Exception...196 Wyj tki definiowane przez u ytkownika...197 Wyj tki w Cz ciach samochodowych Janka...200 Wyj tki i inne mechanizmy obs ugi b dów w PHP...202 Propozycje dalszych lektur...203 W nast pnym rozdziale...203 Cz II Stosowanie MySQL...205 Rozdzia 8. Projektowanie internetowej bazy danych... 207 Koncepcje relacyjnych baz danych...208 Tabele...208 Kolumny...208 Wiersze...208 Warto ci...208 Klucze...209 Schematy...209 Relacje...210 Jak zaprojektowa internetow baz danych?...211 Okre l obiekty wiata realnego, których model chcesz wykona...211 Unikaj przechowywania redundantnych danych...211 Zapisuj atomowe warto ci kolumn...213 Dobierz w a ciwe klucze...214 Pomy l o zapytaniach, które zadasz bazie...214 Unikaj tworzenia tabel z wieloma pustymi polami...214 Typy tabel podsumowanie...215 Architektura internetowej bazy danych...215 Propozycje dalszych lektur...216 W nast pnym rozdziale...216 Rozdzia 9. Tworzenie internetowej bazy danych... 217 U ytkowanie monitora MySQL...218 Logowanie si do serwera MySQL...219 Tworzenie baz i rejestrowanie u ytkowników...220 Definiowanie u ytkowników i przywilejów...220

12 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Wprowadzenie do systemu przywilejów MySQL...221 Zasada najmniejszego przywileju...221 Rejestrowanie u ytkowników: polecenie GRANT...221 Typy i poziomy przywilejów...223 Polecenie REVOKE...224 Przyk ady u ycia polece GRANT i REVOKE...225 Rejestrowanie u ytkownika cz cego si z internetu...226 U ywanie odpowiedniej bazy danych...226 Tworzenie tabel bazy danych...227 Znaczenie dodatkowych atrybutów kolumn...228 Typy kolumn...229 Rzut oka na baz danych polecenia SHOW i DESCRIBE...231 Tworzenie indeksów...232 Identyfikatory MySQL...232 Wybór typów danych w kolumnach...233 Typy liczbowe...233 Propozycje dalszych lektur...236 W nast pnym rozdziale...237 Rozdzia 10. Praca z baz danych MySQL... 239 Czym jest SQL?...239 Zapisywanie danych do bazy...240 Wyszukiwanie danych w bazie...242 Wyszukiwanie danych spe niaj cych okre lone kryteria...243 Wyszukiwanie danych w wielu tabelach...245 Szeregowanie danych w okre lonym porz dku...249 Grupowanie i agregowanie danych...250 Wskazanie wierszy, które maj by wy wietlone...252 U ywanie podzapyta...252 Dokonywanie zmian rekordów w bazie danych...255 Zmiana struktury istniej cych tabel...255 Usuwanie rekordów z bazy danych...257 Usuwanie tabel...257 Usuwanie ca ych baz danych...258 Propozycje dalszych lektur...258 W nast pnym rozdziale...258 Rozdzia 11. czenie si z baz MySQL za pomoc PHP... 259 Jak dzia a internetowa baza danych?...259 Wykonywanie zapyta do bazy danych z poziomu strony WWW...262 Sprawdzenie poprawno ci wpisanych danych...263 Ustanawianie po czenia z baz danych...264 Wybór w a ciwej bazy danych...265 Wysy anie zapyta do bazy danych...265 Odczytywanie rezultatów zapyta...266 Zamykanie po czenia z baz danych...267 Wstawianie nowych danych do bazy...267 U ywanie instrukcji przygotowywanych...270 U ywanie innych interfejsów bazodanowych PHP...272 Stosowanie ogólnego interfejsu bazodanowego: PEAR MDB2...272 Propozycje dalszych lektur...274 W nast pnym rozdziale...274

Spis tre ci 13 Rozdzia 12. Administrowanie MySQL dla zaawansowanych... 275 Szczegó y systemu przywilejów...275 Tabela user...276 Tabele db i host...278 Tabele tables_priv, columns_priv i procs_priv...278 Kontrola dost pu: w jaki sposób MySQL u ywa tabel przywilejów...279 Zmiana przywilejów: kiedy zmiany zostan uwzgl dnione?...281 Ochrona bazy danych...282 MySQL z perspektywy systemu operacyjnego...282 Has a...282 Przywileje u ytkowników...283 MySQL i internet...283 Uzyskiwanie szczegó owych informacji o bazie danych...284 Uzyskiwanie informacji poleceniem SHOW...284 Uzyskiwanie informacji o kolumnach za pomoc polecenia DESCRIBE...286 Jak wykonywane s zapytania: polecenie EXPLAIN...286 Optymalizowanie bazy danych...291 Optymalizacja projektu bazy danych...291 Przywileje...291 Optymalizacja tabel...291 Stosowanie indeksów...292 U ywanie warto ci domy lnych...292 Wi cej wskazówek...292 Tworzenie kopii zapasowej bazy danych MySQL...292 Przywracanie bazy danych MySQL...293 Implementowanie replikacji...293 Konfigurowanie serwera nadrz dnego...294 Transfer danych pocz tkowych...294 Konfigurowanie odbiorcy lub odbiorców...295 Propozycje dalszych lektur...296 W nast pnym rozdziale...296 Rozdzia 13. Zaawansowane programowanie w MySQL... 297 Instrukcja LOAD DATA INFILE...297 Maszyny zapisu...298 Transakcje...299 Definicje dotycz ce transakcji...299 U ycie transakcji w InnoDB...300 Klucze obce...301 Procedury sk adowane...302 Prosty przyk ad...302 Zmienne lokalne...304 Kursory i struktury steruj ce...305 Propozycje dalszych lektur...308 W nast pnym rozdziale...308 Cz III E-commerce i bezpiecze stwo...309 Rozdzia 14. Komercyjne witryny internetowe... 311 Co chcemy osi gn?...311 Rodzaje komercyjnych stron WWW...311 Publikowanie informacji w broszurach internetowych...312 Przyjmowanie zamówie na produkty i us ugi...315 Dostarczanie us ug lub wyrobów maj cych posta cyfrow...319

14 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Zwi kszanie warto ci produktów i us ug...319 Ograniczanie kosztów...320 Ryzyko i zagro enia...320 Crackerzy...321 Przyci gni cie niewystarczaj cej liczby klientów...321 Awarie sprz tu komputerowego...322 Awarie sieci elektrycznych, komunikacyjnych i komputerowych oraz systemu wysy kowego...322 Silna konkurencja...322 B dy w oprogramowaniu...323 Zmiany polityki rz dowej...323 Ograniczenie pojemno ci systemów...323 Wybór strategii...323 W nast pnym rozdziale...324 Rozdzia 15. Bezpiecze stwo komercyjnych stron WWW... 325 Jak wag maj posiadane przez nas informacje?...326 Zagro enia bezpiecze stwa...326 Ujawnienie informacji poufnych...327 Utrata lub zniszczenie danych...328 Modyfikacje danych...329 Blokada us ugi...330 B dy w oprogramowaniu...331 Zaprzeczenie korzystania z us ugi...332 U yteczno, wydajno, koszty i bezpiecze stwo...333 Opracowanie polityki bezpiecze stwa...333 Zasady uwierzytelniania...334 Podstawy szyfrowania...335 Szyfrowanie z kluczem prywatnym...336 Szyfrowanie z kluczem publicznym...337 Podpis cyfrowy...338 Certyfikaty cyfrowe...339 Bezpieczne serwery WWW...339 Monitorowanie i zapisywanie zdarze...340 Zapory sieciowe...341 Tworzenie kopii zapasowych...342 Tworzenie kopii zapasowych zwyk ych plików...342 Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL...342 Bezpiecze stwo fizyczne...343 W nast pnym rozdziale...343 Rozdzia 16. Bezpiecze stwo aplikacji internetowych... 345 Strategie zapewniania bezpiecze stwa...345 Planowanie z wyprzedzeniem...346 Równowaga mi dzy bezpiecze stwem i u yteczno ci...346 Monitorowanie bezpiecze stwa...347 Ogólne podej cie do bezpiecze stwa...347 Rozpoznawanie zagro e...347 Dost p do danych poufnych i ich modyfikowanie...347 Utrata lub zniszczenie danych...348 Zablokowanie us ugi...348 Wstrzykiwanie kodu...349 Z amanie zabezpiecze dost pu do serwera...349 Identyfikacja u ytkowników...349 Crackerzy...350 Nie wiadomi u ytkownicy zainfekowanych komputerów...350

Spis tre ci 15 Rozczarowani pracownicy...350 Z odzieje sprz tu komputerowego...350 Autorzy systemów...350 Zabezpieczanie kodu ród owego...351 Filtrowanie danych pochodz cych od u ytkowników...351 Uniewa nianie danych wynikowych...355 Organizacja kodu ród owego...356 Zawarto kodu ród owego...357 Zagadnienia dotycz ce systemu plików...358 Stabilno kodu i b dy...358 Apostrofy wykonywania polece systemu operacyjnego i polecenie exec...359 Zabezpieczanie serwera WWW oraz PHP...360 Regularne uaktualnianie oprogramowania...361 Analiza ustawie w pliku php.ini...362 Konfiguracja serwera WWW...362 Aplikacje internetowe dzia aj ce na serwerach komercyjnych...364 Bezpiecze stwo serwera bazy danych...365 U ytkownicy i system uprawnie...365 Wysy anie danych do serwera...366 czenie si z serwerem...366 Praca serwera...367 Zabezpieczanie sieci...367 Instalacja zapory sieciowej...368 Wykorzystanie strefy zdemilitaryzowanej...368 Przygotowanie na ataki DoS i DDoS...369 Bezpiecze stwo komputerów i systemów operacyjnych...369 Uaktualnianie systemu operacyjnego...369 Udost pnianie tylko niezb dnych us ug...370 Fizyczne zabezpieczenie serwera...370 Planowanie dzia a na wypadek awarii...371 W nast pnym rozdziale...372 Rozdzia 17. Uwierzytelnianie przy u yciu PHP i MySQL... 373 Identyfikacja u ytkowników...373 Implementacja kontroli dost pu...374 Przechowywanie hase dost pu...376 Szyfrowanie hase...378 Zastrzeganie wi cej ni jednej strony...379 Podstawowa metoda uwierzytelniania...380 Wykorzystanie podstawowej metody uwierzytelniania w PHP...381 Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache przy u yciu plików.htaccess...383 Wykorzystanie modu u mod_auth_mysql do celów uwierzytelniania...386 Instalacja modu u mod_auth_mysql...386 Praca z mod_auth_mysql...387 Implementacja w asnej metody uwierzytelniania...388 Propozycje dalszych lektur...388 W nast pnym rozdziale...389 Rozdzia 18. Zabezpieczanie transakcji przy u yciu PHP i MySQL... 391 Zapewnienie bezpiecze stwa transakcji...391 Komputer u ytkownika...392 Internet...393 System docelowy...394 Wykorzystanie protoko u Secure Sockets Layer (SSL)...395 Kontrola danych pochodz cych od u ytkownika...398

16 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Bezpieczne przechowywanie danych...399 Ustalanie, czy powinno si przechowywa numery kart kredytowych...400 Szyfrowanie danych w PHP...401 Instalacja GPG...401 Testowanie GPG...404 Propozycje dalszych lektur...408 W nast pnej cz ci...408 Cz IV Zaawansowane techniki PHP...409 Rozdzia 19. Interakcja z systemem plików i serwerem... 411 Wprowadzenie do wysy ania plików...411 Kod HTML s u cy do wysy ania plików...412 Tworzenie PHP obs uguj cego plik...413 Najcz ciej spotykane problemy...417 Stosowanie funkcji katalogowych...418 Odczyt z katalogów...418 Otrzymywanie informacji na temat aktualnego katalogu...421 Tworzenie i usuwanie katalogów...421 Interakcja z systemem plików...422 Otrzymywanie informacji o pliku...422 Zmiana w a ciwo ci pliku...424 Tworzenie, usuwanie i przenoszenie plików...425 Stosowanie funkcji uruchamiaj cych programy...425 Interakcja ze rodowiskiem: funkcje getenv() i putenv()...427 Propozycje dalszych lektur...428 W nast pnym rozdziale...428 Rozdzia 20. Stosowanie funkcji sieci i protoko u... 429 Przegl d protoko ów...429 Wysy anie i odczytywanie poczty elektronicznej...430 Korzystanie z danych z innych witryn WWW...430 Stosowanie funkcji po cze sieciowych...433 Tworzenie kopii bezpiecze stwa lub kopii lustrzanej pliku...436 Stosowanie FTP w celu utworzenia kopii bezpiecze stwa lub kopii lustrzanej pliku...436 Wysy anie plików...442 Unikanie przekroczenia dopuszczalnego czasu...442 Stosowanie innych funkcji FTP...443 Propozycje dalszych lektur...443 W nast pnym rozdziale...444 Rozdzia 21. Zarz dzanie dat i czasem... 445 Uzyskiwanie informacji o dacie i czasie w PHP...445 Stosowanie funkcji date()...445 Obs uga znaczników czasu Uniksa...447 Stosowanie funkcji getdate()...448 Sprawdzanie poprawno ci dat przy u yciu funkcji checkdate()...449 Formatowanie znaczników czasu...450 Konwersja pomi dzy formatami daty PHP i MySQL...450 Obliczanie dat w PHP...452 Obliczanie dat w MySQL...454 Stosowanie mikrosekund...455 Stosowanie funkcji kalendarzowych...455 Propozycje dalszych lektur...456 W nast pnym rozdziale...456

Spis tre ci 17 Rozdzia 22. Generowanie obrazków... 457 Konfigurowanie obs ugi obrazków w PHP...457 Formaty obrazków...458 JPEG...459 PNG...459 WBMP...459 GIF...459 Tworzenie obrazków...460 Tworzenie kadru obrazka...460 Rysowanie lub umieszczanie tekstu w obrazku...461 Wy wietlanie ostatecznej grafiki...463 Ko cowe czynno ci porz dkuj ce...464 Stosowanie automatycznie generowanych obrazków na innych stronach...464 Stosowanie tekstu i czcionek do tworzenia obrazków...465 Konfiguracja podstawowego kadru...467 Dopasowanie tekstu do przycisku...468 Nadawanie tekstowi odpowiedniej pozycji...470 Wpisywanie tekstu do przycisku...471 Etap ko cowy...471 Rysowanie figur i wykresów danych...471 Inne funkcje obrazków...478 Propozycje dalszych lektur...478 W nast pnym rozdziale...478 Rozdzia 23. Stosowanie kontroli sesji w PHP... 479 Czym jest kontrola sesji?...479 Podstawowa zasada dzia ania sesji...479 Czym jest cookie?...480 Konfiguracja cookies w PHP...480 Stosowanie cookies w sesji...481 Przechowywanie identyfikatora sesji...481 Implementacja prostych sesji...482 Rozpoczynanie sesji...482 Zg aszanie zmiennych sesji...482 Stosowanie zmiennych sesji...483 Usuwanie zmiennych i niszczenie sesji...483 Przyk ad prostej sesji...483 Konfiguracja kontroli sesji...485 Implementacja uwierzytelniania w kontroli sesji...485 Propozycje dalszych lektur...491 W nast pnym rozdziale...491 Rozdzia 24. Inne przydatne w asno ci... 493 Stosowanie magicznych cudzys owów...493 Wykonywanie ci gów funkcja eval()...494 Zako czenie wykonania die i exit...495 Serializacja zmiennych i obiektów...495 Pobieranie informacji na temat rodowiska PHP...496 Uzyskiwanie informacji na temat za adowanych rozszerze...496 Identyfikacja w a ciciela skryptu...497 Uzyskiwanie informacji na temat daty modyfikacji skryptu...497 Czasowa zmiana rodowiska wykonawczego...497 Pod wietlanie róde...498 U ywanie PHP w wierszu polece...499 W nast pnej cz ci...500

18 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Cz V Tworzenie praktycznych projektów PHP i MySQL...501 Rozdzia 25. Stosowanie PHP i MySQL w du ych projektach... 503 Zastosowanie in ynierii oprogramowania w tworzeniu aplikacji WWW...504 Planowanie i prowadzenie projektu aplikacji WWW...504 Ponowne stosowanie kodu...505 Tworzenie kodu atwego w utrzymaniu...506 Standardy kodowania...506 Dzielenie kodu...509 Stosowanie standardowej struktury katalogów...509 Dokumentacja i dzielenie wewn trznych funkcji...510 Implementacja kontroli wersji...510 Wybór rodowiska programistycznego...511 Dokumentacja projektów...511 Prototypowanie...512 Oddzielanie logiki i zawarto ci...513 Optymalizacja kodu...514 Stosowanie prostych optymalizacji...514 Stosowanie produktów firmy Zend...514 Testowanie...515 Propozycje dalszych lektur...516 W nast pnym rozdziale...516 Rozdzia 26. Usuwanie b dów... 517 B dy programistyczne...517 B dy sk adni...517 B dy wykonania...519 B dy logiczne...523 Pomoc w usuwaniu b dów w zmiennych...525 Poziomy zg aszania b dów...527 Zmiana ustawie zg aszania b dów...528 Wyzwalanie w asnych b dów...529 Elegancka obs uga b dów...529 W nast pnym rozdziale...532 Rozdzia 27. Tworzenie uwierzytelniania u ytkowników i personalizacji... 533 Sk adniki rozwi zania...533 Identyfikacja u ytkownika i personalizacja...534 Przechowywanie zak adek...535 Rekomendowanie zak adek...535 Przegl d rozwi zania...535 Implementacja bazy danych...537 Implementacja podstawowej witryny...538 Implementacja uwierzytelniania u ytkowników...540 Rejestracja u ytkowników...540 Logowanie...545 Wylogowanie...548 Zmiana has a...549 Ustawianie zapomnianych hase...551 Implementacja przechowywania i odczytywania zak adek...555 Dodawanie zak adek...555 Wy wietlanie zak adek...557 Usuwanie zak adek...557 Implementacja rekomendacji...559 Rozwijanie projektu i mo liwe rozszerzenia...562 W nast pnym rozdziale...562

Spis tre ci 19 Rozdzia 28. Tworzenie koszyka na zakupy... 563 Sk adniki rozwi zania...563 Tworzenie katalogu online...564 ledzenie zakupów u ytkownika podczas przegl dania...564 Implementacja systemu p atno ci...564 Interfejs administratora...565 Przegl d rozwi zania...565 Implementacja bazy danych...568 Implementacja katalogu online...570 Przedstawianie kategorii...571 Wy wietlanie ksi ek danej kategorii...574 Przedstawianie szczegó owych danych ksi ki...575 Implementacja koszyka na zakupy...577 Stosowanie skryptu pokaz_kosz.php...577 Podgl d koszyka...580 Dodawanie produktów do koszyka...582 Zapisywanie uaktualnionego koszyka...583 Wy wietlanie podsumowania w pasku nag ówka...584 Pobyt w kasie...584 Implementacja p atno ci...589 Implementacja interfejsu administratora...591 Rozwijanie projektu...598 Zastosowanie istniej cego systemu...598 W nast pnym rozdziale...598 Rozdzia 29. Tworzenie serwisu poczty elektronicznej opartego na WWW... 599 Sk adniki rozwi zania...599 Protoko y poczty: POP3 i IMAP...599 Obs uga POP3 i IMAP w PHP...600 Przegl d rozwi zania...601 Konfiguracja bazy danych...603 Architektura skryptu...604 Logowanie i wylogowanie...608 Konfiguracja kont...611 Tworzenie nowego konta...613 Modyfikacja istniej cego konta...614 Usuwanie konta...614 Odczytywanie poczty...615 Wybór konta...615 Przegl danie zawarto ci skrzynki...617 Odczytywanie wiadomo ci pocztowych...619 Przegl danie nag ówków wiadomo ci...622 Usuwanie wiadomo ci...623 Wysy anie wiadomo ci...623 Wysy anie nowej wiadomo ci...624 Odpowiadanie i przekazywanie poczty...625 Rozwijanie projektu...626 W nast pnym rozdziale...627 Rozdzia 30. Tworzenie mened era list pocztowych... 629 Sk adniki rozwi zania...629 Konfiguracja bazy danych list i abonentów...630 Wysy anie plików...630 Wysy anie wiadomo ci z za cznikami...631 Przegl d rozwi zania...631 Konfiguracja bazy danych...633

20 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Architektura skryptu...635 Implementacja logowania...641 Tworzenie nowego konta...641 Logowanie...643 Implementacja funkcji u ytkownika...645 Przegl danie list...646 Przegl danie informacji na temat listy...650 Przegl danie archiwum listy...652 Zapisywanie i wypisywanie...653 Zmiana konfiguracji konta...654 Zmiana has a...654 Wylogowanie...656 Implementacja funkcji administratora...656 Tworzenie nowej listy...657 Wysy anie nowych wiadomo ci...658 Obs uga wysy ania wielu plików...661 Podgl d wiadomo ci...664 Rozsy anie wiadomo ci...665 Rozwijanie projektu...670 W nast pnym rozdziale...670 Rozdzia 31. Tworzenie forum WWW... 671 Proces...671 Sk adniki rozwi zania...672 Przegl d rozwi zania...673 Projektowanie bazy danych...674 Przegl danie drzewa artyku ów...676 Rozwijanie i zwijanie...678 Wy wietlanie artyku ów...680 Korzystanie z klasy wezel_drzewa...681 Przegl danie pojedynczych artyku ów...687 Dodawanie nowych artyku ów...688 Rozszerzenia...694 Wykorzystanie istniej cego systemu...694 W nast pnym rozdziale...694 Rozdzia 32. Tworzenie dokumentów spersonalizowanych w formacie PDF... 695 Opis projektu...695 Ocena formatów dokumentów...696 Sk adniki rozwi zania...700 System pyta i odpowiedzi...700 Oprogramowanie generuj ce dokumenty...700 Przegl d rozwi zania...703 Zadawanie pyta...704 Ocena odpowiedzi...705 Tworzenie certyfikatu RTF...707 Tworzenie certyfikatu PDF z szablonu...710 Generowanie dokumentu PDF za pomoc PDFlib...713 Skrypt Witaj, wiecie dla PDFlib...713 Tworzenie certyfikatu za pomoc PDFlib...717 Problemy zwi zane z nag ówkami...723 Rozwijanie projektu...724 W nast pnym rozdziale...724

Spis tre ci 21 Rozdzia 33. Korzystanie z us ug sieciowych za pomoc XML i SOAP... 725 Opis projektu: korzystanie z j zyka XML i us ug sieciowych...725 Podstawy XML...726 Podstawy us ug sieciowych...729 Sk adniki rozwi zania...730 Korzystanie z interfejsu us ug sieciowych Amazon.com...730 Wczytywanie dokumentów XML: odpowiedzi REST...731 Korzystanie z SOAP za pomoc PHP...732 Buforowanie...732 Opis rozwi zania...732 Aplikacja g ówna...734 Wy wietlanie listy ksi ek z danej kategorii...742 Tworzenie obiektu klasy WynikiWyszukiwania...743 Korzystanie z REST do wykonywania da i odczytywania wyników...750 Korzystanie z protoko u SOAP do wykonywania dania i odczytywania wyniku...755 Buforowanie danych pochodz cych z dania...756 Konstrukcja koszyka na zakupy...758 Przej cie do kasy na witrynie Amazon.com...761 Instalacja kodu ród owego...762 Kierunki rozwoju...762 Literatura...762 Rozdzia 34. Tworzenie aplikacji Web 2.0 z wykorzystaniem technologii Ajax...763 Czym jest technologia Ajax?...764 dania i odpowiedzi HTTP...764 DHTML i XML...765 Kaskadowe arkusze stylów (CSS)...766 Skrypty dzia aj ce po stronie klienta...767 Skrypty dzia aj ce po stronie serwera...768 XML i XSLT...768 Podstawy technologii Ajax...768 Obiekt XMLHTTPRequest...768 Komunikowanie si z serwerem...770 Przetwarzanie odpowiedzi serwera...772 Po czenie wszystkich elementów aplikacji...773 Dodanie nowych elementów do wcze niejszych projektów...775 Dodanie elementów Ajaksa do witryny Zak adkaphp...777 ród a dodatkowych informacji...788 Dodatkowe informacje na temat Document Object Model (DOM)...789 Biblioteki JavaScript dla aplikacji Ajax...789 Witryny internetowe przeznaczone dla programistów Ajax...790 Dodatki...791 Dodatek A Instalacja PHP i MySQL... 793 Instalacja Apache, PHP i MySQL w systemie UNIX...794 Instalacja przy u yciu binariów...794 Instalacja przy u yciu kodów ród owych...794 Plik httpd.conf informacje ko cowe...800 Czy obs uga PHP dzia a poprawnie?...800 Czy SSL dzia a poprawnie?...801

22 PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty Instalacja Apache, PHP i MySQL w systemie Windows...802 Instalacja MySQL w systemie Windows...803 Instalacja serwera Apache w systemie Windows...804 Instalacja PHP w systemie Windows...806 Instalowanie PEAR...808 Inne konfiguracje...809 Dodatek B Zasoby internetowe... 811 Zasoby po wi cone PHP...811 Zasoby po wi cone MySQL i SQL...813 Zasoby po wi cone serwerowi Apache...813 Zasoby po wi cone tworzeniu stron WWW...814 Skorowidz... 815

Rozdzia 2. Przechowywanie i wyszukiwanie danych W poprzednim rozdziale omówili my sposoby dost pu do danych umieszczonych w formularzu HTML i metody manipulowania nimi. Teraz przedstawiamy metody zapisywania informacji w celu pó niejszego ich wykorzystania. W wi kszo ci przypadków, w czaj c w to przyk ad z poprzedniego rozdzia u, celem jest przechowanie danych i pó niejsze ich za adowanie. W tym przyk adzie nale y zapami ta zamówienie klienta, aby pó niej je zrealizowa. W tym rozdziale opiszemy sposoby zapisania do pliku zamówienia przedstawionego w przyk adzie oraz metody pó niejszego odczytania tego pliku. Poka emy równie, dlaczego takie rozwi zanie nie zawsze jest najlepsze. Pracuj c z wi ksz liczb zamówie, powinno si zamiast niego u ywa systemu zarz dzania bazami danych, takiego jak MySQL. W tym rozdziale zostan poruszone nast puj ce zagadnienia: zapisywanie danych do pó niejszego u ycia, otwieranie pliku, tworzenie i zapisywanie pliku, zamykanie pliku, czytanie z pliku, blokowanie pliku, usuwanie pliku, inne przydatne informacje na temat plików, lepszy sposób obróbki danych: systemy zarz dzania bazami danych. Zapisywanie danych do pó niejszego u ycia Istniej dwa sposoby przechowywania danych w pliku jednorodnym oraz w bazie danych. Plik jednorodny mo e mie wiele ró nych formatów, lecz zazwyczaj terminem tym oznacza si prosty plik tekstowy. W opisywanym przyk adzie dane s zapisywane w pliku tekstowym, jedno zamówienie w jednym wierszu.

78 Cz I Stosowanie PHP Zapisywanie zamówie w taki w a nie sposób jest rozwi zaniem bardzo prostym w realizacji, ale zarazem jest ono obarczone licznymi ograniczeniami, co zostanie pokazane w dalszej cz ci rozdzia u. Przy obróbce danych znacznej wielko ci stosuje si zazwyczaj bazy danych. Mimo to pliki jednorodne znajduj zastosowania i istniej przypadki, w których wiedza na ich temat jest konieczna. Proces zapisu i odczytu plików w PHP przebiega w zbli ony sposób jak w wielu innych, podobnych j zykach programowania. Osoby znaj ce j zyk C lub skrypty pow oki Uniksa powinny bez trudu rozpozna podobie stwa tych procedur. Przechowywanie i wyszukiwanie zamówie Janka Poni ej u yta zostanie nieco zmodyfikowana wersja formularza zamówie, przedstawionego w poprzednim rozdziale. Na pocz tku nale y przeanalizowa ten formularz i kod PHP stworzony w celu obróbki zamówie. Kod HTML i skrypty PHP zastosowane w tym rozdziale znajduj si w folderze rozdzial_02 (przyk ady s dost pne na p ycie CD do czonej do ksi ki). Formularz zosta zmodyfikowany w celu atwego uzyskania adresu klienta. Nowa wersja formularza jest przedstawiona na rysunku 2.1. Rysunek 2.1. Wersja formularza zamówie pobieraj ca równie adres klienta Pole formularza zawieraj ce adres klienta nosi nazw adres. Podczas przetwarzania w PHP daje ono zmienn o nazwie $adres, pod warunkiem stosowania stylu krótkiego dost pu do zmiennych. Nale y pami ta, e przy zastosowaniu stylu d ugiego odwo anie do tej zmiennej to $REQUEST ['adres'], $_POST['adres'] lub $_GET['adres'], zale nie od metody zatwierdzenia (szczegó y opisali my w rozdziale 1.). W tym rozdziale ka de nadchodz ce zamówienie zostanie zapisane w tym samym pliku. Skonstruowany pó niej interfejs WWW pozwoli pracownikom Janka na przegl danie przyj tych zamówie.

Rozdzia 2. Przechowywanie i wyszukiwanie danych 79 Przetwarzanie plików Zapisywanie danych w pliku nast puje w trzech etapach. S to: 1. Otwarcie pliku. Je eli dany plik nie istnieje, nale y go utworzy. 2. Zapisanie danych w pliku. 3. Zamkni cie pliku. Podobnie, trójetapowo, przebiega odczytywanie danych z pliku: 1. Otwarcie pliku. Je eli plik nie mo e zosta otwarty (np. nie istnieje), fakt ten musi zosta rozpoznany i program powinien zako czy si w elegancki sposób (tzn. nie bombarduj c u ytkownika dok adnymi i niepotrzebnymi mu informacjami o b dach). 2. Odczytanie danych z pliku. 3. Zamkni cie pliku. Przy odczytywaniu danych z pliku dost pnych jest wiele sposobów ustalania ilo ci pobieranych naraz danych. Rozwi zania najcz ciej stosowane zostan opisane bardziej szczegó owo w poni szych punktach. Na pocz tek przedstawimy mechanizm otwierania plików. Otwieranie pliku Aby otworzy plik w PHP, stosuje si funkcj fopen(). Otwieraj c plik, nale y zadeklarowa sposób, w jaki b dzie on u ywany. Sposób ten nosi nazw trybu otwarcia pliku. Tryby otwarcia pliku System operacyjny serwera musi mie informacje na temat przeznaczenia otwieranego pliku. Musi wiedzie, czy plik mo e równocze nie zosta otwarty przez inny skrypt oraz czy u ytkownik posiada uprawnienia do dost pu i modyfikacji pliku. Przede wszystkim tryb otwarcia pliku dostarcza systemowi operacyjnemu mechanizmu przetwarzania da dost pu od innych u ytkowników b d skryptów oraz metody sprawdzania uprawnie dost pu do konkretnych plików. Przy otwieraniu pliku nale y mie trzy informacje: 1. Mo na otworzy plik w nast puj cych trybach: tylko do odczytu, tylko do zapisu lub do obu tych celów. 2. Przy zapisywaniu danych w pliku mo na nadpisa istniej ce dane b d doda nowe na jego ko cu. Mo na równie opracowa zgrabny sposób zaka czania programu zamiast nadpisywania pliku na pliku, który ju istnieje. 3. Przy zapisywaniu pliku przy u yciu systemu rozró niaj cego pliki tekstowe i binarne mo na okre li dany typ. Funkcja fopen() rozpoznaje po czenia tych trzech opcji.

80 Cz I Stosowanie PHP Stosowanie funkcji fopen() do otwarcia pliku Aby zapisa zamówienie klienta do pliku zamówie Janka, nale y zastosowa nast puj cy wiersz kodu: $wp = fopen("$document_root/../zamowienia/zamowienia.txt", 'w'); Przy wywo aniu funkcja fopen spodziewa si dwóch lub trzech parametrów. Zazwyczaj stosuje si dwa, jak pokazano w powy szym przyk adzie. Pierwszy parametr to nazwa pliku, który ma zosta otwarty. Mo na tu okre li cie k dost pu do pliku, jak w powy szym przyk adzie; plik zamowienia.txt znajduje si w katalogu zamówie. Zastosowana zosta a wbudowana w PHP zmienna $SERVER['DOCUMENT_ROOT'] lecz, ze wzgl du na uci liwo stosowania pe nych nazw zmiennych formy, przypisali my jej krótsz nazw. Zmienna ta wskazuje na podstawowy element drzewa katalogów serwera WWW. W wierszu tym u yto symbolu.., oznaczaj cego katalog nadrz dny katalogu macierzystego, który ze wzgl du na bezpiecze stwo znajduje si poza drzewem katalogów. Nie mo na pozwoli na inny sposób dost pu przez WWW do tego pliku poza dostarczanym interfejsem. cie ka tego typu jest nazywana cie k wzgl dn, poniewa opisuje miejsce w systemie plików w zale no ci od katalogu macierzystego. Podobnie jak w przypadku nadawania zmiennym formy krótkich nazw, na pocz tku skryptu nale y umie ci nast puj cy wiersz: $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; w celu skopiowania zawarto ci zmiennej nosz cej nazw d ug do zmiennej o krótkiej nazwie. Analogicznie do ró norodno ci metod dost pu do danych formy, istniej równie ró ne sposoby dost pu do predefiniowanych zmiennych serwera. W zale no ci od ustawie serwera (szczegó- owe informacje na ten temat mo na znale w rozdziale 1.) mo na pozyska katalog macierzysty za pomoc : $_SERVER['DOCUMENT_ROOT'] $DOCUMENT_ROOT $HTTP_SERVER_VARS['DOCUMENT_ROOT'] Podobnie jak w przypadku danych formy, zalecany jest pierwszy sposób. Mo na równie okre li bezwzgl dn cie k dost pu do pliku, b d c cie k od katalogu g ównego (/ w systemach Unix i zazwyczaj C:\ w systemach Windows). Na przyk adowym serwerze Uniksa cie ka ta mo e wygl da nast puj co: /home/ksiazka/zamowienia. Niedogodno ci tej metody, zw aszcza w wypadku korzystania z obcego serwera, jest mo liwo modyfikacji cie ki bezwzgl dnej, co mo e oznacza powa ne zmiany w wielu skryptach. Je eli cie ka nie zostanie podana, PHP b dzie szuka pliku i ewentualnie utworzy go w tym samym katalogu, w którym znajduje si skrypt. Mo e si to ró ni w zale no ci od faktu, czy PHP jest uruchamiany poprzez jaki skrypt CGI, i zale y od konfiguracji serwera. W rodowisku Uniksa stosuje si uko niki (/), natomiast w rodowisku Windows mo na u ywa lewych (\) lub prawych uko ników (/), które musz jednak zosta oznaczone jako znaki specjalne, aby funkcja fopen w a ciwie je zinterpretowa a. W tym celu nale y po prostu doda przed ka dym symbolem jeszcze jeden lewy uko nik, jak pokazano w poni szym przyk adzie: $wp = fopen("..\\..\\zamowienia\\zamowienia.txt", 'w');

Rozdzia 2. Przechowywanie i wyszukiwanie danych 81 Niewiele osób stosuje w cie kach dost pu w kodzie PHP znaki odwrotnych uko ników, poniewa oznacza oby to, e kod ten b dzie dzia a tylko w systemach Windows. Stosowanie zwyk ych uko ników pozwala na przenoszenie kodu mi dzy maszynami pracuj cymi w systemach Unix i Windows bez konieczno ci wprowadzania w nim zmian. Drugim parametrem funkcji fopen() jest tryb otwarcia pliku, okre laj cy jego przeznaczenie. Powinien on zosta podany jako ci g. W powy szym przyk adzie funkcji fopen() zostaje przekazana warto w, co oznacza otwarcie pliku do zapisu. Podsumowanie trybów otwarcia pliku przedstawiono w tabeli 2.1. Tabela 2.1. Podsumowanie trybów otwarcia pliku w funkcji fopen Tryb Nazwa trybu Znaczenie r Odczyt Otwarcie pliku do odczytu, poczynaj c od pocz tku pliku r+ Odczyt Otwarcie pliku do odczytu i zapisu, poczynaj c od pocz tku pliku w Zapis Otwarcie pliku do zapisu, poczynaj c od pocz tku pliku. Je eli plik istnieje, bie ca zawarto zostanie skasowana. W przeciwnym wypadku nast pi próba jego utworzenia w+ Zapis Otwarcie pliku do zapisu i odczytu, poczynaj c od pocz tku pliku. Je eli plik istnieje, bie ca zawarto zostanie skasowana, je eli za nie, nast pi próba jego utworzenia x Ostro ny zapis Otwarcie pliku do zapisu rozpoczynaj cego si na pocz tku pliku. Je li plik ju istnieje, nie zostanie otwarty, funkcja fopen() zwróci warto false, a PHP wygeneruje ostrze enie x+ Ostro ny zapis Otwarcie pliku do zapisu i odczytu rozpoczynaj cego si na pocz tku pliku. Je li plik ju istnieje, nie zostanie otwarty, funkcja fopen() zwróci warto false, a PHP wygeneruje ostrze enie a Dodawanie Otwarcie pliku do dodawania zawarto ci, pocz wszy od ko ca istniej cej zawarto ci. Je eli plik nie istnieje, nast pi próba jego utworzenia a+ Dodawanie Otwarcie pliku do dodawania zawarto ci i odczytu, pocz wszy od ko ca istniej cej zawarto ci. Je eli plik nie istnieje, nast pi próba jego utworzenia b Tryb binarny Stosowany w po czeniu z jednym z powy szych typów w wypadku korzystania z systemu rozró niaj cego pliki tekstowe i binarne. Windows go rozró nia, Unix nie. Programi ci PHP zalecaj, by zawsze u ywa tej opcji w celu zapewnienia sobie maksymalnej przeno no ci. Jest to tryb domy lny t Tryb tekstowy Stosowany w po czeniu z jednym z powy szych trybów. Tryb ten jest dost pny jedynie w systemie Windows. Nie jest on zalecany, chyba e przed przeniesieniem kodu zostanie zamieniony na tryb b Tryb otwarcia pliku zastosowany w przyk adzie zale y od sposobu, w jaki system zostanie u yty. Powy ej wyst puje tryb 'w', co oznacza, e w pliku b dzie mog o by zapami tane tylko jedno zamówienie. Ka de nowo przyj te zamówienie nadpisze poprzednie. Nie jest to rozwi zanie zbyt rozs dne, wi c lepiej u y trybu dodawania (oraz, zgodnie z zaleceniem, trybu binarnego): $wp = fopen("$document_root/../zamowienia/zamowienia.txt", 'ab'); Istnieje równie trzeci, opcjonalny parametr funkcji fopen(). Stosuje si go w celu szukania pliku w lokalizacjach podanych w opcji include_path (ustawianej w konfiguracji PHP szczegó y w dodatku A). Aby u y tej opcji, nale y nada temu parametrowi warto 1. Nie trzeba wtedy podawa cie ki dost pu do pliku. $wp = fopen('zamowienia.txt', 'ab', true); Czwarty parametr równie jest opcjonalny. Funkcja fopen() dopuszcza, by nazwy plików by y poprzedzone nazw protoko u (na przyk ad http://), a same pliki by y otwierane ze zdalnych

82 Cz I Stosowanie PHP lokalizacji. Niektóre protoko y pozwalaj ponadto na przekazywanie dodatkowych parametrów. Taki sposób u ycia funkcji fopen() zostanie opisany bardziej szczegó owo w dalszej cz ci tego rozdzia u. Je eli funkcji fopen() uda si otwarcie pliku, zwraca ona zasób b d cy w rzeczywisto ci uchwytem albo wska nikiem pliku i przechowuje go w zmiennej, w powy szym przyk adzie: $wp. Zmienna ta jest stosowana przy kolejnych próbach dost pu do pliku, to znaczy przy odczytywaniu lub zapisywaniu danych. Otwieranie pliku przez protokó FTP lub HTTP Funkcja fopen() s u y do otwierania do odczytu lub zapisu plików lokalnych. Za jej pomoc mo na tak e otwiera pliki poprzez FTP, HTTP i inne protoko y. W asno t mo na zablokowa, wy czaj c w pliku php.ini dyrektyw allow_url_fopen. Je eli wi c otwieranie plików zdalnych przy u yciu fopen() sprawia k opoty, najpierw nale y zajrze do pliku php.ini. Je eli wprowadzona nazwa pliku rozpoczyna si od ftp://, otwarte zostanie pasywne po czenie FTP z serwerem, którego adres zosta wprowadzony, a funkcja zwróci warto wska nika na pocz tek pliku. Je eli wprowadzona nazwa pliku rozpoczyna si od http://, otwarte zostanie pasywne po czenie HTTP z serwerem, którego adres zosta wprowadzony, a funkcja zwróci warto wska nika na odpowied. Przy zastosowaniu trybu HTTP w starszych wersjach PHP adres odnosz cy si do katalogu musi zawiera ko cz ce uko niki, jak w poni szym przyk adzie: http://www.serwer.com/ a nie http://www.serwer.com Przy zastosowaniu drugiej wersji adresu (bez uko nika) serwer WWW u yje zwyk ego przekierowania HTTP i prze le w odpowiedzi pierwszy z powy szych adresów (warto wykona to zadanie). Nale y pami ta, e nazwy domen w URL-ach nie s ró nicowane ze wzgl du na wielko liter, w przeciwie stwie do cie ek i nazw plików. Problemy z otwieraniem plików Popularnym b dem jest próba otwarcia pliku, co do którego nie posiada si praw odczytu lub zapisu. (B d taki pojawia si zazwyczaj w systemach operacyjnych z rodziny Unix, od czasu do czasu mo na jednak spotka si z nim w systemie Windows.) W takim przypadku PHP wy wietli ostrze enie podobne do przedstawionego na rysunku 2.2. Po pope nieniu takiego b du nale y upewni si, czy skrypt, który jest stosowany, posiada prawo dost pu do danego pliku. Zale nie od konfiguracji serwera, skrypt mo e by uruchomiony z prawami u ytkownika serwera WWW lub z prawami w a ciciela swojego katalogu. W wi kszo ci systemów skrypt zostanie uruchomiony jako u ytkownik serwera WWW. Je eli na przyk ad skrypt znajduje si w systemie uniksowym w katalogu ~/public_html/rozdzia 2, nale y utworzy ogólnodost pny katalog, w którym przechowywane b d zamówienia. Aby to uczyni, mo na wpisa : mkdir ~/zamowienia chmod 777 ~/zamowienia/

Rozdzia 2. Przechowywanie i wyszukiwanie danych 83 Rysunek 2.2. Podczas nieudanej próby otwarcia pliku PHP wy wietla specyficzne ostrze enie Nale y pami ta, e katalogi i pliki z ogólnym prawem zapisu s bardzo niebezpieczne. W szczególno ci nie powinno si u ywa katalogów dost pnych bezpo rednio z poziomu WWW, które posiadaj mo liwo zapisu. Z tego powodu przyk adowy katalog zamowienia zosta umieszczony dwa poziomy wy ej, ponad katalogiem public_html. Szczegó owe informacje na temat bezpiecze stwa s przedstawione w rozdziale 15. Z e ustawienia dost pu do plików to najpopularniejszy, lecz nie jedyny b d pope niany przy otwieraniu plików. Je eli plik nie mo e zosta otwarty, trzeba koniecznie o tym wiedzie, aby nie próbowa odczytywa ani zapisywa w nim danych. Je eli wywo anie funkcji fopen() nie powiedzie si, zwróci ona warto false. Mo na wtedy zast pi oryginalny komunikat o b dzie PHP innym, bardziej przyjaznym dla u ytkownika: @ $wp = fopen("$document_root/../zamowienia/zamowienia.txt", 'ab'); if (!$wp) { echo "<p><strong> Zamówienie Pa stwa nie mo e zosta przyj te w tej chwili. Prosz spróbowa pó niej.</strong></p></body></html>"; exit; } Symbol @ umieszczony przed wywo aniem funkcji fopen() nakazuje PHP wyt umienie wszystkich b dów wynik ych z tego wywo ania. Zazwyczaj warto wiedzie, kiedy wyst puje b d. Kwesti t rozwa ymy pó niej. Wiersz ten mo na równie zapisa w nast puj cy sposób: $wp = @fopen("$document_root/../ zamowienia/zamowienia.txt". 'a'); jednak w takiej sytuacji nie wida wyra nie, e stosowane jest ukrywanie b dów, co mo e utrudni debugowanie kodu. Opisana metoda stanowi najprostszy sposób radzenia sobie z b dami. Bardziej elegancki sposób obs ugi b dów zostanie przedstawiony w rozdziale 7.

84 Cz I Stosowanie PHP Instrukcja if sprawdza warto zmiennej $wp, aby ustali, czy wywo anie funkcji fopen() zwróci o prawid owy wska nik. Je eli nie, wy wietla komunikat o b dzie i ko czy dzia anie skryptu. Poniewa strona zako czy si w tym miejscu, w powy szym kodzie zamkni te zosta y równie znaczniki HTML, aby kod HTML dzia a bezb dnie. Wynik dzia ania powy szego fragmentu skryptu zosta przedstawiony na rysunku 2.3. Rysunek 2.3. Stosowanie w asnych komunikatów o b dach zamiast tych wbudowanych w PHP jest niew tpliwie bardziej przyjazne dla u ytkownika Zapisywanie danych w pliku Zapisywanie danych w pliku w PHP jest stosunkowo proste. Stosuje si do tego funkcj fwrite() (zapis do pliku) lub fputs() (umieszczenie ci gu w pliku). Funkcja fputs() jest inn nazw funkcji fwrite(). Funkcj fwrite() wywo uje si w nast puj cy sposób: fwrite($wp, $ciagwyjsciowy); Funkcja ta nakazuje PHP zapisanie ci gu zawartego w zmiennej $ciagwyjsciowy do pliku wskazywanego przez zmienn $wp. Alternatyw dla funkcji fwrite() jest funkcja file_put_contents(). Jej prototyp przedstawia si nast puj co: int file_put_contents ( string nazwa_pliku, string dane [, int znaczniki [, resource kontekst]]) Funkcja zapisuje ci g znaków zawarty w danych do pliku o nazwie nazwa_pliku, bez potrzeby wywo ywania funkcji fopen() (ani fclose()). Jest to nowa funkcja, wprowadzona w PHP5, a funkcj dla niej komplementarn jest file_get_contents(), o której nied ugo powiemy. Opcjonalnych parametrów znaczniki i kontekst najcz ciej u ywa si w trakcie zapisywania do plików zdalnych przy u yciu na przyk ad HTTP i FTP. (Funkcje te zostan omówione w rozdziale 20.).

Rozdzia 2. Przechowywanie i wyszukiwanie danych 85 Parametry funkcji fwrite() Funkcja fwrite() pobiera trzy parametry, lecz ostatni z nich jest opcjonalny. Oto prototyp funkcji fwrite(): int fwrite(resource wskaznik_pliku, string ciag, int [dlugosc]); Trzeci parametr, dlugosc, zawiera maksymaln mo liw do zapisania liczb bajtów. Je eli parametr ten zosta umieszczony w wywo aniu funkcji, fwrite() b dzie zapisywa ciag w pliku wskazanym przez wskaznik pliku, dopóki nie osi gnie ko ca ciagu lub zapisze dlugosc bajtów, zale nie od tego, co wyst pi wcze niej. D ugo a cucha znaków mo na odczyta, u ywaj c funkcji PHP o nazwie strlen() w nast puj cy sposób: fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy)); Trzeciego parametru u ywa si w trakcie zapisywania w trybie binarnym, poniewa mo na dzi ki niemu unikn pewnych komplikacji zwi zanych ze zgodno ci mi dzy platformami. Formaty plików Tworz c plik danych podobny do przyk adowego, mo na okre li dowolny format przechowywania danych. Je eli jednak dane te b d wykorzystywane pó niej przez jak aplikacj, nale y zastosowa si do zasad okre lonych przez t aplikacj. Poni ej przedstawiono ci g opisuj cy jeden rekord w pliku danych: $ciagwyjsciowy = $data."\t".$iloscopon." opon \t".$iloscoleju." butelek oleju\t".$iloscswiec." swiec zaplonowych\t".$wartosc."pln\t".$adres."\n"; W tym prostym przyk adzie ka dy rekord jest zapisany w osobnym wierszu pliku. Metod t zastosowano, poniewa wyst puje w niej prosty separator rekordów: znak nowego wiersza. Znaki te przedstawia si za pomoc sekwencji "\n", gdy s niewidzialne. W ca ej ksi ce pola danych b d zapisywane za ka dym razem w jednakowym porz dku i oddzielane znakami tabulacji. Poniewa znak ten równie jest niewidzialny, przedstawia si go za pomoc sekwencji "\t". Mo na wybra dowolny, czytelny znak podzia u. Znak podzia u powinien by znakiem, który nie wyst puje po ród wprowadzanych danych, lub te dane powinny zosta przekszta cone w celu usuni cia wyst puj cych w nich znaków podzia u. Przekszta canie danych zostanie omówione w rozdziale 4. Na razie nale y przyj, e przy wprowadzaniu zamówienia nie zostanie u yty znak tabulacji, co jest zdarzeniem mo liwym, lecz ma o prawdopodobnym. Stosowanie specjalnych znaków separuj cych pola pozwala na atwiejsze rozdzielenie zmiennych przy odczytywaniu danych. Kwestia ta zostanie rozwa ona w rozdziale 3. oraz w rozdziale 4. Tymczasem ka de zamówienie b dzie traktowane jako pojedynczy ci g. Po przyj ciu kilku zamówie zawarto pliku powinna wygl da podobnie do przedstawionej na listingu 2.1.