PHP Praktyczne skrypty ktore oszczedza Twoj czas phppso

background image

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¹!

background image

Spis treci

WPROWADZENIE ....................................................................................... 9

1.
NAJCZCIEJ ZADAWANE YCIOWE PYTANIA — SKRYPTY,
KTÓRE KADY PROGRAMISTA PHP CHCE (MUSI) ZNA ...................... 11

Skrypt nr 1: Doczenie innego pliku w formie czci danego skryptu ..................................12

Co moe pój nie po naszej myli? ...................................................................................13

Skrypt nr 2: Naprzemienne kolorowanie wierszy tabeli ........................................................15

Doskonalenie tego skryptu ................................................................................................16

Skrypt nr 3: Tworzenie czy Poprzednia/Nastpna ..............................................................18

Stosowanie tego skryptu ....................................................................................................21

Skrypt nr 4: Wywietlanie zawartoci tablicy .........................................................................22
Skrypt nr 5: Przeksztacanie tablicy w zmienn .....................................................................23
nietablicow z moliwoci przywrócenia oryginalnej struktury ...........................................24

Co moe pój nie po naszej myli? ...................................................................................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 podrcznik Smarty ..................................................................................................28
Co moe pój nie po naszej myli? ...................................................................................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 bdach ...................................................................................35

Typowe komunikaty o bdach ..........................................................................................35

background image

4

S p i s t r e  c i

Skrypt nr 11: Ukrywanie wszystkich komunikatów o bdach .............................................. 37
Skrypt nr 12: Wyduanie czasu wykonywania skryptu ......................................................... 38

Co moe pój nie po naszej myli? ................................................................................... 38

Skrypt nr 13: Uniemoliwianie uytkownikom wysyania wielkich plików ........................... 38
Skrypt nr 14: Wyczanie rejestrowanych zmiennych globalnych ......................................... 39
Skrypt nr 15: Wczanie „magicznych cudzysowów” ........................................................... 39

Co moe pój nie po naszej myli? ................................................................................... 40

Skrypt nr 16: Ograniczanie dostpu PHP do plików ......................................................... 40

Co moe pój nie po naszej myli? ................................................................................... 41

Skrypt nr 17: Wyczanie obsugi okrelonych funkcji ........................................................... 41
Skrypt nr 18: Dodawanie rozszerze do PHP ....................................................................... 41

Dodawanie rozszerze jzyka PHP ................................................................................... 43
Instalacja rozszerze za pomoc internetowego panelu sterowania ................................. 44
Co moe pój nie po naszej myli? ................................................................................... 48

3.
BEZPIECZESTWO W PHP ....................................................................... 49

Ustawienia konfiguracyjne zalecane z uwagi na bezpieczestwo .......................................... 51
Skrypt nr 19: Wstrzykiwanie kodu jzyka SQL ..................................................................... 52
Skrypt nr 20: Zapobieganie prostym atakom typu XSS ......................................................... 54
Skrypt nr 21: Stosowanie pakietu SafeHTML ........................................................................ 56

Co moe pój nie po naszej myli? ................................................................................... 57

Skrypt nr 22: Ochrona danych za pomoc jednokierunkowej funkcji generujcej 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 bezpieczestwa: formularze nie s godne zaufania .................................................... 65
Strategie weryfikacji .............................................................................................................. 66
Stosowanie zmiennych $_POST, $_GET, $_REQUEST
oraz $_FILES do uzyskiwania dostpu do danych formularza ............................................... 67
Skrypt nr 25: Spójne i bezpieczne uzyskiwanie zmiennych formularza ................................. 67
Skrypt nr 26: Usuwanie zbdnych znaków biaych .................................................................... 68
Skrypt nr 27: Importowanie zmiennych formularza do tablicy ............................................. 69
Skrypt nr 28: Sprawdzanie, czy odpowied naley do zbioru prawidowych wartoci ......... 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

background image

S p i s t r e  c i

5

Skrypt nr 31: Podwójne sprawdzanie daty wyganicia wanoci karty kredytowej .............77

Stosowanie tego skryptu ....................................................................................................79

Skrypt nr 32: Sprawdzanie poprawnoci adresów poczty elektronicznej ..............................79
Skrypt nr 33: Sprawdzanie poprawnoci numerów telefonu .................................................80

5.
PRACA Z TEKSTEM I KODEM JZYKA HTML .......................................... 83

Skrypt nr 34: Wyodrbnianie fragmentu acucha ....................................................................83

Doskonalenie tego skryptu ................................................................................................86

Skrypt nr 35: Zmiana liter acucha na wielkie,
mae lub wielkie litery na pocztku wyrazów ........................................................................86

Co moe pój nie po naszej myli? ...................................................................................87

Skrypt nr 36: Odnajdywanie podacuchów ..........................................................................88

Co moe pój nie po naszej myli? ...................................................................................89

Skrypt nr 37: Zastpowanie podacuchów ...........................................................................89

Co moe pój nie po naszej myli? ...................................................................................90

Skrypt nr 38: Odnajdywanie i poprawianie literówek za pomoc moduu pspell ..................91

Praca ze sownikiem domylnym .......................................................................................91
Dodawanie sownika niestandardowego do biblioteki pspell .............................................94
Co moe pój nie po naszej myli? ...................................................................................95

Skrypt nr 39: Wyraenia regularne ........................................................................................96

Podstawy wyrae regularnych .........................................................................................96
Sekwencje znaków specjalnych ..........................................................................................97
Repetytory wzorców .........................................................................................................98
Grupowanie .......................................................................................................................99
Klasy znaków ......................................................................................................................99
Poczenie wszystkich omówionych elementów ...............................................................99
Dopasowywanie i wyodrbnianie tekstu za pomoc wyrae regularnych .....................100
Zastpowanie podacuchów za pomoc wyrae regularnych ......................................102

Skrypt nr 40: Przebudowa tabeli jzyka HTML ...................................................................103
Skrypt nr 41: Tworzenie screen scrapera ............................................................................104

Doskonalenie tego skryptu ..............................................................................................106

Skrypt nr 42: Konwersja zwykego tekstu na prawidowy kod jzyka HTML .....................106
Skrypt nr 43: Automatyczna konwersja adresów URL na hipercza ..................................109
Skrypt nr 44: Usuwanie znaczników jzyka HTML z acuchów .........................................110

6.
PRACA Z DATAMI ................................................................................. 113

Jak liczony jest czas w systemie UNIX .................................................................................113
Skrypt nr 45: Uzyskiwanie biecego znacznika czasowego ................................................114
Skrypt nr 46: Uzyskiwanie znacznika czasowego dla daty z przeszoci lub w przyszoci .....115

Tworzenie znaczników czasowych na podstawie acucha .............................................115
Tworzenie znaczników czasowych na podstawie wartoci dat .......................................117

Skrypt nr 47: Formatowanie daty i godziny .........................................................................118
Skrypt nr 48: Wyznaczanie dnia tygodnia na podstawie danej daty .....................................121

background image

6

S p i s t r e  c i

Skrypt nr 49: Odnajdywanie rónic dzielcych dwie daty ................................................... 121

Stosowanie tego skryptu ................................................................................................. 123
Doskonalenie tego skryptu .............................................................................................. 123

Formaty dat systemu MySQL .............................................................................................. 123

7.
PRACA Z PLIKAMI ................................................................................ 125

Uprawnienia dostpu do plików ......................................................................................... 125

Uprawnienia ustawiane za porednictwem programu FTP ............................................ 127
Wiersz polece ................................................................................................................ 127
Co moe pój nie po naszej myli? ................................................................................. 127

Skrypt nr 50: Umieszczanie zawartoci pliku w zmiennej ................................................... 128

Doskonalenie tego skryptu .............................................................................................. 130
Co moe pój nie po naszej myli? ................................................................................. 131

Skrypt nr 51: Tworzenie plików i zapisywanie danych w plikach ....................................... 131
Skrypt nr 52: Sprawdzanie, czy interesujcy nas plik istnieje .............................................. 132
Skrypt nr 53: Usuwanie plików ........................................................................................... 133
Skrypt nr 54: Wysyanie obrazów do katalogu .................................................................... 133

Stosowanie tego skryptu ................................................................................................. 138
Co moe pój nie po naszej myli? ................................................................................. 138
Doskonalenie tego skryptu .............................................................................................. 138

Skrypt nr 55: Odczytywanie plików z danymi oddzielonymi przecinkami .......................... 138

8.
LEDZENIE UYTKOWNIKA I SESJI ...................................................... 141

ledzenie danych uytkownika z wykorzystaniem ciasteczek i sesji ................................... 142

Ciasteczka ........................................................................................................................ 142
Sesje ................................................................................................................................. 143

Skrypt nr 56: Tworzenie komunikatu
„Witaj ponownie, nazwa_uytkownika!” z wykorzystaniem ciasteczek .................................. 144

Co moe pój nie po naszej myli? ................................................................................. 145

Skrypt nr 57: Wykorzystywanie sesji do tymczasowego skadowania danych .................... 146

Co moe pój nie po naszej myli? ................................................................................. 148

Skrypt nr 58: Sprawdzanie, czy przegldarka internetowa uytkownika obsuguje ciasteczka .....148
Skrypt nr 59: Przekierowywanie uytkowników na inne strony ......................................... 150
Skrypt nr 60: Wymuszanie na uytkownikach
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 POCZT ELEKTRONICZN ................................................... 161

Skrypt nr 64: Wysyanie wiadomoci poczty elektronicznej
z wykorzystaniem pakietu PHPMailer ................................................................................. 162

background image

S p i s t r e  c i

7

Instalacja pakietu PHPMailer ............................................................................................162
Stosowanie tego skryptu ..................................................................................................164
Dodawanie zaczników ...................................................................................................165
Co moe pój nie po naszej myli ..................................................................................166

Skrypt nr 65: Wykorzystywanie wiadomoci poczty elektronicznej
do weryfikacji kont uytkowników ......................................................................................167

10.
PRACA Z OBRAZAMI ............................................................................ 173

Skrypt nr 66: Tworzenie obrazów CAPTCHA zabezpieczajcych 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: Nawizywanie poczenia 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 usug sieciowych ..............................................194
Skrypt nr 72: Uzyskiwanie danych z witryny Amazon.com
za porednictwem skryptu PHP i protokou SOAP .............................................................198
Skrypt nr 73: Budowanie usugi sieciowej ............................................................................200

12.
PRZYK ADY BARDZIEJ Z OONYCH PROJEKTÓW .............................. 205

Skrypt nr 74: Internetowe gosowanie .................................................................................206

Tworzenie formularza z kart do gosowania ..................................................................207
Przetwarzanie karty do gosowania .................................................................................209
Uzyskiwanie wyników gosowania ...................................................................................211
Doskonalenie tego skryptu ..............................................................................................213

Skrypt nr 75: Elektroniczne kartki z pozdrowieniami ..........................................................214

Wybór kartki ....................................................................................................................216
Wysyanie kartki elektronicznej .......................................................................................218
Wywietlanie kartki ..........................................................................................................221
Doskonalenie tego skryptu ..............................................................................................224

Skrypt nr 76: System blogu ..................................................................................................225

Tworzenie wpisów na blogu ............................................................................................226
Wywietlanie wpisu na blogu ...........................................................................................228
Dodawanie komentarzy ...................................................................................................232
Tworzenie indeksu blogu .................................................................................................233
Doskonalenie tego skryptu ..............................................................................................236

DODATEK .............................................................................................. 239

SKOROWIDZ .......................................................................................... 241

background image

2

Konfigurowanie PHP

J

AK KA DY PAKIET OPROGRAMOWANIA

,

TAK I

PHP

OFERUJE

WIELE OPCJI KONFIGURACYJNYCH

,

KTÓRE W TEN CZY INNY

SPOSÓB WPYWAJ NA SPOSÓB JEGO FUNKCJONOWANIA

.

Wikszo tych opcji nie ma istotnego znaczenia, ale o kilku

najwaniejszych opcjach kady programista PHP z pewnoci

powinien wiedzie .

Co wicej, istnieje wiele dodatków do PHP (okrelanych

mianem bibliotek) uzupeniajcych t technologi o nowe moliwoci. Na przy-
kad rozszerzenie cURL umoliwia serwerowi wysyanie danych formularzy do in-
nych serwerów i przetwarzanie odsyanych odpowiedzi. Inne przydatne rozsze-
rzenie, Mcrypt, umoliwia nam atwe i skuteczne szyfrowanie danych celem
bezpiecznego skadowania poufnych informacji.

W tym rozdziale zajmiemy si ustawieniami konfiguracyjnymi najczciej wyko-

rzystywanymi przez programistów PHP oraz sytuacjami, w których stosowanie tych
ustawie jest uzasadnione.

Ustawienia konfiguracyjne i plik php.ini

Wikszo pocztkujcych programistów traktuje ustawienia domylne PHP, jakby
byli niemiaymi lokatorami wprowadzajcymi si do ekskluzywnego apartamentu
— obawiaj si cokolwiek zmieni w obawie o wpacon kaucj. W postrzeganiu
PHP jako domu nie ma niczego zego. Bdziemy tam jaki czas mieszka , dlacze-
go wic nie poprzestawia mebli czy nie zburzy paru cian?

background image

32

R o z d z i a  2

W zalenoci od konfiguracji samego komputera, na którym pracuje Twój serwer
WWW, moesz nie mie moliwoci samodzielnego modyfikowania ustawie .
Dobrzy operatorzy serwerów nie maj jednak nic przeciwko wprowadzaniu nie-
zbdnych zmian w Twoim imieniu, a najlepsze firmy tego typu oferuj nawet moli-
wo modyfikacji ustawie za porednictwem specjalnych plików konfiguracyjnych.

Ustawienia rodowiska PHP s skadowane w pliku nazwanym php.ini, który

mona przeglda i modyfikowa w dowolnym edytorze tekstu. Ustawienia, które
podzielono pomidzy sekcje, maj nastpujc posta :

max_execution_time = 30

; Maksymalny czas wykonywania

max_input_time = 60

; Maksymalny czas analizy skadniowej danych wejciowych

memory_limit = 8M

; Maksymalna ilo pamici zajmowanej przez skrypt

Parametry konfiguracyjne mona ustawia za pomoc znaku równoci (

=

).

rednik (

;

) oznacza, e mamy do czynienia z komentarzem; okazuje si jednak,

e istniej wyjtki od tej reguy umoliwiajce stosowanie redników w niektó-
rych parametrach. Gdybymy chcieli trwale zmieni jakie ustawienie, powinnimy
sporzdzi kopi zapasow pliku php.ini, zmodyfikowa oryginalny plik konfi-
guracyjny i ponownie uruchomi serwer Apache. Gdybymy chcieli zmienia
ustawienia na poziomie skryptu, powinnimy uy funkcji

ini_set()

.

Lokalizowanie pliku php.ini

W niektórych przypadkach wskazanie miejsca skadowania pliku php.ini w syste-
mie, w którym pracujemy (szczególnie jeli korzystamy z wielu instalacji rodowiska
PHP), bywa trudne. Poniej opisano kilka sposobów lokalizowania tego pliku:

Q

Uytkownicy 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

Uytkownicy systemu Windows powinni zwróci uwag na katalog C:\php.

Q

Mona te wywoa funkcj

phpinfo()

w kodzie skryptu PHP (wicej

informacji na ten temat w kolejnym podrozdziale). Lokalizacja pliku
php.ini zostanie wywietlona w pocztkowej czci danych wynikowych
obok etykiety Configuration File (php.ini) Location.

Q

W wielu systemach UNIX mona uzyska list wszystkich plików
pasujcych do wzorca php.ini za pomoc polecenia

locate php.ini

.

Wiele ustawie nie jest definiowanych w domylnym pliku php.ini; rodowisko PHP
stosuje dla niezdefiniowanych ustawie wasne wartoci domylne. List ustawie
domylnych PHP mona znale na stronie internetowej http://www.php.net/

´manual/en/ini.php.

UWAGA

UWAGA

background image

K o n f i g u r o w a n i e P H P

33

Skrypt nr 8: Odkrywanie
wszystkich ustawie PHP

PHP oferuje bogat funkcjonalno , jednak nie zawsze wszystkie te funkcje s
wczone lub wbudowane w stosowanej instalacji. Do sprawdzenia, jakie ele-
menty wchodz w skad danej instalacji rodowiska PHP, mona wykorzysta
bardzo prosty skrypt. Moliwo uzyskiwania tego rodzaju danych jest o tyle nie-
bezpieczna, e szeroki zakres prezentowanych informacji stanowi swoisty pod-
rcznik dla potencjalnych atakujcych. Funkcja

phpinfo()

zdaje si mówi : „Tutaj.

To s moje sabe punkty. Wprost nie mog si doczeka wamania do mojego
systemu”. W tej sytuacji naley pamita o koniecznoci usunicia tego skryptu
zaraz po uzyskaniu interesujcych nas informacji:

<?php

phpinfo();

?>

Funkcja

phpinfo()

wywietla 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, pooenia pliku php.ini czy
wersji samego rodowiska PHP — obejmuj take 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 niezbdne funkcje
zostay prawidowo zainstalowane i wczone.

Aby uruchomi ten skrypt, odwied odpowiedni stron za pomoc swojej

przegldarki 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. Moemy na przykad by zainteresowani tylko sprawdze-
niem, czy mechanizm „magicznych cudzysowów” jest wczony, lub okrele-
niem cieki doczania. Co wicej, funkcja

phpinfo()

w aden sposób nam nie

pomoe, jeli pisany skrypt zachowuje si inaczej w razie wczenia jakiego usta-
wienia i inaczej w sytuacji, gdy to ustawienie jest wyczone.

Aby uzyska warto okrelonego ustawienia konfiguracyjnego, naley uy

funkcji

ini_get()

:

background image

34

R o z d z i a  2

<?php
echo "Warto opcji register_globals: " . ini_get('register_globals');
?>

Wystarczy przekaza na wejciu funkcji

ini_get()

prawidow nazw para-

metru konfiguracji, a otrzymamy aktualne ustawienie tego parametru na biecym
serwerze. Opcja jest zwracana w formie zwykej wartoci, zatem mona j wywie-
tli , przypisa do zmiennej itd. Korzystajc z tej funkcji, musimy jednak mie na
uwadze dwa aspekty.

Po pierwsze: wartoci logiczne, np.

"false"

, z reguy s zwracane w formie

acuchów pustych, zatem jeli spróbujemy wywietli ustawienie

"off"

para-

metru

register_globals

, by moe otrzymamy nastpujcy komunikat:

Warto opcji register_globals:

Po drugie: wartoci numeryczne czsto s reprezentowane w formie skróconej.

Jeli na przykad parametrowi

upload_max_filesize

przypisano warto 8192 baj-

tów, zostanie zwrócona warto 8 kB. Podobnie, jeli maksymalny rozmiar wysya-
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 powany problem, jeli chcemy na tych liczbach wykonywa opera-
cje arytmetyczne. Oficjalna dokumentacja PHP wspomina o funkcji konwertuj-
cej wartoci skrócone (kilo- i mega-) na prawdziwe wartoci:

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;
}
}

background image

K o n f i g u r o w a n i e P H P

35

Skrypt nr 10: Raportowanie o bdach

Pracujc nad kodem, czsto zapominamy nazw stosowanych zmiennych lub ko-
rzystamy z przestarzaych, niezalecanych konstrukcji. W niektórych przypad-
kach jzyk PHP okazuje si na tyle przyjazny uytkownikowi (przynajmniej jak
na standardy programowania), e sam naprawia wiele drobnych bdów w kodzie.

PHP umoliwia nam midzy innymi pisanie programów bez koniecznoci

deklarowania wszystkich niezbdnych zmiennych na pocztku kodu, co jest bardzo
wygodne, przynajmniej do momentu gdy zamiast nazwy

$string

omykowo

uyjemy nazwy

$stirng

reprezentujcej warto pust. Mona te przekazywa

zmienne na wejciu funkcji w zupenie niewaciwy sposób, a mimo to skrypt
PHP bdzie dziaa prawidowo, poniewa w wikszoci przypadków bdzie
przyjmowa pewne zaoenia wobec zamiarów programisty. Tego rodzaju mechani-
zmy s oczywicie bardzo podane, dopóki PHP prawidowo odgaduje nasze in-
tencje — w przeciwnym razie poszukiwanie tajemniczego bdu moe nam zaj
mnóstwo czasu.

Aby wyczy mechanizmy automatycznego usuwania problemów, mona

wczy tryb raportowania o bdach, co spowoduje, e PHP bdzie wywietla
na ekranie niezliczone komunikaty w reakcji na kady wykryty bd (niezalenie
od jego faktycznej wagi). Mona te komunikaty wykorzysta do eliminowania
potencjalnych luk w zabezpieczeniach i wykrywania bdnych zmiennych przed
skierowaniem programu do rodowiska kocowego. Wczenie trybu raporto-
wania o bdach wymaga umieszczenia nastpujcego kodu na pocztku tworzonego
skryptu:

<?php
error_reporting(E_ALL);

// Tutaj naley umieci dalsz cz skryptu.

?>

Wczenie trybu raportowania o bdach powoduje, e PHP wywietla ko-

munikaty jeszcze przed przetworzeniem dalszej czci danego programu. (Takie
rozwizanie uniemoliwia ustawianie ciasteczek w razie wystpienia bdu, zatem
nie powinnimy nawet próbowa zmienia wartoci ciasteczek po wczeniu tego
trybu).

Typowe komunikaty o bdach

Warto dobrze opanowa i zrozumie trzy najczciej generowane komunikaty
o bdach.

Notice: Undefined variable: var in script.php on line n

background image

36

R o z d z i a  2

Komunikat w tej formie oznacza, e korzystamy ze zmiennej, której wczeniej

nie zdefiniowano w danym skrypcie. Taka sytuacja moe mie miejsce w kilku
przypadkach:

Q

By moe popenilimy bd w pisowni nazwy zmiennej.

Q

By moe uylimy wyraenia warunkowego zawierajcego definicj
zmiennej, np.:

if ($fred == "Jestem Fred") {
$he_is_fred = "yes";
}

Q

By moe próbujemy konkatenowa zmienn bez jej uprzedniego
zadeklarowania.

Inny popularny problem wystpuje duo czciej 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 ostrzeenia w tej formie zwykle oznacza, e programista podj

prób przekazania acucha na wejciu funkcji bez otaczajcych go cudzyso-
wów. Innymi sowy, uyto na przykad wywoania

strtolower(acuch)

zamiast

metody

strtolower("acuch")

.

I wreszcie istnieje popularny komunikat o bdzie generowany w sytuacji,

gdy uzyskujemy dostp do tablicy:

Notice: Undefined index: i in script.php on line n

W praktyce komunikat w tej formie oznacza, e podjto prób odczytania

elementu

$tablica[i]

, mimo e tablica

$tablica

nie definiuje elementu pod

tym indeksem. Z tego rodzaju bdami mamy do czynienia w sytuacji, gdy uzy-
skujemy warto z formularza za porednictwem zmiennej

$_POST

lub

$_GET

,

chocia adna z tych zmiennych nie zawiera tak nazwanej wartoci. Najczciej
podobne bdy wynikaj z tego, e uytkownik nie zaznaczy odpowiedniego
pola wyboru lub przycisku opcji — w takim przypadku zmienna reprezentujca
ten element formularza w ogóle nie jest przekazywana w ramach dania

GET

(jako cz adresu URL).

Tryb raportowania o bdach naley wyczy z chwil wdraania skryptu na

docelowej witrynie, aby uytkownicy nie mogli si zapoznawa z popenionymi
przez nas bdami i aby wyeliminowa wpyw tego trybu na ciasteczka (w szcze-
gólnoci problemy ze ledzeniem sesji).

background image

K o n f i g u r o w a n i e P H P

37

Skrypt nr 11: Ukrywanie wszystkich
komunikatów o bdach

W pewnych sytuacjach dysponujemy prawidowo dziaajcym skryptem, a mimo
to rodowisko PHP wci sugeruje potencjalne usterki. Innym razem nie chcemy,
by oczekiwane problemy powodoway, e nasi uytkownicy bd naraeni na
odraajcy widok komunikatów o bdach (odkrywajcych informacje, co szcze-
gólnie ceni sobie hakerzy).

Na szczcie istnieje moliwo powstrzymania PHP przed wywietlaniem

wszystkich komunikatów o bdach. Wystarczy w pliku php.ini umieci nast-
pujcy wiersz:

display_errors = Off

Przytoczone rozwizanie warto stosowa w rodowisku docelowym aplikacji

internetowej, aby w przyszoci nie obawia si szerokiej dostpnoci komuni-
katów diagnostycznych PHP odnonie do naszego kodu. Gdybymy chcieli za-
pozna si z tymi komunikatami celem wyeliminowania ewentualnych problemów,
powinnimy uy nastpujcego ustawienia konfiguracyjnego wymuszajcego
kierowanie tych komunikatów do dziennika zdarze serwera Apache:

log_errors = On

W razie potrzeby mona nawet wysya komunikaty diagnostyczne do dzien-

nika systemowego lub wskazanego pliku — parametrowi

error_log

naley wów-

czas przypisa odpowiednio warto

syslog

lub nazw pliku.

Pozostaje jeszcze kwestia naszego rodowiska wytwarzania, gdzie z reguy

chcemy uzyskiwa moliwie wiele komunikatów diagnostycznych. Po przypisa-
niu parametrowi

display_errors

wartoci

On

mona dodatkowo (w pliku php.ini)

ustawi struktur bitow w parametrze

error_reporting

(wicej szczegóów na

ten temat mona znale w przykadowym pliku php.ini instalowanym wraz ze
rodowiskiem PHP). Jeli jednak chcemy „uciszy ” jaki skrypt, który nieustannie
zasypuje nas tymi samymi komunikatami, moemy uy w jego kodzie nastpuj-
cego wywoania funkcji:

error_reporting(0);

background image

38

R o z d z i a  2

Skrypt nr 12: Wyduanie czasu
wykonywania skryptu

Pracowaem kiedy w firmie, która postawia sobie za cel zmian mechanizmu
obsugi koszyków z zakupami. Do moich zada naleao napisanie skryptu od-
powiedzialnego za konwersj 250 MB danych o produktach ze starego na nowy
format. Skrypt dziaa co prawda znakomicie, jednak ilo przetwarzanych da-
nych powodowaa, e rodowisko PHP stale przerywao jego wykonywanie po
upywie 30 sekund, a wic na dugo przed osigniciem zamierzonego celu.

Wanie wówczas odkryem drobne rozszerzenie, które umoliwio mojemu

skryptowi wykonanie zleconego zadania. Poniszy wiersz dodany na pocztku
skryptu powoduje, e bdzie on mia maksymalnie 240 sekund na przetworzenie
danych:

ini_set(max_execution_time, "240");

Parametr konfiguracyjny

max_execution_time

okrela maksymalny czas wyko-

nywania skryptu przed jego automatycznym zakoczeniem. Nie naley jednak tego
parametru naduywa . Jeli dany skrypt dziaa kilka minut, to albo usprawie-
dliwia nas ogromna ilo przetwarzanych informacji (najpewniej zaczerpnitych
z bazy danych), albo nasz skrypt jest bardzo nieefektywny, albo korzystamy z
niewaciwego jzyka programowania.

Co moe pój nie po naszej myli?

Jeli nasz serwer pracuje w trybie awaryjnym, ustawianie wartoci parametru

max_execution_time

w czasie wykonywania jest niemoliwe.

Warto te dokadnie sprawdzi kod skryptu. By moe omykowo zawarlimy

tam nieskoczon ptl lub ptl wykonywan w innej ptli i niepodejmujc
adnych sensownych dziaa.

Skrypt nr 13: Uniemoliwianie uytkownikom
wysyania wielkich plików

Gdybymy chcieli uniemoliwi uytkownikom naszej aplikacji wysyanie na
serwer 70-gigabajtowych MPEG-ów z najnowszym filmem „Gwiezdne wojny”,
powinnimy okreli maksymalny rozmiar plików kopiowanych na serwer.
(Szczegóowe omówienie samych technik przetwarzania wysyanych plików
mona znale w podrozdziale „Skrypt nr 54: Wysyanie obrazów do katalogu”
w rozdziale 7.).

upload_max_filesize = 500K

background image

K o n f i g u r o w a n i e P H P

39

Maksymalny rozmiar plików wysyanych na serwer mona okreli na jeden

z trzech sposobów:

Q

w formie wartoci cakowitoliczbowej (wyraajcej czn liczb bajtów);

Q

w formie liczby z przyrostkiem

M

reprezentujcej megabajty

(

2M

to 2 megabajty);

Q

w formie liczby z przyrostkiem

K

reprezentujcej kilobajty

(

8K

to 8 kilobajtów).

Niezalenie od uytego formatu nasi uytkownicy nie bd mogli wysa na

serwer pliku, którego rozmiar bdzie przekracza tak zdefiniowany próg. Domyl-
nym rozmiarem maksymalnym s 2 MB.

Skrypt nr 14: Wyczanie rejestrowanych
zmiennych globalnych

Jzyk PHP oferuje przestarza, niezalecan funkcj, która nieznacznie uatwia
dostp do parametrów da

GET

i

POST

protokou HTTP. Jeli na przykad da-

nie

POST

zawiera parametr nazwany

mojparam

, PHP moe automatycznie umie-

ci jego warto w zmiennej nazwanej

$mojparam

. Dziaanie tego mechanizmu

stwarza powane ryzyko dla bezpieczestwa aplikacji, poniewa umoliwia
uytkownikom ustawianie dowolnych zmiennych globalnych — jeli zapomnimy
zainicjalizowa odpowiednie zmienne, uytkownik zyska moliwo wpywania
na istotne elementy naszego skryptu.

Wspomniany mechanizm mona wyczy , ustawiajc w zmiennej

register_

´globals

warto

Off

w pliku php.ini serwera:

register_globals = Off

Opisana funkcja na szczcie zostaa wyczona w wersjach 4.2 i nowszych

jzyka PHP. Waga problemu jest jednak na tyle dua, e warto to dwukrotnie
sprawdzi .

Skrypt nr 15: Wczanie
„magicznych cudzysowów”

„Magiczne cudzysowy” (ang. magic quotes) to wygodne narzdzie stosowane
przez administratorów serwerów do ochrony przed atakami polegajcymi na
wstrzykiwaniu kodu SQL-a (patrz podrozdzia „Skrypt nr 19: Wstrzykiwanie
kodu jzyka SQL” w rozdziale 3.). Dziaanie tego mechanizmu polega na po-

background image

40

R o z d z i a  2

przedzaniu wszystkich apostrofów, cudzysowów i lewych ukoników dodatkowym
znakiem lewego ukonika (tzw. znakiem ucieczki) we wszystkich danych zapisywa-
nych w zmiennych skryptu PHP i pochodzcych z formularzy HTML. W ten
sposób na przykad acuch

"Ferrett's Book"

zostanie przeksztacony w acuch

\"Ferrett\'s Book\"

.

Mechanizm „magicznych cudzysowów” nie jest rozwizaniem idealnym, je-

li korzystamy z bazy danych MySQL — w takim przypadku naley stosowa raczej
wyspecjalizowan funkcj

mysql_real_escape_string()

— jednak generalnie

„magiczne cudzysowy” zdaj egzamin. Mona ten mechanizm wczy w pliku
php.ini za pomoc nastpujcego wyraenia:

magic_quotes_gpc = 1

Co moe pój nie po naszej myli?

Jeli nie wczymy mechanizmu „magicznych cudzysowów”, bdziemy musieli
korzysta z funkcji

mysql_real_escape_string()

, aby zagwarantowa stosowanie

sekwencji ucieczki w wykorzystywanych danych. Jeli jednak uyjemy tej funk-
cji dla danych w sytuacji, gdy mechanizm „magicznych cudzysowów” bdzie
wczony, ryzykowne znaki zostan poprzedzone podwójnymi lewymi ukonikami
(zamiast

\"Ferrett\'s Book\"

otrzymamy

\\"Ferrett\\'s Book\\"

). Jak wida ,

konsekwencja popaca — chwila nieuwagi moe spowodowa , e tabele naszej
bazy danych bd zawieray niemal wycznie lewe ukoniki.

Skrypt nr 16: Ograniczanie dostpu PHP
do plików

Jeli obawiasz si wrogiego skryptu PHP uzyskujcego dostp do plików syste-
mowych (np. do pliku hase), moesz uy ustawienia

open_basedir

do ograni-

czenia zbioru katalogów dostpnych z poziomu kodu PHP. Po ustawieniu tej
opcji skrypt PHP nie bdzie móg otwiera ani modyfikowa adnych plików
spoza wskazanego katalogu. Poniej przedstawiono wiersz pliku php.ini ograni-
czajcy dostp tylko do katalogu /home/www:

open_basedir = /home/www

Istnieje moliwo zapewniania skryptom dostpu do wielu katalogów —

w systemie UNIX naley je oddziela dwukropkami (

:

); w systemie Windows

kolejne katalogi oddzielamy rednikami (

;

).

PHP domylnie zapewnia dostp zarówno do wskazanego katalogu, jak i wszystkich
jego podkatalogów. Gdybymy chcieli ograniczy ten dostp tylko do plików w okre-
lonym katalogu, na ko cu uytej cieki powinnimy uy ukonika (np.
/home/www/).

UWAGA

background image

K o n f i g u r o w a n i e P H P

41

Co moe pój nie po naszej myli?

Jeli uytkownicy musz wysya pliki na serwer, to do czasu ich przetworzenia
przez skrypt otrzymane pliki s skadowane w katalogu tymczasowym. Ponie-
wa katalog tymczasowy z reguy dzieli spora odlego od pozostaych plików
PHP, koniecznie musimy pamita o jego uwzgldnieniu na licie reprezentowanej
przez parametr

open_basedir

.

Skrypt nr 17: Wyczanie
obsugi okrelonych funkcji

Przypu my, e uznalimy funkcj

exec()

, która umoliwia bezporednie wyko-

nywanie polece na serwerze z poziomu skryptów PHP, za zbyt niebezpieczn.
Okazuje si, e istnieje moliwo wyczania obsugi poszczególnych funkcji
PHP (wanie z myl o wyeliminowaniu luk w zabezpieczeniach) z zachowa-
niem moliwoci stosowania wszystkich pozostaych funkcji. Poniej przedsta-
wiono przykad wiersza pliku php.ini wyczajcego obsug kilku szczególnie
ryzykownych funkcji:

disable_functions = system, exec, passthru, shell_exec, proc_open

Skrypt nr 18: Dodawanie rozszerze do PHP

Naprawd powani programici prdzej czy póniej odkrywaj pewne ograni-
czenia jzyka PHP. Mimo ogromnej liczby wbudowanych funkcji i mechani-
zmów sam jzyk PHP nie oferuje rdzennych rozwiza w zakresie szyfrowania,
grafiki, dostpu do innych stron internetowych czy przetwarzania danych w forma-
cie XML.

Te i inne cele mona jednak osiga dziki niezliczonym rozszerzeniom wy-

korzystujcym biblioteki tworzone przez niezalenych programistów i podmioty.
Kilka najbardziej przydatnych rozszerze jzyka PHP opisano poniej:

cURL

cURL umoliwia naszemu serwerowi PHP uzyskiwanie dostpu do innych
witryn internetowych, w tym wysyanie i odbieranie informacji za porednic-
twem swoistego protokou zbudowanego na bazie adresów URL. (Najczciej
korzystamy z protokou HTTP, który umoliwia nam komunikacj z innymi
stronami internetowymi, oraz protokou FTP umoliwiajcego nam wysyanie
i pobieranie plików). W praktyce oznacza to, e nasz serwer moe by trak-
towany przez inne witryny jak przegldarka internetowa, a pobierane strony
WWW moemy umieszcza w dowolnych zmiennych w ramach swoich
skryptów.

background image

42

R o z d z i a  2

cURL jest niezwykle wanym narzdziem dla programistów pracujcych nad
powanymi sklepami internetowymi, poniewa umoliwia nam akceptowa-
nie patnoci kartami kredytowymi i wyceny towarów dla poszczególnych
klientów w czasie rzeczywistym. Za pomoc rozszerzenia cURL mona nawi-
zywa poczenia i wysya dane o transakcjach na serwer innej firmy. W od-
powiedzi otrzymujemy wówczas informacje o akceptacji bd odrzuceniu
dania dokonania patnoci.

Mcrypt

Musiae kiedy co zaszyfrowa ? Wszystkie poufne informacje umieszczane
w ciasteczkach i sesjach powinny by szyfrowane. Co wicej, jeli gdziekolwiek
zapisujemy co naprawd wartociowego, jak numery kart kredytowych czy
dane osobowe, z pewnoci powinnimy si upewni , e odczyt tych infor-
macji nie bdzie moliwy przez zwyky zrzut zawartoci bazy danych. Na
szczcie biblioteka Mcrypt umoliwia nam naprawd skuteczne szyfrowa-
nie danych bez cho by szcztkowej znajomoci 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

Gdybymy chcieli tworzy obrazy graficzne na danie lub po prostu uzy-
skiwa szczegóowe informacje o obrazach ju istniejcych, powinnimy si
zapozna z moliwociami biblioteki GD. Biblioteka GD umoliwia nam prac
na plikach JPEG i GIF — moemy je tworzy z myl o graficznej prezentacji
rozmaitych danych (np. w formie wykresów) albo modyfikowa (np. tworzc
miniaturki istniejcych obrazów).

MySQL

Podstawowa wersja rodowiska PHP w ogóle „nie wie”, jak uzyskiwa do-
stp do baz danych. Poniewa jednak system MySQL i jzyk PHP s jak Zan
i Jayna z popularnej kreskówki, wikszo serwerów WWW przystosowa-
nych do obsugi PHP oferuje te domylnie instalowane biblioteki systemu
MySQL, zatem wikszo programistów korzysta z funkcji

mysql_connect()

,

nie wiedzc, e jest ona czci rozszerzenia.

Zbiór rozszerze PHP jest oczywicie duo bogatszy i obejmuje takie biblioteki

jak SOAP (zapewniajca dostp do usug internetowych), PDF czy Verisign
Payment Pro. Na pierwszy rzut oka moe si wydawa , e najlepszym rozwi-
zaniem jest doczanie do rodowiska PHP wszystkich rozszerze, które tylko
udao nam si odnale , jednak warto mie na uwadze, e kade z nich moe
wyduy czas inicjalizacji i stwarza dodatkowe luki w zabezpieczeniach. Co
wicej, mniej popularne rozszerzenia z reguy nie s na bieco aktualizowane
ani rozwijane.

background image

K o n f i g u r o w a n i e P H P

43

Dodawanie rozszerze jzyka PHP

Skoro wiemy ju, co mona zyska , instalujc rozszerzenia, przyjrzyjmy si sa-
mem procesowi ich instalowania. W pierwszej kolejnoci naley sprawdzi , czy
przypadkiem ju nie dysponujemy tym, czego szukamy.

Sprawdzanie, czy interesujce nas rozszerzenia nie zostay ju zaadowane

Wiele serwerów WWW domylnie instaluje najbardziej przydatne i najpopular-
niejsze rozszerzenia, zatem przed podjciem prób odszukania i instalacji intere-
sujcej nas biblioteki powinnimy si upewni , czy nie zostaa ju zainstalowana
i zaadowana.

Najprostszym sposobem sprawdzenia ewentualnej obecnoci rozszerze jest

wywoanie funkcji

phpinfo()

(opisanej w podrozdziale „Skrypt nr 8: Odkrywa-

nie wszystkich ustawie PHP” we wczeniejszej czci tego rozdziau). List
zwrócon przez t funkcj naley dokadnie przejrze w poszukiwaniu naszych
bibliotek. Jeli na przykad rodowisko PHP obejmuje zainstalowane rozszerze-
nie MySQL, dane wynikowe funkcji

phpinfo()

bd zawieray wiersz podobny

do poniszego:

mysql

MySQL Support => enabled
...

Jeli uznasz, e takie rozwizanie nie jest dla Ciebie, jeli wyda Ci si zbyt

wolne, moesz skorzysta z innych moliwoci.

Kade rozszerzenie dodaje do PHP nowe funkcje — na przykad cURL

uzupenia 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 pojcia o funkcji

mcrypt_decrypt()

i traktuje j jako funkcj niezdefiniowan.

Mona to wykorzysta , stosujc funkcj

function_exists()

jzyka PHP. Poniej

przedstawiono przykadowy skrypt wykrywajcy 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

Jeli korzystamy z serwera WWW bdcego wasnoci innej firmy (tak robi
wikszo programistów), musimy si zda na ask administratora tego ser-
wera. Poniewa z natury rzeczy nie dysponujemy hasem administratora, nie

background image

44

R o z d z i a  2

moemy instalowa niezbdnych bibliotek samodzielnie. W takim przypadku
musimy o to poprosi administratora wynajmowanego serwera. Kierujc odpo-
wiednie zlecenie, powinnimy si upewni , e administrator dysponuje precy-
zyjnymi informacjami; w przeciwnym razie moe si okaza , e zostaa zainsta-
lowana niewaciwa wersja lub wrcz niewaciwe rozszerzenie.

Niektóre firmy zrealizuj nasz prob bez najmniejszych problemów. Inne

bd oczekiway dodatkowych opat za obcianie swoich serwerów dodatko-
wymi rozszerzeniami. Jeszcze inne odpowiedz: „Nasza oferta nie obejmuje ob-
sugi dodatkowych rozszerze. Ograniczamy si tylko do standardowego PHP”.

Jeli z jakiego powodu nie moesz zainstalowa potrzebnych rozszerze,

moesz albo spróbowa poradzi sobie bez nich, albo zmieni firm obsugujc
serwery.

Nawet jeli korzystamy z wasnego serwera, ale nie potrafimy prawidowo zain-
stalowa niezbdnych rozszerze , warto zwróci si z prob o instalacj nowych
bibliotek do pracowników wsparcia technicznego. W takim przypadku w razie nie-
powodzenia procesu instalacji technicy bd w stanie naprawi usterk (przy-
najmniej teoretycznie).

Instalacja rozszerze
za pomoc internetowego panelu sterowania

Dzierawione serwery czsto oferuj specjalne panele sterowania, za pored-
nictwem których moemy realizowa typowe zadania administracyjne (w tym
zadanie ponownego uruchomienia usugi Apache lub restartu caego serwera)
w oknie przegldarki internetowej.

Niektóre panele sterowania oferuj nawet moliwo automatycznego kom-

pilowania serwera Apache i rodowiska PHP wskutek zaznaczenia pól wyboru
lub wyboru z list rozwijanych opcji reprezentujcych dodawane rozszerzenia.
Na przykad WHM (popularny, cho do trudny w obsudze panel sterowania)
udostpnia opcj Update Apache, która powoduje ponown instalacj serwera
Apache i rodowiska PHP wraz z wybranymi daniami.

Jeli Twój serwer nie udostpnia preinstalowanego panelu sterowania, z reguy za
niewielk opat mona taki panel zainstalowa ju po wdroeniu oprogramowania
serwera.

Rczna instalacja rozszerze

Ponowna kompilacja PHP jest w systemach UNIX traktowana jako ponowna in-
stalacja tego rodowiska wraz z niezbdnymi rozszerzeniami. Dla programistów,
którzy nie maj dowiadczenia w roli administratorów systemów UNIX, ponowna
kompilacja rodowiska PHP czsto jest powanym wyzwaniem.

Najlepszym rozwizaniem jest przystpienie do eksperymentów z lokalnym

serwerem Apache z dala od docelowego rodowiska pracy aplikacji interneto-
wej. Poniewa zmiany wprowadzane w konfiguracji pracujcego serwera mog

UWAGA

background image

K o n f i g u r o w a n i e P H P

45

doprowadzi do powanych problemów, warto uprzednio sprawdzi , czy w razie
kopotów moemy liczy na pomoc techniczn i czy zdajemy sobie spraw z tego,
co moe si wydarzy . Jeli nie jestemy przygotowani do tego rodzaju zada,
powinnimy si zwróci o pomoc do kogo bardziej kompetentnego.

Instalacja biblioteki w rodowisku PHP jest procesem dwuetapowym —

w pierwszej kolejnoci musimy zainstalowa same biblioteki rozszerze; drugim
krokiem jest takie skonfigurowanie rodowiska PHP, aby rozpoznawao te roz-
szerzenia.

Instalowanie bibliotek

Szczegóowe kroki skadajce si na proces instalacji rozszerzenia w duej mie-
rze zale od dodawanej biblioteki. Mona oczywicie sformuowa ogólne za-
sady rzdzce tym procesem, jednak przed przystpieniem do instalacji zawsze
naley si zapozna z podrcznikami dostpnymi na stronie biblioteki oraz
wszystkimi plikami README. Czytelnicy zainteresowani szczegóowym wyja-
nieniem pracy systemu Linux, w tym technik kompilowania oprogramowania,
powinni sign po ksik Briana Warda zatytuowan How Linux Works (No
Starch Press, 2004)

1

.

W poniszych punktach opisano ogólne kroki skadajce si na proces insta-

lacji bibliotek:

1.

Zalogowanie na serwerze jako administrator lub uytkownik 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 sowa PHP
(np. mcrypt php) z reguy pozwoli byskawicznie odnale stron domow
interesujcego nas rozszerzenia, gdzie bd dostpne odpowiednie pliki
ródowe. Pliki ródowe najczciej s archiwizowane i kompresowane
za pomoc narzdzi Gzip i tar (z myl o oszczdzaniu przestrzeni),
zatem pobrany plik najprawdopodobniej bdzie nosi nazw
nazwaplikubiblioteki.tar.gz.

3.

Wypakowanie zawartoci pobranego archiwum. Archiwum tar jest
w istocie zbiorem plików i katalogów. Cae to archiwum jest nastpnie
kompresowane za pomoc pakietu Gzip, std rozszerzenie .gz jest
dopisywane na samym kocu. Oznacza to, e plik .tar.gz mona
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 narzdzi,
poniewa program tar w wersji GNU „wie”, jak korzysta z narzdzia de-
kompresujcego. Wypakowanie zawartoci 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 dziaa Linux, Helion, 2005 — przyp. tum.

background image

46

R o z d z i a  2

Wikszo archiwów tworzy drzewo poniej katalogu najwyszego poziomu,
zatem wanie takiej struktury powinnimy oczekiwa .

4.

Przejcie do katalogu biblioteki za pomoc polecenia

cd

nazwakatalogu

.

Jeli nie pamitamy lub w ogóle przeoczylimy nazw z poprzedniego
kroku, z reguy moemy przyj , e nazwa tego katalogu bdzie odpowiadaa
nazwie samej biblioteki — np.

cd cURL

. (Warto pamita , 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

skadniki niezbdne do zako czenia instalacji na danym komputerze
zostay rozpakowane.
Z uwagi na rónorodno dostpnych systemów
UNIX instalacja pakietów w tych systemach wymaga pewnej wiedzy
i dowiadczenia. Na szczcie polecenie

configure

w wikszoci przypadków

potrafi wykona ca t „brudn robot” za nas, automatycznie analizujc
ustawienia serwera i stosujc wartoci umoliwiajce prawidowy przebieg
instalacji programu. Wpisz w wierszu polece wyraenie

./configure

.

Niektóre rozszerzenia wymagaj do waciwego dziaania stosowania dodat-
kowych flag za poleceniem

configure

. Na przykad rozszerzenie Mcrypt

wymaga od nas wydania polecenia

./configure --disable-nls --disable-

posix-threads

, poniewa tylko w ten sposób mona zagwarantowa pen

zgodno z serwerem Apache. Poniewa dodatkowe opcje zale od samej
biblioteki, warto si zapozna z przewodnikami i plikami README, gdzie
mona znale precyzyjn dokumentacj wszystkich niezbdnych flag kon-
figuracyjnych.

6.

Kompilacja i instalacja danego pakietu. W systemach UNIX standardowym
narzdziem kompilujcym i instalujcym pakiety jest

make

. Najpierw musimy

wyda wanie polecenie

make

, aby skompilowa nasz pakiet. Na ekranie

zostan wywietlone wykonywane polecenia, które skadaj si na proces
kompilacji. Nastpnie powinnimy uy polecenia

make check

celem

wykonania na tym pakiecie automatycznych testów (niektóre pakiety nie
zawieraj testów, czym jednak nie powinnimy si przejmowa ). I wreszcie
naley wpisa polecenie

make install

, aby ostatecznie zainstalowa

rozszerzenie. Take proces instalacji bdzie dokumentowany na ekranie.
Po wykonaniu polecenia

make install

proces instalacji rozszerzenia

bdzie zakoczony.

7.

Utworzenie skryptu

phpinfo()

. Ach, pewnie mylae, e to ju koniec,

prawda? Przykro mi, ale opisana powyej 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 wczeniejszej czci tego rozdziau) moemy
uzyska kompletny wykaz ustawie serwera. Gdzie na pocztku pierwszej

background image

K o n f i g u r o w a n i e P H P

47

strony danych wygenerowanych przez t funkcj mona znale sekcj za-
tytuowan Configure Command i zawierajc tajemnicz list elementów
podobn do poniszej:

'./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'

Gdybymy chcieli ponownie zainstalowa rodowisko PHP w stanie, w któ-
rym znajduje si obecnie, dysponowalibymy gotowym poleceniem (a przy-
najmniej prawie gotowym). W pierwszej kolejnoci naley 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 — jeli
dodajemy rozszerzenie GD, nie chcemy przecie przy tej okazji utraci in-
nych, zainstalowanych wczeniej rozszerze. Gotowe polecenie

configure

naley skopiowa do pliku tekstowego i dopisa na jego kocu odpowiednie
wyraenia

--with

. Jeli na przykad dodajemy do serwera rozszerzenie

Mcrypt, powinnimy dopisa wyraenie

--with-mcrypt

. Waciwy parametr

--with

z reguy mona znale w dokumentacji instalowanego rozszerzenia.

Jeli zastpimy oryginaln struktur katalogów zawart w pliku tar i umiecimy
nasz bibliotek w folderze innym ni domylny, bdziemy musieli doda do flagi

--with

ciek, aby rodowisko PHP mogo t bibliotek odnale. W powyszym

przykadzie taka sytuacja miaa miejsce w przypadku biblioteki apxs (Apache Exten-
sion Tool Synopsis), gdzie flaga

--with-apxs=/usr/local/apache/bin/apxs

okrelaa,

e wspomniana biblioteka jest skadowana w katalogu /usr/local/apache/bin/apxs.

8.

Pobranie i rozpakowanie plików ródowych nowej dystrybucji PHP
oraz przejcie do katalogu, w którym umieszczono rozpakowane pliki.
Kod ródowy PHP mona rozpakowa dokadnie tak, jak wczeniej
rozpakowalimy kod ródowy biblioteki. Jeli dysponujesz ju
utworzonym wczeniej drzewem kodu PHP, moesz je wykorzysta ,
jednak w takim przypadku koniecznie uyj polecenia

make clean

.

9.

Skopiowanie polecenia

configure

utworzonego wczeniej w pliku

tekstowym, wklejenie go w wierszu polece i nacinicie klawisza

Enter,

aby je wykona. W ten sposób ponownie skonfigurujemy rodowisko
PHP z now bibliotek i wszystkimi dotychczasowymi bibliotekami.

UWAGA

background image

48

R o z d z i a  2

10.

Kompilacja kodu ródowego PHP. Naley wykona kolejno polecenia

make

i

make install

. Warto si przygotowa na dugie oczekiwanie, a

wymienione polecenia odpowiednio skompiluj i zainstaluj wszystkie
komponenty PHP.

W razie dokonania jakichkolwiek zmian w plikach .ini (podobnych do tych poka-
zanych we wczeniejszej czci tego rozdziau) wprowadzone modyfikacje mog
zosta nadpisane ustawieniami domylnymi w czasie ponownego kompilowania
PHP. W takim przypadku warto do tych ustawie wróci, aby mie pewno, e
nasza konfiguracja nie zostaa zmieniona.

11.

Ponowne uruchomienie serwera Apache. Naley wykona polecenie

apachectl graceful

.

12.

Przetestowanie rodowiska PHP. W pierwszej kolejnoci warto uruchomi
skrypt Witaj wiecie!, aby sprawdzi , czy wanie zainstalowane rodowisko
dziaa waciwie. Nastpnie dobrze jest poeksperymentowa z wywoaniami
rozmaitych funkcji definiowanych przez biblioteki, aby mie pewno ,
e take nowe biblioteki nie stwarzaj niespodziewanych problemów.

Co moe pój nie po naszej myli?

Liczba problemów, które mog wystpi w czasie kompilacji, jest tak duga, e
omówienie ich wszystkich jest niemal niemoliwe. Chocia wiele bdów jest
do skomplikowanych, a znaczna ich cz jest cile zwizana z poszczególnymi
bibliotekami (i tym samym wymaga bardzo specjalistycznych porad), trzy typo-
we problemy wystpuj niemal zawsze.

Pierwszym powanym problemem, z którym moemy si zetkn , jest brak

zainstalowanych pakietów wytwarzania oprogramowania w pobranej dystrybu-
cji lub wersji. W takim przypadku bdziemy potrzebowali kompilatora jzyka C
i rozmaitych wersji „deweloperskich” wielu innych bibliotek potrzebnych do
skompilowania kodu.

Po drugie, moemy stan przed koniecznoci skonfigurowania rodowiska

PHP z wykorzystaniem parametru

--with

definiujcego wprost ciek do do-

czanej biblioteki, np.

--with-mcrypt=/usr/lib/mcrypt

.

Innym powszechnym ródem problemów s le skonfigurowane pakiety bi-

bliotek rozszerze. Jak ju wspomniano, bibliotek Mcrypt naley skonfiguro-
wa z flagami

--disable-nls --disable-posix-threads

; w przeciwnym razie stoso-

wanie tego pakietu moe prowadzi nawet do awarii serwera Apache. Take
inne biblioteki wymagaj do prawidowego funkcjonowania w rodowisku PHP
i na serwerze Apache pewnych dodatkowych zabiegów. Szczegóowych infor-
macji na ten temat naley szuka na stronach internetowych z najczciej zada-
wanymi pytaniami, stronach pomocy systemowej oraz w plikach README.

UWAGA


Wyszukiwarka

Podobne podstrony:
Ruby Praktyczne skrypty ktore rozwiaza trudne problemy rubyps
PHP 101 praktycznych skryptów wydanie drugie
PHP Praktyczne wprowadzenie R 4 Wstęp do programowania Proste skrypty PHP
PHP 101 praktycznych skryptów

więcej podobnych podstron