Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przechwycenie funkcji - debugowanie
Forum PHP.pl > Forum > PHP
szagi3891
Czy ktoś zna może sposób na przechwycenie wywołania funkcji (np. wbudowanej w php) ?

Zależy mi na tym aby daną funkcję (np. headers) przechwycić i logować jej wszystkie wywołania za pomocą np. debug_backtrace, która by mi udzieliła wszystkich informacji z którego miejsca została wywołana i z jakimi parametrami. Po zapisaniu informacji przekazywanie następowało by do pierwotnej funkcji. Taka informacja mogła by się przydać podczas debugowania skryptu.

Wertuje php.net oraz google i zaczynam tracić wiarę że taka możliwość istnieje.

Czy ktoś zna może sposób jak można tego dokonać ?
domis86
moze schakuj php? smile.gif
i po co Ci to w ogole?
szagi3891
Cytat(domis86 @ 16.06.2007, 00:46:29 ) *
moze schakuj php? smile.gif


Wszakże to grzechem jest ... smile.gif

Cytat(domis86 @ 16.06.2007, 00:46:29 ) *
i po co Ci to w ogole?


Wyobraź sobie że używasz jakiejś standardowej funkcji w wielu miejscach z których wiesz że jedna dostaje nieprawidłowy parametr i nie wiesz która to i chcesz ją namierzyć. A tak piszesz sobie swoją funkcję, lugujesz co trzeba i wywołujesz pierwotną funkcję smile.gif
domis86
moze tak:
zrób sobie klase powiedzmy o nazwie std, ktora zawiera magiczną metodę "__call"
i teraz metoda call ma dzialac mniej wiecej tak:
1.dostaje $name i $params
2.loguje sobie nazwe funkcji i parametry i co tam jeszcze chcesz
3.uruchamia funkcje o nazwie $name z paramatrami $params (uzywając np: call_user_func_array)
4. jeszcze moze cos logowac

i teraz jak chcesz logowac funkcje header to musisz wszystkie :
header(...)
zamienic na:
$std->header(...)

(replace all w edytorze aarambo.gif )
szagi3891
hehe, wydaje mi się że to samo równie dobrze można by osiągnąć tworząc funkcję header2(...) tongue.gif

Właśnie tego replace all chciałbym uniknąć smile.gif

Chociaż wykorzystanie klasy w ten sposób wydaje się ciekawym pomysłem.
SirZooro
Spróbuj tego: http://pecl.php.net/package/intercept. Niestety obecnie jest to jeszcze wersja alpha, i trzeba to sobie samemu skompilować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.