Professional Documents
Culture Documents
Praktyczne skrypty,
ktre oszczdz Twj czas
Autor: William Steinmetz, Brian Ward
Tumaczenie: Mikoaj Szczepaniak
ISBN: 978-83-246-1851-4
Tytu oryginau: Wicked Cool PHP: Real-World Scripts
That Make Difficult Things Possible
Format: 80x235, stron: 248
Spis treci
WPROWADZENIE ....................................................................................... 9
1.
NAJCZCIEJ ZADAWANE YCIOWE PYTANIA SKRYPTY,
KTRE KADY PROGRAMISTA PHP CHCE (MUSI) ZNA ...................... 11
Skrypt nr 1: Doczenie innego pliku w formie czci danego skryptu ..................................12
Co moe pj 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 przywrcenia oryginalnej struktury ...........................................24
Co moe pj nie po naszej myli? ...................................................................................24
Skrypt nr 6: Sortowanie tablic wielowymiarowych ................................................................25
Doskonalenie tego skryptu ................................................................................................26
Skrypt nr 7: Tworzenie dla witryny internetowej szablonw Smarty ....................................26
Instalacja biblioteki Smarty .................................................................................................27
Krtki podrcznik Smarty ..................................................................................................28
Co moe pj 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 poszczeglnych ustawie ........................................................33
Skrypt nr 10: Raportowanie o bdach ...................................................................................35
Typowe komunikaty o bdach ..........................................................................................35
Spis treci
Skrypt nr 31: Podwjne sprawdzanie daty wyganicia wanoci karty kredytowej .............77
Stosowanie tego skryptu ....................................................................................................79
Skrypt nr 32: Sprawdzanie poprawnoci adresw poczty elektronicznej ..............................79
Skrypt nr 33: Sprawdzanie poprawnoci numerw 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 wyrazw ........................................................................86
Co moe pj nie po naszej myli? ...................................................................................87
Skrypt nr 36: Odnajdywanie podacuchw ..........................................................................88
Co moe pj nie po naszej myli? ...................................................................................89
Skrypt nr 37: Zastpowanie podacuchw ...........................................................................89
Co moe pj nie po naszej myli? ...................................................................................90
Skrypt nr 38: Odnajdywanie i poprawianie literwek za pomoc moduu pspell ..................91
Praca ze sownikiem domylnym .......................................................................................91
Dodawanie sownika niestandardowego do biblioteki pspell .............................................94
Co moe pj nie po naszej myli? ...................................................................................95
Skrypt nr 39: Wyraenia regularne ........................................................................................96
Podstawy wyrae regularnych .........................................................................................96
Sekwencje znakw specjalnych ..........................................................................................97
Repetytory wzorcw .........................................................................................................98
Grupowanie .......................................................................................................................99
Klasy znakw ......................................................................................................................99
Poczenie wszystkich omwionych elementw ...............................................................99
Dopasowywanie i wyodrbnianie tekstu za pomoc wyrae regularnych .....................100
Zastpowanie podacuchw 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 adresw URL na hipercza ..................................109
Skrypt nr 44: Usuwanie znacznikw jzyka HTML z acuchw .........................................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 znacznikw czasowych na podstawie acucha .............................................115
Tworzenie znacznikw 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
Spis treci
Spis treci
Spis treci
2
Konfigurowanie PHP
JAK
UWAGA
32
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.
Rozdzia 2
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 elementy wchodz w skad danej instalacji rodowiska PHP, mona wykorzysta
bardzo prosty skrypt. Moliwo uzyskiwania tego rodzaju danych jest o tyle niebezpieczna, e szeroki zakres prezentowanych informacji stanowi swoisty podrcznik dla potencjalnych atakujcych. Funkcja phpinfo() zdaje si mwi : 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 konfiguracji. Naprawd wszystko. Zwracane informacje nie ograniczaj si tylko do stanu poszczeglnych ustawie konfiguracyjnych PHP, pooenia pliku php.ini czy
wersji samego rodowiska PHP obejmuj take wersj serwera WWW, skompilowane rozszerzenia oraz dane interfejsu API serwera. Warto zwrci szczegln
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 potrzebnych informacji.
Skrypt nr 9: Odczytywanie
poszczeglnych ustawie
Czasem, kiedy wiemy, czego szukamy, stosowanie funkcji phpinfo() jest przesadne i niepotrzebne. Moemy na przykad by zainteresowani tylko sprawdzeniem, czy mechanizm magicznych cudzysoww jest wczony, lub okreleniem cieki doczania. Co wicej, funkcja phpinfo() w aden sposb nam nie
pomoe, jeli pisany skrypt zachowuje si inaczej w razie wczenia jakiego ustawienia i inaczej w sytuacji, gdy to ustawienie jest wyczone.
Aby uzyska warto okrelonego ustawienia konfiguracyjnego, naley uy
funkcji ini_get():
Konfigurowanie PHP
33
<?php
echo "Warto opcji register_globals: " . ini_get('register_globals');
?>
Wystarczy przekaza na wejciu funkcji ini_get() prawidow nazw parametru konfiguracji, a otrzymamy aktualne ustawienie tego parametru na biecym
serwerze. Opcja jest zwracana w formie zwykej wartoci, zatem mona j wywietli , 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
acuchw pustych, zatem jeli sprbujemy wywietli ustawienie "off" parametru register_globals, by moe otrzymamy nastpujcy komunikat:
Warto opcji register_globals:
34
Rozdzia 2
?>
Wczenie trybu raportowania o bdach powoduje, e PHP wywietla komunikaty jeszcze przed przetworzeniem dalszej czci danego programu. (Takie
rozwizanie uniemoliwia ustawianie ciasteczek w razie wystpienia bdu, zatem
nie powinnimy nawet prbowa zmienia wartoci ciasteczek po wczeniu tego
trybu).
Konfigurowanie PHP
35
36
Rozdzia 2
W razie potrzeby mona nawet wysya komunikaty diagnostyczne do dziennika systemowego lub wskazanego pliku parametrowi error_log naley wwczas przypisa odpowiednio warto syslog lub nazw pliku.
Pozostaje jeszcze kwestia naszego rodowiska wytwarzania, gdzie z reguy
chcemy uzyskiwa moliwie wiele komunikatw diagnostycznych. Po przypisaniu parametrowi display_errors wartoci On mona dodatkowo (w pliku php.ini)
ustawi struktur bitow w parametrze error_reporting (wicej szczegw na
ten temat mona znale w przykadowym pliku php.ini instalowanym wraz ze
rodowiskiem PHP). Jeli jednak chcemy uciszy jaki skrypt, ktry nieustannie
zasypuje nas tymi samymi komunikatami, moemy uy w jego kodzie nastpujcego wywoania funkcji:
error_reporting(0);
Konfigurowanie PHP
37
Parametr konfiguracyjny max_execution_time okrela maksymalny czas wykonywania skryptu przed jego automatycznym zakoczeniem. Nie naley jednak tego
parametru naduywa . Jeli dany skrypt dziaa kilka minut, to albo usprawiedliwia nas ogromna ilo przetwarzanych informacji (najpewniej zaczerpnitych
z bazy danych), albo nasz skrypt jest bardzo nieefektywny, albo korzystamy z
niewaciwego jzyka programowania.
38
Rozdzia 2
Konfigurowanie PHP
39
40
Rozdzia 2
Konfigurowanie PHP
41
42
Rozdzia 2
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';
}
?>
Konfigurowanie PHP
43
Nawet jeli korzystamy z wasnego serwera, ale nie potrafimy prawidowo zainstalowa niezbdnych rozszerze , warto zwrci si z prob o instalacj nowych
bibliotek do pracownikw wsparcia technicznego. W takim przypadku w razie niepowodzenia procesu instalacji technicy bd w stanie naprawi usterk (przynajmniej teoretycznie).
Instalacja rozszerze
za pomoc internetowego panelu sterowania
Dzierawione serwery czsto oferuj specjalne panele sterowania, za porednictwem ktrych moemy realizowa typowe zadania administracyjne (w tym
zadanie ponownego uruchomienia usugi Apache lub restartu caego serwera)
w oknie przegldarki internetowej.
Niektre panele sterowania oferuj nawet moliwo automatycznego kompilowania serwera Apache i rodowiska PHP wskutek zaznaczenia pl 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, ktra powoduje ponown instalacj serwera
Apache i rodowiska PHP wraz z wybranymi daniami.
Jeli Twj 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 instalacja tego rodowiska wraz z niezbdnymi rozszerzeniami. Dla programistw,
ktrzy nie maj dowiadczenia w roli administratorw systemw UNIX, ponowna
kompilacja rodowiska PHP czsto jest powanym wyzwaniem.
Najlepszym rozwizaniem jest przystpienie do eksperymentw z lokalnym
serwerem Apache z dala od docelowego rodowiska pracy aplikacji internetowej. Poniewa zmiany wprowadzane w konfiguracji pracujcego serwera mog
44
Rozdzia 2
Konfigurowanie PHP
45
46
Rozdzia 2
strony danych wygenerowanych przez t funkcj mona znale sekcj zatytuowan Configure Command i zawierajc tajemnicz list elementw
podobn do poniszej:
'./configure' '--with-apxs=/usr/local/apache/bin/apxs' '--with-xml'
'--enable-bcmath' '--enable-calendar' '--enable-ftp' '--enable-magicquotes' '--with-mysql' '--enable-discard-path' '--with-pear' '--enablesockets' '--enable-track-vars' '--enable-versioning' '--with-zlib'
Gdybymy chcieli ponownie zainstalowa rodowisko PHP w stanie, w ktrym znajduje si obecnie, dysponowalibymy gotowym poleceniem (a przynajmniej 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-magicquotes' '--with-mysql' '--enable-discard-path' '--with-pear' '--enablesockets' '--enable-track-vars' '--enable-versioning' '--with-zlib'
Konfigurowanie PHP
47
W razie dokonania jakichkolwiek zmian w plikach .ini (podobnych do tych pokazanych we wczeniejszej czci tego rozdziau) wprowadzone modyfikacje mog
zosta nadpisane ustawieniami domylnymi w czasie ponownego kompilowania
PHP. W takim przypadku warto do tych ustawie wrci, 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
48
Rozdzia 2