Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00476 010174 11041322 na godz. na dobę w sumie
PHP. Praktyczne skrypty, które oszczędzą Twój czas - książka
PHP. Praktyczne skrypty, które oszczędzą Twój czas - książka
Autor: , Liczba stron: 248
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-1851-4 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Obszerny zbiór przydatnych skryptów! Musisz go mieć!

PHP jest łatwym w użyciu językiem skryptowym. Łatwym, a przez to niezwykle popularnym. Jednak, czy ktoś mówił, że w łatwym języku nie można napotkać na skomplikowane problemy? Niestety odpowiedz brzmi - nie. Jednak nie załamuj rąk! Dzięki swej popularności, w sieci istnieje niezliczona liczba stron zawierających informacje, które mogą być przydatne w rozwiązywaniu Twoich problemów.

Ale po co szukać perełek wśród masy kiepskich rozwiązań? Czyż nie lepiej sięgnąć po książkę, która zawierałaby rozwiązania najczęstszych zadań? Oczywiście, że tak. Właśnie taką książkę trzymasz przed sobą! Książka ta zawiera blisko 80 skryptów pozwalających na rozwiązanie najróżniejszych zadań, począwszy od formatowania dat i ciągów znaków, skończywszy na skryptach wykorzystujących pocztę elektroniczną. Dzięki tej książce dowiesz się między innymi, jak tworzyć bezpieczne skrypty oraz pracować z formularzami. Dodatkowo poznasz sposoby konfiguracji samego PHP. Dzięki książce 'Praktyczne skrypty, które oszczędzą Twój czas' twoje skrypty będą lepsze, a Ty zyskasz więcej wolnego czasu!

Nie trać czasu na poszukiwanie dobrych rozwiązań! Miej je pod ręką!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

PHP. Praktyczne skrypty, które oszczêdz¹ Twój czas Autor: William Steinmetz, Brian Ward T³umaczenie: Miko³aj Szczepaniak ISBN: 978-83-246-1851-4 Tytu³ orygina³u: Wicked Cool PHP: Real-World Scripts That Make Difficult Things Possible Format: 80x235, stron: 248 Obszerny zbiór przydatnych skryptów! Musisz go mieæ! • Jak skonfigurowaæ œrodowisko PHP? • Jak tworzyæ bezpieczne skrypty PHP? • Jakie skrypty musisz znaæ? PHP jest ³atwym w u¿yciu jêzykiem skryptowym. £atwym, a przez to niezwykle popularnym. Jednak, czy ktoœ mówi³, ¿e w ³atwym jêzyku nie mo¿na napotkaæ na skomplikowane problemy? Niestety odpowiedz brzmi – nie. Jednak nie za³amuj r¹k! Dziêki swej popularnoœci, w sieci istnieje niezliczona liczba stron zawieraj¹cych informacje, które mog¹ byæ przydatne w rozwi¹zywaniu Twoich problemów. Ale po co szukaæ pere³ek wœród masy kiepskich rozwi¹zañ? Czy¿ nie lepiej siêgn¹æ po ksi¹¿kê, która zawiera³aby rozwi¹zania najczêstszych zadañ? Oczywiœcie, ¿e tak. W³aœnie tak¹ ksi¹¿kê trzymasz przed sob¹! Ksi¹¿ka ta zawiera blisko 80 skryptów pozwalaj¹cych na rozwi¹zanie najró¿niejszych zadañ, pocz¹wszy od formatowania dat i ci¹gów znaków, skoñczywszy na skryptach wykorzystuj¹cych pocztê elektroniczn¹. Dziêki tej ksi¹¿ce dowiesz siê miêdzy innymi, jak tworzyæ bezpieczne skrypty oraz pracowaæ z formularzami. Dodatkowo poznasz sposoby konfiguracji samego PHP. Dziêki ksi¹¿ce „Praktyczne skrypty, które oszczêdz¹ Twój czas” twoje skrypty bêd¹ lepsze, a Ty zyskasz wiêcej wolnego czasu! • Zestaw skryptów, które musi znaæ ka¿dy programista • Tworzenie szablonów Smarty • Konfigurowanie œrodowiska PHP • Przegl¹d wszystkich ustawieñ PHP • Zastosowanie pakietu SafeHTML • Zapobieganie atakom XSS • Zapewnienie bezpieczeñstwa w skryptach PHP • Generowanie losowych hase³ • Praca z formularzami • Weryfikacja danych z formularza • Weryfikacja kart kredytowych • Operacje wykonywane na datach • Praca z tekstem oraz kodem HTML • Wykorzystanie plików w codziennej pracy • Monitorowanie sesji u¿ytkownika • Mechanizm logowania do aplikacji • Tworzenie obrazów CAPTCHA • Operowanie danymi w formacie XML • Operowanie grafik¹ Nie traæ czasu na poszukiwanie dobrych rozwi¹zañ! Miej je pod rêk¹! Spis treĂci WPROWADZENIE ....................................................................................... 9 1. NAJCZ}¥CIEJ ZADAWANE ¿YCIOWE PYTANIA — SKRYPTY, KTÓRE KA¿DY PROGRAMISTA PHP CHCE (MUSI) ZNAm ...................... 11 Skrypt nr 1: DoïÈczenie innego pliku w formie czÚĂci danego skryptu ..................................12 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................13 Skrypt nr 2: Naprzemienne kolorowanie wierszy tabeli ........................................................15 Doskonalenie tego skryptu ................................................................................................16 Skrypt nr 3: Tworzenie ïÈczy Poprzednia/NastÚpna ..............................................................18 Stosowanie tego skryptu ....................................................................................................21 Skrypt nr 4: WyĂwietlanie zawartoĂci tablicy .........................................................................22 Skrypt nr 5: Przeksztaïcanie tablicy w zmiennÈ .....................................................................23 nietablicowÈ z moĝliwoĂciÈ przywrócenia oryginalnej struktury ...........................................24 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................24 Skrypt nr 6: Sortowanie tablic wielowymiarowych ................................................................25 Doskonalenie tego skryptu ................................................................................................26 Skrypt nr 7: Tworzenie dla witryny internetowej szablonów Smarty ....................................26 Instalacja biblioteki Smarty .................................................................................................27 Krótki podrÚcznik Smarty ..................................................................................................28 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................29 Doskonalenie tego skryptu ................................................................................................30 2. KONFIGUROWANIE PHP ......................................................................... 31 Ustawienia konfiguracyjne i plik php.ini .................................................................................31 Lokalizowanie pliku php.ini ................................................................................................32 Skrypt nr 8: Odkrywanie wszystkich ustawieñ PHP ..............................................................33 Skrypt nr 9: Odczytywanie poszczególnych ustawieñ ........................................................33 Skrypt nr 10: Raportowanie o bïÚdach ...................................................................................35 Typowe komunikaty o bïÚdach ..........................................................................................35 Skrypt nr 11: Ukrywanie wszystkich komunikatów o bïÚdach .............................................. 37 Skrypt nr 12: Wydïuĝanie czasu wykonywania skryptu ......................................................... 38 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................... 38 Skrypt nr 13: Uniemoĝliwianie uĝytkownikom wysyïania wielkich plików ........................... 38 Skrypt nr 14: WyïÈczanie rejestrowanych zmiennych globalnych ......................................... 39 Skrypt nr 15: WïÈczanie „magicznych cudzysïowów” ........................................................... 39 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................... 40 Skrypt nr 16: Ograniczanie dostÚpu PHP do plików ......................................................... 40 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................... 41 Skrypt nr 17: WyïÈczanie obsïugi okreĂlonych funkcji ........................................................... 41 Skrypt nr 18: Dodawanie rozszerzeñ do PHP ....................................................................... 41 Dodawanie rozszerzeñ jÚzyka PHP ................................................................................... 43 Instalacja rozszerzeñ za pomocÈ internetowego panelu sterowania ................................. 44 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................... 48 3. BEZPIECZE”STWO W PHP ....................................................................... 49 Ustawienia konfiguracyjne zalecane z uwagi na bezpieczeñstwo .......................................... 51 Skrypt nr 19: Wstrzykiwanie kodu jÚzyka SQL ..................................................................... 52 Skrypt nr 20: Zapobieganie prostym atakom typu XSS ......................................................... 54 Skrypt nr 21: Stosowanie pakietu SafeHTML ........................................................................ 56 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................... 57 Skrypt nr 22: Ochrona danych za pomocÈ jednokierunkowej funkcji generujÈcej skróty ..... 58 Doskonalenie tego skryptu ................................................................................................ 59 Skrypt nr 23: Szyfrowanie danych za pomocÈ rozszerzenia Mcrypt ..................................... 60 Doskonalenie tego skryptu ................................................................................................ 62 Skrypt nr 24: Generowanie haseï losowych .......................................................................... 62 Stosowanie tego skryptu ................................................................................................... 63 4. PRACA Z FORMULARZAMI ..................................................................... 65 ¥rodki bezpieczeñstwa: formularze nie sÈ godne zaufania .................................................... 65 Strategie weryfikacji .............................................................................................................. 66 Stosowanie zmiennych $_POST, $_GET, $_REQUEST oraz $_FILES do uzyskiwania dostÚpu do danych formularza ............................................... 67 Skrypt nr 25: Spójne i bezpieczne uzyskiwanie zmiennych formularza ................................. 67 Skrypt nr 26: Usuwanie zbÚdnych znaków biaïych .................................................................... 68 Skrypt nr 27: Importowanie zmiennych formularza do tablicy ............................................. 69 Skrypt nr 28: Sprawdzanie, czy odpowiedě naleĝy do zbioru prawidïowych wartoĂci ......... 72 Doskonalenie tego skryptu ................................................................................................ 73 Skrypt nr 29: Stosowanie wielu przycisków akceptacji formularza ....................................... 74 Skrypt nr 30: Weryfikacja kart kredytowych ......................................................................... 74 Stosowanie tego skryptu ................................................................................................... 77 Doskonalenie tego skryptu ................................................................................................ 77 4 S p i s t r e Ă c i Skrypt nr 31: Podwójne sprawdzanie daty wygaĂniÚcia waĝnoĂci karty kredytowej .............77 Stosowanie tego skryptu ....................................................................................................79 Skrypt nr 32: Sprawdzanie poprawnoĂci adresów poczty elektronicznej ..............................79 Skrypt nr 33: Sprawdzanie poprawnoĂci numerów telefonu .................................................80 5. PRACA Z TEKSTEM I KODEM J}ZYKA HTML .......................................... 83 Skrypt nr 34: WyodrÚbnianie fragmentu ïañcucha ....................................................................83 Doskonalenie tego skryptu ................................................................................................86 Skrypt nr 35: Zmiana liter ïañcucha na wielkie, maïe lub wielkie litery na poczÈtku wyrazów ........................................................................86 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................87 Skrypt nr 36: Odnajdywanie podïañcuchów ..........................................................................88 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................89 Skrypt nr 37: ZastÚpowanie podïañcuchów ...........................................................................89 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................90 Skrypt nr 38: Odnajdywanie i poprawianie literówek za pomocÈ moduïu pspell ..................91 Praca ze sïownikiem domyĂlnym .......................................................................................91 Dodawanie sïownika niestandardowego do biblioteki pspell .............................................94 Co moĝe pójĂÊ nie po naszej myĂli? ...................................................................................95 Skrypt nr 39: Wyraĝenia regularne ........................................................................................96 Podstawy wyraĝeñ regularnych .........................................................................................96 Sekwencje znaków specjalnych ..........................................................................................97 Repetytory wzorców .........................................................................................................98 Grupowanie .......................................................................................................................99 Klasy znaków ......................................................................................................................99 PoïÈczenie wszystkich omówionych elementów ...............................................................99 Dopasowywanie i wyodrÚbnianie tekstu za pomocÈ wyraĝeñ regularnych .....................100 ZastÚpowanie podïañcuchów za pomocÈ wyraĝeñ regularnych ......................................102 Skrypt nr 40: Przebudowa tabeli jÚzyka HTML ...................................................................103 Skrypt nr 41: Tworzenie screen scrapera ............................................................................104 Doskonalenie tego skryptu ..............................................................................................106 Skrypt nr 42: Konwersja zwykïego tekstu na prawidïowy kod jÚzyka HTML .....................106 Skrypt nr 43: Automatyczna konwersja adresów URL na hiperïÈcza ..................................109 Skrypt nr 44: Usuwanie znaczników jÚzyka HTML z ïañcuchów .........................................110 6. PRACA Z DATAMI ................................................................................. 113 Jak liczony jest czas w systemie UNIX .................................................................................113 Skrypt nr 45: Uzyskiwanie bieĝÈcego znacznika czasowego ................................................114 Skrypt nr 46: Uzyskiwanie znacznika czasowego dla daty z przeszïoĂci lub w przyszïoĂci .....115 Tworzenie znaczników czasowych na podstawie ïañcucha .............................................115 Tworzenie znaczników czasowych na podstawie wartoĂci dat .......................................117 Skrypt nr 47: Formatowanie daty i godziny .........................................................................118 Skrypt nr 48: Wyznaczanie dnia tygodnia na podstawie danej daty .....................................121 S p i s t r e Ă c i 5 Skrypt nr 49: Odnajdywanie róĝnic dzielÈcych dwie daty ................................................... 121 Stosowanie tego skryptu ................................................................................................. 123 Doskonalenie tego skryptu .............................................................................................. 123 Formaty dat systemu MySQL .............................................................................................. 123 7. PRACA Z PLIKAMI ................................................................................ 125 Uprawnienia dostÚpu do plików ......................................................................................... 125 Uprawnienia ustawiane za poĂrednictwem programu FTP ............................................ 127 Wiersz poleceñ ................................................................................................................ 127 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................. 127 Skrypt nr 50: Umieszczanie zawartoĂci pliku w zmiennej ................................................... 128 Doskonalenie tego skryptu .............................................................................................. 130 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................. 131 Skrypt nr 51: Tworzenie plików i zapisywanie danych w plikach ....................................... 131 Skrypt nr 52: Sprawdzanie, czy interesujÈcy nas plik istnieje .............................................. 132 Skrypt nr 53: Usuwanie plików ........................................................................................... 133 Skrypt nr 54: Wysyïanie obrazów do katalogu .................................................................... 133 Stosowanie tego skryptu ................................................................................................. 138 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................. 138 Doskonalenie tego skryptu .............................................................................................. 138 Skrypt nr 55: Odczytywanie plików z danymi oddzielonymi przecinkami .......................... 138 8. ¥LEDZENIE U¿YTKOWNIKA I SESJI ...................................................... 141 ¥ledzenie danych uĝytkownika z wykorzystaniem ciasteczek i sesji ................................... 142 Ciasteczka ........................................................................................................................ 142 Sesje ................................................................................................................................. 143 Skrypt nr 56: Tworzenie komunikatu „Witaj ponownie, nazwa_uĝytkownika!” z wykorzystaniem ciasteczek .................................. 144 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................. 145 Skrypt nr 57: Wykorzystywanie sesji do tymczasowego skïadowania danych .................... 146 Co moĝe pójĂÊ nie po naszej myĂli? ................................................................................. 148 Skrypt nr 58: Sprawdzanie, czy przeglÈdarka internetowa uĝytkownika obsïuguje ciasteczka .....148 Skrypt nr 59: Przekierowywanie uĝytkowników na inne strony ......................................... 150 Skrypt nr 60: Wymuszanie na uĝytkownikach stosowania stron szyfrowanych za pomocÈ SSL .................................................................. 151 Skrypt nr 61: Uzyskiwanie informacji o kliencie .................................................................. 151 Skrypt nr 62: Limity czasowe sesji ....................................................................................... 156 Skrypt nr 63: Prosty system logowania ............................................................................... 158 9. PRACA Z POCZTk ELEKTRONICZNk ................................................... 161 Skrypt nr 64: Wysyïanie wiadomoĂci poczty elektronicznej z wykorzystaniem pakietu PHPMailer ................................................................................. 162 6 S p i s t r e Ă c i Instalacja pakietu PHPMailer ............................................................................................162 Stosowanie tego skryptu ..................................................................................................164 Dodawanie zaïÈczników ...................................................................................................165 Co moĝe pójĂÊ nie po naszej myĂli ..................................................................................166 Skrypt nr 65: Wykorzystywanie wiadomoĂci poczty elektronicznej do weryfikacji kont uĝytkowników ......................................................................................167 10. PRACA Z OBRAZAMI ............................................................................ 173 Skrypt nr 66: Tworzenie obrazów CAPTCHA zabezpieczajÈcych system ..........................173 Skrypt nr 67: Tworzenie miniaturek obrazów .....................................................................181 11. STOSOWANIE BIBLIOTEKI CURL DO INTERAKCJI Z INNYMI US’UGAMI SIECIOWYMI ............................ 187 Skrypt nr 68: NawiÈzywanie poïÈczenia z innymi witrynami internetowymi .......................188 Skrypt nr 69: Stosowanie ciasteczek ....................................................................................191 Skrypt nr 70: Transformacja danych w formacie XML na bardziej czytelnÈ formÚ .............192 Skrypt nr 71: Korzystanie z geograficznych usïug sieciowych ..............................................194 Skrypt nr 72: Uzyskiwanie danych z witryny Amazon.com za poĂrednictwem skryptu PHP i protokoïu SOAP .............................................................198 Skrypt nr 73: Budowanie usïugi sieciowej ............................................................................200 12. PRZYK’ADY BARDZIEJ Z’O¿ONYCH PROJEKTÓW .............................. 205 Skrypt nr 74: Internetowe gïosowanie .................................................................................206 Tworzenie formularza z kartÈ do gïosowania ..................................................................207 Przetwarzanie karty do gïosowania .................................................................................209 Uzyskiwanie wyników gïosowania ...................................................................................211 Doskonalenie tego skryptu ..............................................................................................213 Skrypt nr 75: Elektroniczne kartki z pozdrowieniami ..........................................................214 Wybór kartki ....................................................................................................................216 Wysyïanie kartki elektronicznej .......................................................................................218 WyĂwietlanie kartki ..........................................................................................................221 Doskonalenie tego skryptu ..............................................................................................224 Skrypt nr 76: System blogu ..................................................................................................225 Tworzenie wpisów na blogu ............................................................................................226 WyĂwietlanie wpisu na blogu ...........................................................................................228 Dodawanie komentarzy ...................................................................................................232 Tworzenie indeksu blogu .................................................................................................233 Doskonalenie tego skryptu ..............................................................................................236 DODATEK .............................................................................................. 239 SKOROWIDZ .......................................................................................... 241 S p i s t r e Ă c i 7 2 Konfigurowanie PHP JAK KA¿DY PAKIET OPROGRAMOWANIA, TAK I PHP OFERUJE WIELE OPCJI KONFIGURACYJNYCH, KTÓRE W TEN CZY INNY SPOSÓB WP’YWAJk NA SPOSÓB JEGO FUNKCJONOWANIA. WiÚkszoĂÊ tych opcji nie ma istotnego znaczenia, ale o kilku najwaĝniejszych opcjach kaĝdy programista PHP z pewnoĂciÈ powinien wiedzieÊ. Co wiÚcej, istnieje wiele dodatków do PHP (okreĂlanych mianem bibliotek) uzupeïniajÈcych tÚ technologiÚ o nowe moĝliwoĂci. Na przy- kïad rozszerzenie cURL umoĝliwia serwerowi wysyïanie danych formularzy do in- nych serwerów i przetwarzanie odsyïanych odpowiedzi. Inne przydatne rozsze- rzenie, Mcrypt, umoĝliwia nam ïatwe i skuteczne szyfrowanie danych celem bezpiecznego skïadowania poufnych informacji. W tym rozdziale zajmiemy siÚ ustawieniami konfiguracyjnymi najczÚĂciej wyko- rzystywanymi przez programistów PHP oraz sytuacjami, w których stosowanie tych ustawieñ jest uzasadnione. Ustawienia konfiguracyjne i plik php.ini WiÚkszoĂÊ poczÈtkujÈcych programistów traktuje ustawienia domyĂlne PHP, jakby byli nieĂmiaïymi lokatorami wprowadzajÈcymi siÚ do ekskluzywnego apartamentu — obawiajÈ siÚ cokolwiek zmieniÊ w obawie o wpïaconÈ kaucjÚ. W postrzeganiu PHP jako domu nie ma niczego zïego. BÚdziemy tam jakiĂ czas mieszkaÊ, dlacze- go wiÚc nie poprzestawiaÊ mebli czy nie zburzyÊ paru Ăcian? UWAGA W zaleĝnoĂci od konfiguracji samego komputera, na którym pracuje Twój serwer WWW, moĝesz nie mieÊ moĝliwoĂci samodzielnego modyfikowania ustawieñ. Dobrzy operatorzy serwerów nie majÈ jednak nic przeciwko wprowadzaniu nie- zbÚdnych zmian w Twoim imieniu, a najlepsze firmy tego typu oferujÈ nawet moĝli- woĂÊ modyfikacji ustawieñ za poĂrednictwem specjalnych plików konfiguracyjnych. Ustawienia Ărodowiska PHP sÈ skïadowane w pliku nazwanym php.ini, który moĝna przeglÈdaÊ i modyfikowaÊ w dowolnym edytorze tekstu. Ustawienia, które podzielono pomiÚdzy sekcje, majÈ nastÚpujÈcÈ postaÊ: max_execution_time = 30 ; Maksymalny czas wykonywania max_input_time = 60 ; Maksymalny czas analizy skáadniowej danych wejĞciowych memory_limit = 8M ; Maksymalna iloĞü pamiĊci zajmowanej przez skrypt Parametry konfiguracyjne moĝna ustawiaÊ za pomocÈ znaku równoĂci (=). ¥rednik (;) oznacza, ĝe mamy do czynienia z komentarzem; okazuje siÚ jednak, ĝe istniejÈ wyjÈtki od tej reguïy umoĝliwiajÈce stosowanie Ăredników w niektó- rych parametrach. GdybyĂmy chcieli trwale zmieniÊ jakieĂ ustawienie, powinniĂmy sporzÈdziÊ kopiÚ zapasowÈ pliku php.ini, zmodyfikowaÊ oryginalny plik konfi- guracyjny i ponownie uruchomiÊ serwer Apache. GdybyĂmy chcieli zmieniaÊ ustawienia na poziomie skryptu, powinniĂmy uĝyÊ funkcji ini_set(). Lokalizowanie pliku php.ini W niektórych przypadkach wskazanie miejsca skïadowania pliku php.ini w syste- mie, w którym pracujemy (szczególnie jeĂli korzystamy z wielu instalacji Ărodowiska PHP), bywa trudne. Poniĝej opisano kilka sposobów lokalizowania tego pliku: Q Uĝytkownicy systemów UNIX powinni zajrzeÊ do katalogu /usr/lib lub /usr/local/lib. Plik php.ini powinien siÚ znajdowaÊ w podkatalogu lib w miejscu, w którym zainstalowano PHP. Q Uĝytkownicy systemu Windows powinni zwróciÊ uwagÚ na katalog C:php. Q Moĝna teĝ wywoïaÊ funkcjÚ phpinfo() w kodzie skryptu PHP (wiÚcej informacji na ten temat w kolejnym podrozdziale). Lokalizacja pliku php.ini zostanie wyĂwietlona w poczÈtkowej czÚĂci danych wynikowych obok etykiety Configuration File (php.ini) Location. Q W wielu systemach UNIX moĝna uzyskaÊ listÚ wszystkich plików pasujÈcych do wzorca php.ini za pomocÈ polecenia locate php.ini. UWAGA Wiele ustawieñ nie jest definiowanych w domyĂlnym pliku php.ini; Ărodowisko PHP stosuje dla niezdefiniowanych ustawieñ wïasne wartoĂci domyĂlne. ListÚ ustawieñ domyĂlnych PHP moĝna znaleěÊ na stronie internetowej http://www.php.net/ ´manual/en/ini.php. 32 R o z d z i a ï 2 Skrypt nr 8: Odkrywanie wszystkich ustawieñ PHP PHP oferuje bogatÈ funkcjonalnoĂÊ, jednak nie zawsze wszystkie te funkcje sÈ wïÈczone lub wbudowane w stosowanej instalacji. Do sprawdzenia, jakie ele- menty wchodzÈ w skïad danej instalacji Ărodowiska PHP, moĝna wykorzystaÊ bardzo prosty skrypt. MoĝliwoĂÊ uzyskiwania tego rodzaju danych jest o tyle nie- bezpieczna, ĝe szeroki zakres prezentowanych informacji stanowi swoisty pod- rÚcznik dla potencjalnych atakujÈcych. Funkcja phpinfo() zdaje siÚ mówiÊ: „Tutaj. To sÈ moje sïabe punkty. Wprost nie mogÚ siÚ doczekaÊ wïamania do mojego systemu”. W tej sytuacji naleĝy pamiÚtaÊ o koniecznoĂci usuniÚcia tego skryptu zaraz po uzyskaniu interesujÈcych nas informacji: ?php phpinfo(); ? Funkcja phpinfo() wyĂwietla wszystko, co Ărodowisko PHP „wie” o swojej kon- figuracji. NaprawdÚ wszystko. Zwracane informacje nie ograniczajÈ siÚ tylko do sta- nu poszczególnych ustawieñ konfiguracyjnych PHP, poïoĝenia pliku php.ini czy wersji samego Ărodowiska PHP — obejmujÈ takĝe wersjÚ serwera WWW, skompi- lowane rozszerzenia oraz dane interfejsu API serwera. Warto zwróciÊ szczególnÈ uwagÚ na opcje konfiguracyjne, aby mieÊ pewnoĂÊ, ĝe wszystkie niezbÚdne funkcje zostaïy prawidïowo zainstalowane i wïÈczone. Aby uruchomiÊ ten skrypt, odwiedě odpowiedniÈ stronÚ za pomocÈ swojej przeglÈdarki internetowej. Nie zapomnij usunÈÊ tego skryptu po uzyskaniu po- trzebnych informacji. Skrypt nr 9: Odczytywanie poszczególnych ustawieñ Czasem, kiedy wiemy, czego szukamy, stosowanie funkcji phpinfo() jest prze- sadne i niepotrzebne. Moĝemy na przykïad byÊ zainteresowani tylko sprawdze- niem, czy mechanizm „magicznych cudzysïowów” jest wïÈczony, lub okreĂle- niem Ăcieĝki doïÈczania. Co wiÚcej, funkcja phpinfo() w ĝaden sposób nam nie pomoĝe, jeĂli pisany skrypt zachowuje siÚ inaczej w razie wïÈczenia jakiegoĂ usta- wienia i inaczej w sytuacji, gdy to ustawienie jest wyïÈczone. Aby uzyskaÊ wartoĂÊ okreĂlonego ustawienia konfiguracyjnego, naleĝy uĝyÊ funkcji ini_get(): K o n f i g u r o w a n i e P H P 33 ?php echo WartoĂÊ opcji register_globals: . ini_get( register_globals ); ? Wystarczy przekazaÊ na wejĂciu funkcji ini_get() prawidïowÈ nazwÚ para- metru konfiguracji, a otrzymamy aktualne ustawienie tego parametru na bieĝÈcym serwerze. Opcja jest zwracana w formie zwykïej wartoĂci, zatem moĝna jÈ wyĂwie- tliÊ, przypisaÊ do zmiennej itd. KorzystajÈc z tej funkcji, musimy jednak mieÊ na uwadze dwa aspekty. Po pierwsze: wartoĂci logiczne, np. false , z reguïy sÈ zwracane w formie ïañcuchów pustych, zatem jeĂli spróbujemy wyĂwietliÊ ustawienie off para- metru register_globals, byÊ moĝe otrzymamy nastÚpujÈcy komunikat: WartoĂÊ opcji register_globals: Po drugie: wartoĂci numeryczne czÚsto sÈ reprezentowane w formie skróconej. JeĂli na przykïad parametrowi upload_max_filesize przypisano wartoĂÊ 8192 baj- tów, zostanie zwrócona wartoĂÊ 8 kB. Podobnie, jeĂli maksymalny rozmiar wysyïa- nego pliku ustalono na poziomie 2 MB, dla parametru upload_max_filesize otrzymamy wartoĂÊ 2 MB, a nie 2 097 152 bajty. Taki sposób reprezentowania numerycznych ustawieñ konfiguracyjnych mo- ĝe stanowiÊ powaĝny problem, jeĂli chcemy na tych liczbach wykonywaÊ opera- cje arytmetyczne. Oficjalna dokumentacja PHP wspomina o funkcji konwertujÈ- cej wartoĂci skrócone (kilo- i mega-) na prawdziwe wartoĂci: function return_bytes($val) { $val = trim($val); $last = $val{strlen($val)-1}; switch(strtoupper($last)) { case K : return (int) $val * 1024; break; case M : return (int) $val * 1048576; break; default: return $val; } } 34 R o z d z i a ï 2 Skrypt nr 10: Raportowanie o bïÚdach PracujÈc nad kodem, czÚsto zapominamy nazw stosowanych zmiennych lub ko- rzystamy z przestarzaïych, niezalecanych konstrukcji. W niektórych przypad- kach jÚzyk PHP okazuje siÚ na tyle przyjazny uĝytkownikowi (przynajmniej jak na standardy programowania), ĝe sam naprawia wiele drobnych bïÚdów w kodzie. PHP umoĝliwia nam miÚdzy innymi pisanie programów bez koniecznoĂci deklarowania wszystkich niezbÚdnych zmiennych na poczÈtku kodu, co jest bardzo wygodne, przynajmniej do momentu gdy zamiast nazwy $string omyïkowo uĝyjemy nazwy $stirng reprezentujÈcej wartoĂÊ pustÈ. Moĝna teĝ przekazywaÊ zmienne na wejĂciu funkcji w zupeïnie niewïaĂciwy sposób, a mimo to skrypt PHP bÚdzie dziaïaï prawidïowo, poniewaĝ w wiÚkszoĂci przypadków bÚdzie przyjmowaï pewne zaïoĝenia wobec zamiarów programisty. Tego rodzaju mechani- zmy sÈ oczywiĂcie bardzo poĝÈdane, dopóki PHP prawidïowo odgaduje nasze in- tencje — w przeciwnym razie poszukiwanie tajemniczego bïÚdu moĝe nam zajÈÊ mnóstwo czasu. Aby wyïÈczyÊ mechanizmy automatycznego usuwania problemów, moĝna wïÈczyÊ tryb raportowania o bïÚdach, co spowoduje, ĝe PHP bÚdzie wyĂwietlaï na ekranie niezliczone komunikaty w reakcji na kaĝdy wykryty bïÈd (niezaleĝnie od jego faktycznej wagi). Moĝna te komunikaty wykorzystaÊ do eliminowania potencjalnych luk w zabezpieczeniach i wykrywania bïÚdnych zmiennych przed skierowaniem programu do Ărodowiska koñcowego. WïÈczenie trybu raporto- wania o bïÚdach wymaga umieszczenia nastÚpujÈcego kodu na poczÈtku tworzonego skryptu: ?php error_reporting(E_ALL); // Tutaj naleĪy umieĞciü dalszą czĊĞü skryptu. ? WïÈczenie trybu raportowania o bïÚdach powoduje, ĝe PHP wyĂwietla ko- munikaty jeszcze przed przetworzeniem dalszej czÚĂci danego programu. (Takie rozwiÈzanie uniemoĝliwia ustawianie ciasteczek w razie wystÈpienia bïÚdu, zatem nie powinniĂmy nawet próbowaÊ zmieniaÊ wartoĂci ciasteczek po wïÈczeniu tego trybu). Typowe komunikaty o bïÚdach Warto dobrze opanowaÊ i zrozumieÊ trzy najczÚĂciej generowane komunikaty o bïÚdach. Notice: Undefined variable: var in script.php on line n K o n f i g u r o w a n i e P H P 35 Komunikat w tej formie oznacza, ĝe korzystamy ze zmiennej, której wczeĂniej nie zdefiniowano w danym skrypcie. Taka sytuacja moĝe mieÊ miejsce w kilku przypadkach: Q ByÊ moĝe popeïniliĂmy bïÈd w pisowni nazwy zmiennej. Q ByÊ moĝe uĝyliĂmy wyraĝenia warunkowego zawierajÈcego definicjÚ zmiennej, np.: if ($fred == Jestem Fred ) { $he_is_fred = yes ; } Q ByÊ moĝe próbujemy konkatenowaÊ zmiennÈ bez jej uprzedniego zadeklarowania. Inny popularny problem wystÚpuje duĝo czÚĂciej w sytuacji, gdy w swoim programie próbujemy korzystaÊ ze starszego kodu PHP: Notice: Use of undefined constant k - assumed k in script.php on line n Komunikat ostrzeĝenia w tej formie zwykle oznacza, ĝe programista podjÈï próbÚ przekazania ïañcucha na wejĂciu funkcji bez otaczajÈcych go cudzysïo- wów. Innymi sïowy, uĝyto na przykïad wywoïania strtolower(ïañcuch) zamiast metody strtolower( ïañcuch ). I wreszcie istnieje popularny komunikat o bïÚdzie generowany w sytuacji, gdy uzyskujemy dostÚp do tablicy: Notice: Undefined index: i in script.php on line n W praktyce komunikat w tej formie oznacza, ĝe podjÚto próbÚ odczytania elementu $tablica[i], mimo ĝe tablica $tablica nie definiuje elementu pod tym indeksem. Z tego rodzaju bïÚdami mamy do czynienia w sytuacji, gdy uzy- skujemy wartoĂÊ z formularza za poĂrednictwem zmiennej $_POST lub $_GET, chociaĝ ĝadna z tych zmiennych nie zawiera tak nazwanej wartoĂci. NajczÚĂciej podobne bïÚdy wynikajÈ z tego, ĝe uĝytkownik nie zaznaczyï odpowiedniego pola wyboru lub przycisku opcji — w takim przypadku zmienna reprezentujÈca ten element formularza w ogóle nie jest przekazywana w ramach ĝÈdania GET (jako czÚĂÊ adresu URL). Tryb raportowania o bïÚdach naleĝy wyïÈczyÊ z chwilÈ wdraĝania skryptu na docelowej witrynie, aby uĝytkownicy nie mogli siÚ zapoznawaÊ z popeïnionymi przez nas bïÚdami i aby wyeliminowaÊ wpïyw tego trybu na ciasteczka (w szcze- gólnoĂci problemy ze Ăledzeniem sesji). 36 R o z d z i a ï 2 Skrypt nr 11: Ukrywanie wszystkich komunikatów o bïÚdach W pewnych sytuacjach dysponujemy prawidïowo dziaïajÈcym skryptem, a mimo to Ărodowisko PHP wciÈĝ sugeruje potencjalne usterki. Innym razem nie chcemy, by oczekiwane problemy powodowaïy, ĝe nasi uĝytkownicy bÚdÈ naraĝeni na odraĝajÈcy widok komunikatów o bïÚdach (odkrywajÈcych informacje, co szcze- gólnie ceniÈ sobie hakerzy). Na szczÚĂcie istnieje moĝliwoĂÊ powstrzymania PHP przed wyĂwietlaniem wszystkich komunikatów o bïÚdach. Wystarczy w pliku php.ini umieĂciÊ nastÚ- pujÈcy wiersz: display_errors = Off Przytoczone rozwiÈzanie warto stosowaÊ w Ărodowisku docelowym aplikacji internetowej, aby w przyszïoĂci nie obawiaÊ siÚ szerokiej dostÚpnoĂci komuni- katów diagnostycznych PHP odnoĂnie do naszego kodu. GdybyĂmy chcieli za- poznaÊ siÚ z tymi komunikatami celem wyeliminowania ewentualnych problemów, powinniĂmy uĝyÊ nastÚpujÈcego ustawienia konfiguracyjnego wymuszajÈcego kierowanie tych komunikatów do dziennika zdarzeñ serwera Apache: log_errors = On W razie potrzeby moĝna nawet wysyïaÊ komunikaty diagnostyczne do dzien- nika systemowego lub wskazanego pliku — parametrowi error_log naleĝy wów- czas przypisaÊ odpowiednio wartoĂÊ syslog lub nazwÚ pliku. Pozostaje jeszcze kwestia naszego Ărodowiska wytwarzania, gdzie z reguïy chcemy uzyskiwaÊ moĝliwie wiele komunikatów diagnostycznych. Po przypisa- niu parametrowi display_errors wartoĂci On moĝna dodatkowo (w pliku php.ini) ustawiÊ strukturÚ bitowÈ w parametrze error_reporting (wiÚcej szczegóïów na ten temat moĝna znaleěÊ w przykïadowym pliku php.ini instalowanym wraz ze Ărodowiskiem PHP). JeĂli jednak chcemy „uciszyÊ” jakiĂ skrypt, który nieustannie zasypuje nas tymi samymi komunikatami, moĝemy uĝyÊ w jego kodzie nastÚpujÈ- cego wywoïania funkcji: error_reporting(0); K o n f i g u r o w a n i e P H P 37 Skrypt nr 12: Wydïuĝanie czasu wykonywania skryptu Pracowaïem kiedyĂ w firmie, która postawiïa sobie za cel zmianÚ mechanizmu obsïugi koszyków z zakupami. Do moich zadañ naleĝaïo napisanie skryptu od- powiedzialnego za konwersjÚ 250 MB danych o produktach ze starego na nowy format. Skrypt dziaïaï co prawda znakomicie, jednak iloĂÊ przetwarzanych da- nych powodowaïa, ĝe Ărodowisko PHP stale przerywaïo jego wykonywanie po upïywie 30 sekund, a wiÚc na dïugo przed osiÈgniÚciem zamierzonego celu. WïaĂnie wówczas odkryïem drobne rozszerzenie, które umoĝliwiïo mojemu skryptowi wykonanie zleconego zadania. Poniĝszy wiersz dodany na poczÈtku skryptu powoduje, ĝe bÚdzie on miaï maksymalnie 240 sekund na przetworzenie danych: ini_set(max_execution_time, 240 ); Parametr konfiguracyjny max_execution_time okreĂla maksymalny czas wyko- nywania skryptu przed jego automatycznym zakoñczeniem. Nie naleĝy jednak tego parametru naduĝywaÊ. JeĂli dany skrypt dziaïa kilka minut, to albo usprawie- dliwia nas ogromna iloĂÊ przetwarzanych informacji (najpewniej zaczerpniÚtych z bazy danych), albo nasz skrypt jest bardzo nieefektywny, albo korzystamy z niewïaĂciwego jÚzyka programowania. Co moĝe pójĂÊ nie po naszej myĂli? JeĂli nasz serwer pracuje w trybie awaryjnym, ustawianie wartoĂci parametru max_execution_time w czasie wykonywania jest niemoĝliwe. Warto teĝ dokïadnie sprawdziÊ kod skryptu. ByÊ moĝe omyïkowo zawarliĂmy tam nieskoñczonÈ pÚtlÚ lub pÚtlÚ wykonywanÈ w innej pÚtli i niepodejmujÈcÈ ĝadnych sensownych dziaïañ. Skrypt nr 13: Uniemoĝliwianie uĝytkownikom wysyïania wielkich plików GdybyĂmy chcieli uniemoĝliwiÊ uĝytkownikom naszej aplikacji wysyïanie na serwer 70-gigabajtowych MPEG-ów z najnowszym filmem „Gwiezdne wojny”, powinniĂmy okreĂliÊ maksymalny rozmiar plików kopiowanych na serwer. (Szczegóïowe omówienie samych technik przetwarzania wysyïanych plików moĝna znaleěÊ w podrozdziale „Skrypt nr 54: Wysyïanie obrazów do katalogu” w rozdziale 7.). upload_max_filesize = 500K 38 R o z d z i a ï 2 Maksymalny rozmiar plików wysyïanych na serwer moĝna okreĂliÊ na jeden z trzech sposobów: Q w formie wartoĂci caïkowitoliczbowej (wyraĝajÈcej ïÈcznÈ liczbÚ bajtów); Q w formie liczby z przyrostkiem M reprezentujÈcej megabajty Q w formie liczby z przyrostkiem K reprezentujÈcej kilobajty (2M to 2 megabajty); (8K to 8 kilobajtów). Niezaleĝnie od uĝytego formatu nasi uĝytkownicy nie bÚdÈ mogli wysïaÊ na serwer pliku, którego rozmiar bÚdzie przekraczaï tak zdefiniowany próg. DomyĂl- nym rozmiarem maksymalnym sÈ 2 MB. Skrypt nr 14: WyïÈczanie rejestrowanych zmiennych globalnych JÚzyk PHP oferuje przestarzaïÈ, niezalecanÈ funkcjÚ, która nieznacznie uïatwia dostÚp do parametrów ĝÈdañ GET i POST protokoïu HTTP. JeĂli na przykïad ĝÈda- nie POST zawiera parametr nazwany mojparam, PHP moĝe automatycznie umie- ĂciÊ jego wartoĂÊ w zmiennej nazwanej $mojparam. Dziaïanie tego mechanizmu stwarza powaĝne ryzyko dla bezpieczeñstwa aplikacji, poniewaĝ umoĝliwia uĝytkownikom ustawianie dowolnych zmiennych globalnych — jeĂli zapomnimy zainicjalizowaÊ odpowiednie zmienne, uĝytkownik zyska moĝliwoĂÊ wpïywania na istotne elementy naszego skryptu. Wspomniany mechanizm moĝna wyïÈczyÊ, ustawiajÈc w zmiennej register_ ´globals wartoĂÊ Off w pliku php.ini serwera: register_globals = Off Opisana funkcja na szczÚĂcie zostaïa wyïÈczona w wersjach 4.2 i nowszych jÚzyka PHP. Waga problemu jest jednak na tyle duĝa, ĝe warto to dwukrotnie sprawdziÊ. Skrypt nr 15: WïÈczanie „magicznych cudzysïowów” „Magiczne cudzysïowy” (ang. magic quotes) to wygodne narzÚdzie stosowane przez administratorów serwerów do ochrony przed atakami polegajÈcymi na wstrzykiwaniu kodu SQL-a (patrz podrozdziaï „Skrypt nr 19: Wstrzykiwanie kodu jÚzyka SQL” w rozdziale 3.). Dziaïanie tego mechanizmu polega na po- K o n f i g u r o w a n i e P H P 39 przedzaniu wszystkich apostrofów, cudzysïowów i lewych ukoĂników dodatkowym znakiem lewego ukoĂnika (tzw. znakiem ucieczki) we wszystkich danych zapisywa- nych w zmiennych skryptu PHP i pochodzÈcych z formularzy HTML. W ten sposób na przykïad ïañcuch Ferrett s Book zostanie przeksztaïcony w ïañcuch Ferrett s Book . Mechanizm „magicznych cudzysïowów” nie jest rozwiÈzaniem idealnym, je- Ăli korzystamy z bazy danych MySQL — w takim przypadku naleĝy stosowaÊ raczej wyspecjalizowanÈ funkcjÚ mysql_real_escape_string() — jednak generalnie „magiczne cudzysïowy” zdajÈ egzamin. Moĝna ten mechanizm wïÈczyÊ w pliku php.ini za pomocÈ nastÚpujÈcego wyraĝenia: magic_quotes_gpc = 1 Co moĝe pójĂÊ nie po naszej myĂli? JeĂli nie wïÈczymy mechanizmu „magicznych cudzysïowów”, bÚdziemy musieli korzystaÊ z funkcji mysql_real_escape_string(), aby zagwarantowaÊ stosowanie sekwencji ucieczki w wykorzystywanych danych. JeĂli jednak uĝyjemy tej funk- cji dla danych w sytuacji, gdy mechanizm „magicznych cudzysïowów” bÚdzie wïÈczony, ryzykowne znaki zostanÈ poprzedzone podwójnymi lewymi ukoĂnikami (zamiast Ferrett s Book otrzymamy \ Ferrett\ s Book\ ). Jak widaÊ, konsekwencja popïaca — chwila nieuwagi moĝe spowodowaÊ, ĝe tabele naszej bazy danych bÚdÈ zawieraïy niemal wyïÈcznie lewe ukoĂniki. Skrypt nr 16: Ograniczanie dostÚpu PHP do plików JeĂli obawiasz siÚ wrogiego skryptu PHP uzyskujÈcego dostÚp do plików syste- mowych (np. do pliku haseï), moĝesz uĝyÊ ustawienia open_basedir do ograni- czenia zbioru katalogów dostÚpnych z poziomu kodu PHP. Po ustawieniu tej opcji skrypt PHP nie bÚdzie mógï otwieraÊ ani modyfikowaÊ ĝadnych plików spoza wskazanego katalogu. Poniĝej przedstawiono wiersz pliku php.ini ograni- czajÈcy dostÚp tylko do katalogu /home/www: open_basedir = /home/www Istnieje moĝliwoĂÊ zapewniania skryptom dostÚpu do wielu katalogów — w systemie UNIX naleĝy je oddzielaÊ dwukropkami (:); w systemie Windows kolejne katalogi oddzielamy Ărednikami (;). UWAGA PHP domyĂlnie zapewnia dostÚp zarówno do wskazanego katalogu, jak i wszystkich jego podkatalogów. GdybyĂmy chcieli ograniczyÊ ten dostÚp tylko do plików w okre- Ălonym katalogu, na koñcu uĝytej Ăcieĝki powinniĂmy uĝyÊ ukoĂnika (np. /home/www/). 40 R o z d z i a ï 2 Co moĝe pójĂÊ nie po naszej myĂli? JeĂli uĝytkownicy muszÈ wysyïaÊ pliki na serwer, to do czasu ich przetworzenia przez skrypt otrzymane pliki sÈ skïadowane w katalogu tymczasowym. Ponie- waĝ katalog tymczasowy z reguïy dzieli spora odlegïoĂÊ od pozostaïych plików PHP, koniecznie musimy pamiÚtaÊ o jego uwzglÚdnieniu na liĂcie reprezentowanej przez parametr open_basedir. Skrypt nr 17: WyïÈczanie obsïugi okreĂlonych funkcji PrzypuĂÊmy, ĝe uznaliĂmy funkcjÚ exec(), która umoĝliwia bezpoĂrednie wyko- nywanie poleceñ na serwerze z poziomu skryptów PHP, za zbyt niebezpiecznÈ. Okazuje siÚ, ĝe istnieje moĝliwoĂÊ wyïÈczania obsïugi poszczególnych funkcji PHP (wïaĂnie z myĂlÈ o wyeliminowaniu luk w zabezpieczeniach) z zachowa- niem moĝliwoĂci stosowania wszystkich pozostaïych funkcji. Poniĝej przedsta- wiono przykïad wiersza pliku php.ini wyïÈczajÈcego obsïugÚ kilku szczególnie ryzykownych funkcji: disable_functions = system, exec, passthru, shell_exec, proc_open Skrypt nr 18: Dodawanie rozszerzeñ do PHP NaprawdÚ powaĝni programiĂci prÚdzej czy póěniej odkrywajÈ pewne ograni- czenia jÚzyka PHP. Mimo ogromnej liczby wbudowanych funkcji i mechani- zmów sam jÚzyk PHP nie oferuje rdzennych rozwiÈzañ w zakresie szyfrowania, grafiki, dostÚpu do innych stron internetowych czy przetwarzania danych w forma- cie XML. Te i inne cele moĝna jednak osiÈgaÊ dziÚki niezliczonym rozszerzeniom wy- korzystujÈcym biblioteki tworzone przez niezaleĝnych programistów i podmioty. Kilka najbardziej przydatnych rozszerzeñ jÚzyka PHP opisano poniĝej: cURL cURL umoĝliwia naszemu serwerowi PHP uzyskiwanie dostÚpu do innych witryn internetowych, w tym wysyïanie i odbieranie informacji za poĂrednic- twem swoistego protokoïu zbudowanego na bazie adresów URL. (NajczÚĂciej korzystamy z protokoïu HTTP, który umoĝliwia nam komunikacjÚ z innymi stronami internetowymi, oraz protokoïu FTP umoĝliwiajÈcego nam wysyïanie i pobieranie plików). W praktyce oznacza to, ĝe nasz serwer moĝe byÊ trak- towany przez inne witryny jak przeglÈdarka internetowa, a pobierane strony WWW moĝemy umieszczaÊ w dowolnych zmiennych w ramach swoich skryptów. K o n f i g u r o w a n i e P H P 41 cURL jest niezwykle waĝnym narzÚdziem dla programistów pracujÈcych nad powaĝnymi sklepami internetowymi, poniewaĝ umoĝliwia nam akceptowa- nie pïatnoĂci kartami kredytowymi i wyceny towarów dla poszczególnych klientów w czasie rzeczywistym. Za pomocÈ rozszerzenia cURL moĝna nawiÈ- zywaÊ poïÈczenia i wysyïaÊ dane o transakcjach na serwer innej firmy. W od- powiedzi otrzymujemy wówczas informacje o akceptacji bÈdě odrzuceniu ĝÈdania dokonania pïatnoĂci. Mcrypt MusiaïeĂ kiedyĂ coĂ zaszyfrowaÊ? Wszystkie poufne informacje umieszczane w ciasteczkach i sesjach powinny byÊ szyfrowane. Co wiÚcej, jeĂli gdziekolwiek zapisujemy coĂ naprawdÚ wartoĂciowego, jak numery kart kredytowych czy dane osobowe, z pewnoĂciÈ powinniĂmy siÚ upewniÊ, ĝe odczyt tych infor- macji nie bÚdzie moĝliwy przez zwykïy zrzut zawartoĂci bazy danych. Na szczÚĂcie biblioteka Mcrypt umoĝliwia nam naprawdÚ skuteczne szyfrowa- nie danych bez choÊby szczÈtkowej znajomoĂci technik szyfrowania! (Sposoby korzystania z tego rozszerzenia zostanÈ szczegóïowo omówione w podroz- dziale „Skrypt nr 23: Szyfrowanie danych za pomocÈ rozszerzenia Mcrypt” w rozdziale 3.). GD GdybyĂmy chcieli tworzyÊ obrazy graficzne na ĝÈdanie lub po prostu uzy- skiwaÊ szczegóïowe informacje o obrazach juĝ istniejÈcych, powinniĂmy siÚ zapoznaÊ z moĝliwoĂciami biblioteki GD. Biblioteka GD umoĝliwia nam pracÚ na plikach JPEG i GIF — moĝemy je tworzyÊ z myĂlÈ o graficznej prezentacji rozmaitych danych (np. w formie wykresów) albo modyfikowaÊ (np. tworzÈc miniaturki istniejÈcych obrazów). MySQL Podstawowa wersja Ărodowiska PHP w ogóle „nie wie”, jak uzyskiwaÊ do- stÚp do baz danych. Poniewaĝ jednak system MySQL i jÚzyk PHP sÈ jak Zan i Jayna z popularnej kreskówki, wiÚkszoĂÊ serwerów WWW przystosowa- nych do obsïugi PHP oferuje teĝ domyĂlnie instalowane biblioteki systemu MySQL, zatem wiÚkszoĂÊ programistów korzysta z funkcji mysql_connect(), nie wiedzÈc, ĝe jest ona czÚĂciÈ rozszerzenia. Zbiór rozszerzeñ PHP jest oczywiĂcie duĝo bogatszy i obejmuje takie biblioteki jak SOAP (zapewniajÈca dostÚp do usïug internetowych), PDF czy Verisign Payment Pro. Na pierwszy rzut oka moĝe siÚ wydawaÊ, ĝe najlepszym rozwiÈ- zaniem jest doïÈczanie do Ărodowiska PHP wszystkich rozszerzeñ, które tylko udaïo nam siÚ odnaleěÊ, jednak warto mieÊ na uwadze, ĝe kaĝde z nich moĝe wydïuĝyÊ czas inicjalizacji i stwarzaÊ dodatkowe luki w zabezpieczeniach. Co wiÚcej, mniej popularne rozszerzenia z reguïy nie sÈ na bieĝÈco aktualizowane ani rozwijane. 42 R o z d z i a ï 2 Dodawanie rozszerzeñ jÚzyka PHP Skoro wiemy juĝ, co moĝna zyskaÊ, instalujÈc rozszerzenia, przyjrzyjmy siÚ sa- mem procesowi ich instalowania. W pierwszej kolejnoĂci naleĝy sprawdziÊ, czy przypadkiem juĝ nie dysponujemy tym, czego szukamy. Sprawdzanie, czy interesujÈce nas rozszerzenia nie zostaïy juĝ zaïadowane Wiele serwerów WWW domyĂlnie instaluje najbardziej przydatne i najpopular- niejsze rozszerzenia, zatem przed podjÚciem prób odszukania i instalacji intere- sujÈcej nas biblioteki powinniĂmy siÚ upewniÊ, czy nie zostaïa juĝ zainstalowana i zaïadowana. Najprostszym sposobem sprawdzenia ewentualnej obecnoĂci rozszerzeñ jest wywoïanie funkcji phpinfo() (opisanej w podrozdziale „Skrypt nr 8: Odkrywa- nie wszystkich ustawieñ PHP” we wczeĂniejszej czÚĂci tego rozdziaïu). ListÚ zwróconÈ przez tÚ funkcjÚ naleĝy dokïadnie przejrzeÊ w poszukiwaniu naszych bibliotek. JeĂli na przykïad Ărodowisko PHP obejmuje zainstalowane rozszerze- nie MySQL, dane wynikowe funkcji phpinfo() bÚdÈ zawieraïy wiersz podobny do poniĝszego: mysql MySQL Support = enabled ... JeĂli uznasz, ĝe takie rozwiÈzanie nie jest dla Ciebie, jeĂli wyda Ci siÚ zbyt wolne, moĝesz skorzystaÊ z innych moĝliwoĂci. Kaĝde rozszerzenie dodaje do PHP nowe funkcje — na przykïad cURL uzupeïnia funkcjonalnoĂÊ PHP o takie funkcje jak cURL_init() czy cURL_setopt(), Mcrypt dodaje funkcje mcrypt_encrypt() oraz mcrypt_decrypt() itd. PrzypuĂÊmy jednak, ĝe nie zainstalowano rozszerzenia Mcrypt. W takim przypadku PHP nie ma pojÚcia o funkcji mcrypt_decrypt() i traktuje jÈ jako funkcjÚ niezdefiniowanÈ. Moĝna to wykorzystaÊ, stosujÈc funkcjÚ function_exists() jÚzyka PHP. Poniĝej przedstawiono przykïadowy skrypt wykrywajÈcy rozszerzenie MySQL: ?php if (function_exists(mysql_connect)) { print Wykryto rozszerzenie MySQL ; } else { print Nie wykryto rozszerzenia MySQL ; } ? ’adowanie rozszerzeñ przy pomocy administratorów zdalnych serwerów JeĂli korzystamy z serwera WWW bÚdÈcego wïasnoĂciÈ innej firmy (tak robi wiÚkszoĂÊ programistów), musimy siÚ zdaÊ na ïaskÚ administratora tego ser- wera. Poniewaĝ z natury rzeczy nie dysponujemy hasïem administratora, nie K o n f i g u r o w a n i e P H P 43 moĝemy instalowaÊ niezbÚdnych bibliotek samodzielnie. W takim przypadku musimy o to poprosiÊ administratora wynajmowanego serwera. KierujÈc odpo- wiednie zlecenie, powinniĂmy siÚ upewniÊ, ĝe administrator dysponuje precy- zyjnymi informacjami; w przeciwnym razie moĝe siÚ okazaÊ, ĝe zostaïa zainsta- lowana niewïaĂciwa wersja lub wrÚcz niewïaĂciwe rozszerzenie. Niektóre firmy zrealizujÈ naszÈ proĂbÚ bez najmniejszych problemów. Inne bÚdÈ oczekiwaïy dodatkowych opïat za obciÈĝanie swoich serwerów dodatko- wymi rozszerzeniami. Jeszcze inne odpowiedzÈ: „Nasza oferta nie obejmuje ob- sïugi dodatkowych rozszerzeñ. Ograniczamy siÚ tylko do standardowego PHP”. JeĂli z jakiegoĂ powodu nie moĝesz zainstalowaÊ potrzebnych rozszerzeñ, moĝesz albo spróbowaÊ poradziÊ sobie bez nich, albo zmieniÊ firmÚ obsïugujÈcÈ serwery. UWAGA Nawet jeĂli korzystamy z wïasnego serwera, ale nie potrafimy prawidïowo zain- stalowaÊ niezbÚdnych rozszerzeñ, warto zwróciÊ siÚ z proĂbÈ o instalacjÚ nowych bibliotek do pracowników wsparcia technicznego. W takim przypadku w razie nie- powodzenia procesu instalacji technicy bÚdÈ w stanie naprawiÊ usterkÚ (przy- najmniej teoretycznie). Instalacja rozszerzeñ za pomocÈ internetowego panelu sterowania Dzierĝawione serwery czÚsto oferujÈ specjalne panele sterowania, za poĂred- nictwem których moĝemy realizowaÊ typowe zadania administracyjne (w tym zadanie ponownego uruchomienia usïugi Apache lub restartu caïego serwera) w oknie przeglÈdarki internetowej. Niektóre panele sterowania oferujÈ nawet moĝliwoĂÊ automatycznego kom- pilowania serwera Apache i Ărodowiska PHP wskutek zaznaczenia pól wyboru lub wyboru z list rozwijanych opcji reprezentujÈcych dodawane rozszerzenia. Na przykïad WHM (popularny, choÊ doĂÊ trudny w obsïudze panel sterowania) udostÚpnia opcjÚ Update Apache, która powoduje ponownÈ instalacjÚ serwera Apache i Ărodowiska PHP wraz z wybranymi ĝÈdaniami. JeĂli Twój serwer nie udostÚpnia preinstalowanego panelu sterowania, z reguïy za niewielkÈ opïatÈ moĝna taki panel zainstalowaÊ juĝ po wdroĝeniu oprogramowania serwera. RÚczna instalacja rozszerzeñ Ponowna kompilacja PHP jest w systemach UNIX traktowana jako ponowna in- stalacja tego Ărodowiska wraz z niezbÚdnymi rozszerzeniami. Dla programistów, którzy nie majÈ doĂwiadczenia w roli administratorów systemów UNIX, ponowna kompilacja Ărodowiska PHP czÚsto jest powaĝnym wyzwaniem. Najlepszym rozwiÈzaniem jest przystÈpienie do eksperymentów z lokalnym serwerem Apache z dala od docelowego Ărodowiska pracy aplikacji interneto- wej. Poniewaĝ zmiany wprowadzane w konfiguracji pracujÈcego serwera mogÈ 44 R o z d z i a ï 2 doprowadziÊ do powaĝnych problemów, warto uprzednio sprawdziÊ, czy w razie kïopotów moĝemy liczyÊ na pomoc technicznÈ i czy zdajemy sobie sprawÚ z tego, co moĝe siÚ wydarzyÊ. JeĂli nie jesteĂmy przygotowani do tego rodzaju zadañ, powinniĂmy siÚ zwróciÊ o pomoc do kogoĂ bardziej kompetentnego. Instalacja biblioteki w Ărodowisku PHP jest procesem dwuetapowym — w pierwszej kolejnoĂci musimy zainstalowaÊ same biblioteki rozszerzeñ; drugim krokiem jest takie skonfigurowanie Ărodowiska PHP, aby rozpoznawaïo te roz- szerzenia. Instalowanie bibliotek Szczegóïowe kroki skïadajÈce siÚ na proces instalacji rozszerzenia w duĝej mie- rze zaleĝÈ od dodawanej biblioteki. Moĝna oczywiĂcie sformuïowaÊ ogólne za- sady rzÈdzÈce tym procesem, jednak przed przystÈpieniem do instalacji zawsze naleĝy siÚ zapoznaÊ z podrÚcznikami dostÚpnymi na stronie biblioteki oraz wszystkimi plikami README. Czytelnicy zainteresowani szczegóïowym wyja- Ănieniem pracy systemu Linux, w tym technik kompilowania oprogramowania, powinni siÚgnÈÊ po ksiÈĝkÚ Briana Warda zatytuïowanÈ How Linux Works (No Starch Press, 2004)1. W poniĝszych punktach opisano ogólne kroki skïadajÈce siÚ na proces insta- lacji bibliotek: 1. Zalogowanie na serwerze jako administrator lub uĝytkownik z prawem instalacji nowych programów. 2. Pobranie archiwum biblioteki i umieszczenie go w katalogu gïównym serwera. Wpisanie w wyszukiwarce Google nazwy biblioteki i sïowa PHP (np. mcrypt php) z reguïy pozwoli bïyskawicznie odnaleěÊ stronÚ domowÈ interesujÈcego nas rozszerzenia, gdzie bÚdÈ dostÚpne odpowiednie pliki ěródïowe. Pliki ěródïowe najczÚĂciej sÈ archiwizowane i kompresowane za pomocÈ narzÚdzi Gzip i tar (z myĂlÈ o oszczÚdzaniu przestrzeni), zatem pobrany plik najprawdopodobniej bÚdzie nosiï nazwÚ nazwaplikubiblioteki.tar.gz. 3. Wypakowanie zawartoĂci pobranego archiwum. Archiwum tar jest w istocie zbiorem plików i katalogów. Caïe to archiwum jest nastÚpnie kompresowane za pomocÈ pakietu Gzip, stÈd rozszerzenie .gz jest dopisywane na samym koñcu. Oznacza to, ĝe plik .tar.gz moĝna traktowaÊ tak samo jak plik .zip, z tÈ róĝnicÈ, ĝe plik .tar.gz powstaje w dwóch etapach i z wykorzystaniem dwóch róĝnych programów. Okazuje siÚ jednak, ĝe nie musimy wprost uruchamiaÊ obu tych narzÚdzi, poniewaĝ program tar w wersji GNU „wie”, jak korzystaÊ z narzÚdzia de- kompresujÈcego. Wypakowanie zawartoĂci archiwum tar wymaga wydania polecenia tar zxvf nazwaplikubiblioteki.tar.gz w wierszu poleceñ. W wyniku tego polecania otrzymamy listÚ wypakowanych wszystkich plików i katalogów. 1 Polskie wydanie: Jak dziaïa Linux, Helion, 2005 — przyp. tïum. K o n f i g u r o w a n i e P H P 45 WiÚkszoĂÊ archiwów tworzy drzewo poniĝej katalogu najwyĝszego poziomu, zatem wïaĂnie takiej struktury powinniĂmy oczekiwaÊ. 4. PrzejĂcie do katalogu biblioteki za pomocÈ polecenia cd nazwakatalogu. JeĂli nie pamiÚtamy lub w ogóle przeoczyliĂmy nazwÚ z poprzedniego kroku, z reguïy moĝemy przyjÈÊ, ĝe nazwa tego katalogu bÚdzie odpowiadaïa nazwie samej biblioteki — np. cd cURL. (Warto pamiÚtaÊ, ĝe wielkoĂÊ znaków w nazwach katalogów jest istotna, zatem cURL to nie to samo co CURL). 5. Uruchomienie polecenia configure, aby sprawdziÊ, czy wszystkie skïadniki niezbÚdne do zakoñczenia instalacji na danym komputerze zostaïy rozpakowane. Z uwagi na róĝnorodnoĂÊ dostÚpnych systemów UNIX instalacja pakietów w tych systemach wymaga pewnej wiedzy i doĂwiadczenia. Na szczÚĂcie polecenie configure w wiÚkszoĂci przypadków potrafi wykonaÊ caïÈ tÚ „brudnÈ robotÚ” za nas, automatycznie analizujÈc ustawienia serwera i stosujÈc wartoĂci umoĝliwiajÈce prawidïowy przebieg instalacji programu. Wpisz w wierszu poleceñ wyraĝenie ./configure. Niektóre rozszerzenia wymagajÈ do wïaĂciwego dziaïania stosowania dodat- kowych flag za poleceniem configure. Na przykïad rozszerzenie Mcrypt wymaga od nas wydania polecenia ./configure --disable-nls --disable- posix-threads, poniewaĝ tylko w ten sposób moĝna zagwarantowaÊ peïnÈ zgodnoĂÊ z serwerem Apache. Poniewaĝ dodatkowe opcje zaleĝÈ od samej biblioteki, warto siÚ zapoznaÊ z przewodnikami i plikami README, gdzie moĝna znaleěÊ precyzyjnÈ dokumentacjÚ wszystkich niezbÚdnych flag kon- figuracyjnych. 6. Kompilacja i instalacja danego pakietu. W systemach UNIX standardowym narzÚdziem kompilujÈcym i instalujÈcym pakiety jest make. Najpierw musimy wydaÊ wïaĂnie polecenie make, aby skompilowaÊ nasz pakiet. Na ekranie zostanÈ wyĂwietlone wykonywane polecenia, które skïadajÈ siÚ na proces kompilacji. NastÚpnie powinniĂmy uĝyÊ polecenia make check celem wykonania na tym pakiecie automatycznych testów (niektóre pakiety nie zawierajÈ testów, czym jednak nie powinniĂmy siÚ przejmowaÊ). I wreszcie naleĝy wpisaÊ polecenie make install, aby ostatecznie zainstalowaÊ rozszerzenie. Takĝe proces instalacji bÚdzie dokumentowany na ekranie. Po wykonaniu polecenia make install proces instalacji rozszerzenia bÚdzie zakoñczony. 7. Utworzenie skryptu phpinfo(). Ach, pewnie myĂlaïeĂ, ĝe to juĝ koniec, prawda? Przykro mi, ale opisana powyĝej procedura prowadzi tylko do instalacji rozszerzenia na serwerze. Musimy jeszcze ponownie zainstalowaÊ Ărodowisko PHP i wskazaÊ, gdzie znajduje siÚ nowe rozszerzenie i jak z niego korzystaÊ. Za pomocÈ funkcji phpinfo() (patrz podrozdziaï „Skrypt nr 8: Odkrywanie wszystkich ustawieñ PHP” we wczeĂniejszej czÚĂci tego rozdziaïu) moĝemy uzyskaÊ kompletny wykaz ustawieñ serwera. GdzieĂ na poczÈtku pierwszej 46 R o z d z i a ï 2 strony danych wygenerowanych przez tÚ funkcjÚ moĝna znaleěÊ sekcjÚ za- tytuïowanÈ Configure Command i zawierajÈcÈ tajemniczÈ listÚ elementów podobnÈ do poniĝszej: ./configure --with-apxs=/usr/local/apache/bin/apxs --with-xml ´ --enable-bcmath --enable-calendar --enable-ftp --enable-magic- ´quotes --with-mysql --enable-discard-path --with-pear --enable- ´sockets --enable-track-vars --enable-versioning --with-zlib GdybyĂmy chcieli ponownie zainstalowaÊ Ărodowisko PHP w stanie, w któ- rym znajduje siÚ obecnie, dysponowalibyĂmy gotowym poleceniem (a przy- najmniej prawie gotowym). W pierwszej kolejnoĂci naleĝy usunÈÊ apostrofy wokóï polecenia configure, aby otrzymaÊ polecenie w postaci: ./configure --with-apxs=/usr/local/apache/bin/apxs --with-xml ´ --enable-bcmath --enable-calendar --enable-ftp --enable-magic- ´quotes --with-mysql --enable-discard-path --with-pear --enable- ´sockets --enable-track-vars --enable-versioning --with-zlib Celem tego kroku jest zachowanie juĝ zainstalowanych rozszerzeñ — jeĂli dodajemy rozszerzenie GD, nie chcemy przecieĝ przy tej okazji utraciÊ in- nych, zainstalowanych wczeĂniej rozszerzeñ. Gotowe polecenie configure naleĝy skopiowaÊ do pliku tekstowego i dopisaÊ na jego koñcu odpowiednie wyraĝenia --with. JeĂli na przykïad dodajemy do serwera rozszerzenie Mcrypt, powinniĂmy dopisaÊ wyraĝenie --with-mcrypt. WïaĂciwy parametr --with z reguïy moĝna znaleěÊ w dokumentacji instalowanego rozszerzenia. UWAGA JeĂli zastÈpimy oryginalnÈ strukturÚ katalogów zawartÈ w pliku tar i umieĂcimy naszÈ bibliotekÚ w folderze innym niĝ domyĂlny, bÚdziemy musieli dodaÊ do flagi --with ĂcieĝkÚ, aby Ărodowisko PHP mogïo tÚ bibliotekÚ odnaleěÊ. W powyĝszym przykïadzie taka sytuacja miaïa miejsce w przypadku biblioteki apxs (Apache Exten- sion Tool Synopsis), gdzie flaga --with-apxs=/usr/local/apache/bin/apxs okreĂlaïa, ĝe wspomniana biblioteka jest skïadowana w katalogu /usr/local/apache/bin/apxs. 8. Pobranie i rozpakowanie plików ěródïowych nowej dystrybucji PHP oraz przejĂcie do katalogu, w którym umieszczono rozpakowane pliki. Kod ěródïowy PHP moĝna rozpakowaÊ dokïadnie tak, jak wczeĂniej rozpakowaliĂmy kod ěródïowy biblioteki. JeĂli dysponujesz juĝ utworzonym wczeĂniej drzewem kodu PHP, moĝesz je wykorzystaÊ, jednak w takim przypadku koniecznie uĝyj polecenia make clean. 9. Skopiowanie polecenia configure utworzonego wczeĂniej w pliku tekstowym, wklejenie go w wierszu poleceñ i naciĂniÚcie klawisza Enter, aby je wykonaÊ. W ten sposób ponownie skonfigurujemy Ărodowisko PHP z nowÈ bibliotekÈ i wszystkimi dotychczasowymi bibliotekami. K o n f i g u r o w a n i e P H P 47 10. Kompilacja kodu ěródïowego PHP. Naleĝy wykonaÊ kolejno polecenia make i make install. Warto siÚ przygotowaÊ na dïugie oczekiwanie, aĝ wymienione polecenia odpowiednio skompilujÈ i zainstalujÈ wszystkie komponenty PHP. UWAGA W razie dokonania jakichkolwiek zmian w plikach .ini (podobnych do tych poka- zanych we wczeĂniejszej czÚĂci tego rozdziaïu) wprowadzone modyfikacje mogÈ zostaÊ nadpisane ustawieniami domyĂlnymi w czasie ponownego kompilowania PHP. W takim przypadku warto do tych ustawieñ wróciÊ, aby mieÊ pewnoĂÊ, ĝe nasza konfiguracja nie zostaïa zmieniona. 11. Ponowne uruchomienie serwera Apache. Naleĝy wykonaÊ polecenie apachectl graceful. 12. Przetestowanie Ărodowiska PHP. W pierwszej kolejnoĂci warto uruchomiÊ skrypt Witaj Ăwiecie!, aby sprawdziÊ, czy wïaĂnie zainstalowane Ărodowisko dziaïa wïaĂciwie. NastÚpnie dobrze jest poeksperymentowaÊ z wywoïaniami rozmaitych funkcji definiowanych przez biblioteki, aby mieÊ pewnoĂÊ, ĝe takĝe nowe biblioteki nie stwarzajÈ niespodziewanych problemów. Co moĝe pójĂÊ nie po naszej myĂli? Liczba problemów, które mogÈ wystÈpiÊ w czasie kompilacji, jest tak dïuga, ĝe omówienie ich wszystkich jest niemal niemoĝliwe. Chociaĝ wiele bïÚdów jest doĂÊ skomplikowanych, a znaczna ich czÚĂÊ jest ĂciĂle zwiÈzana z poszczególnymi bibliotekami (i tym samym wymaga bardzo specjalistycznych porad), trzy typo- we problemy wystÚpujÈ niemal zawsze. Pierwszym powaĝnym problemem, z którym moĝemy siÚ zetknÈÊ, jest brak zainstalowanych pakietów wytwarzania oprogramowania w pobranej dystrybu- cji lub wersji. W takim przypadku bÚdziemy potrzebowali kompilatora jÚzyka C i rozmaitych wersji „deweloperskich” wielu innych bibliotek potrzebnych do skompilowania kodu. Po drugie, moĝemy stanÈÊ przed koniecznoĂciÈ skonfigurowania Ărodowiska PHP z wykorzystaniem parametru --with definiujÈcego wprost ĂcieĝkÚ do doïÈ- czanej biblioteki, np. --with-mcrypt=/usr/lib/mcrypt. Innym powszechnym ěródïem problemów sÈ ěle skonfigurowane pakiety bi- bliotek rozszerzeñ. Jak juĝ wspomniano, bibliotekÚ Mcrypt naleĝy skonfiguro- waÊ z flagami --disable-nls --di
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP. Praktyczne skrypty, które oszczędzą Twój czas
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: