|
|
PHP (angielski akronim rekurencyjny, którego rozwinięcie to PHP Hypertext Preprocessor), pierwotnie nazwany Personal
Home Page - skryptowy język programowania, służący przede wszystkim do tworzenia dynamicznych stron WWW i wykonywany w
tym przypadku po stronie serwera, z możliwością zagnieżdżania w HTML (bądź XHTML). PHP jest podobny w założeniach do
dużo starszego mechanizmu SSI (Server Side Includes), jednak jest w stosunku do SSI nieporównanie bardziej rozbudowany.
Udostępniany jest na zasadach licencji open-source. Jego składnia bazuje na językach C, Java i Perl.
SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz
do umieszczania i pobierania danych z baz danych.
Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi
zarządzania bazą danych DBMS.
Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z
serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z
użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a.
Apache jest otwartym serwerem HTTP dostępnym dla wielu systemów operacyjnych (m.in. UNIX, GNU/Linux, BSD,
Microsoft Windows). Po angielsku słowo Apache wymawia się epaczi, co brzmi tak samo jak a patchy (server), co było
określeniem tego serwera we wczesnym stadium jego rozwoju w 1995 roku, kiedy był on głównie zbiorem poprawek (patch)
nałożonych na serwer HTTP o nazwie NCSA.
Apache jest najszerzej stosowanym serwerem HTTP w Internecie. W maju 2003 jego udział wśród serwerów wynosił 62%. W
połączeniu z interpreterem języka skryptowego PHP i bazą danych MySQL, Apache stanowi jedno z najczęściej spotykanych
środowisk w firmach oferujących miejsce na serwerach sieciowych.
|
Instrukcja declare służy do
ustawienia dyrektyw wykonawczych dla bloku kodu. Składnia
instrukcji jest podobna do składni innych struktur
kontrolnych:
Argument dyrektywa pozwala na
ustawienie zachowania się danego bloku declare. W chwili obecnej rozpoznawana jest
tylko jedna dyrektywa: ticks.
(Więcej informacju na temat dyrektywy
ticks w dedykowanym podrozdziale).
Kod zawarty w bloku instrukcje
będzie wykonywany. Sposób i poboczne efekty wykonania tego kodu
mogą zależeć od argumentu dyrektywa.
Tyknięcie (tick) jest zdarzeniem, które następuje po
każdych N niskopoziomowych
instrukcjach wykonywanych przez parser wewnątrz bloku
declare. Wartość parametru
N jest określana przez
umieszczenie wyrażenia ticks=N wewnątrz argumentu dyrektywa danego bloku declare.
Zdarzenie wywoływane na każde tyknięcie określa się przez
użycie funkcji register_tick_function(). Więcej
szczegółów znajduje się w poniższym przykładzie. Proszę
pamiętać, że z każdym tyknięciem może być wywoływane więcej
niż jedno zdarzenie.
Przykład 16-1. Profilowanie sekcji kodu
PHP
<?php // funkcja, która zapisuje czas jej wywołania
function profile ($wyrzuć = FALSE)
{
static $profile;
// zwróć tablicę czasów wywołania i wykasuj jej lokalną kopię
if ($wyrzuć) {
$temp = $profile;
unset ($profile);
return ($temp);
}
$profile[] = microtime ();
}
// ustal wskaźnik tyknięcia
register_tick_function("profile");
// zainicjowanie funkcji przed blokiem declare
profile ();
// wykonaj poniższy kod, generując tyknięcie co 2 instrukcje
declare (ticks=2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br />";
}
}
// Wyświetl dane przechowywane w profilerze
print_r (profile (TRUE)); ?> |
|
Powyższy przykład profiluje kod PHP wewnątrz bloku
"declare", zapisując czas wywołania co drugiej
niskopoziomowej instrukcji w bloku instrukcji. Informację tę
można wykorzystać do wykrycia fragmentów kodu wykonywanych w
zbyt wolnym tempie. Problem wyszukania takich fragmentów
można zrealizować na wiele sposobów, przy czym użycie tyknięć
jest najwygodniesze i najłatwiejsze do zaimplementowania.
Tyknięcia są doskonale przystosowane dla potrzeb
debugowania, implementacji prostej wielozadaniowości,
wykonywania operacji We/Wy w tle i wielu innych zadań.
Patrz także register_tick_function() i unregister_tick_function().
|