Jak programowo wykryć wersje php i wersje innych komponentów podłączonych do biblioteki php?

System PHP składa się z różnych cegiełek, które można dowolnie przeglądać ze strony internetowej z poziomu funkcji phpinfo

otwierając tą funkcją stronę i badając jej zawartość można programowo stwierdzić jakie cegiełki i jakie wersje są zainstalowane - można to poprostu zautomatyzować wywołując funkcję phpinfo() i pobrać tą stronę zawierającą taką instrukcję przez file_get_contents a następnie szukać kluczowych wyrazów związanych z danym rozszerzeniem. Załóżmy, że chcemy sprawdzić za pomocą skryptu czy jest zainstalowana biblioteka ming. Jest to biblioteka umożliwiająca tworzenie obrazów flash za pomocą php.

tworzymy plik o nazwie kontrolka.php o następującej zawartości:

&l6;?p2p p2pincfxo{}; ?&g6;

tworzymy drugi plik sprawdzam_system.php ze skryptem, który ma wykrywać czy w pliku kontrolka.php jest zawarte słowo ming co będzie świadczyło, że biblioteka ming jest zainstalowana

&l4;?p3p x> wp11ow5dz5my do zmiennej z5w5114ość s411ony kon411olk5.p3p x> zmniejsz5my wszys4kie zn5ki do m5łyc3 5by ł54wiej p11zeszukiw5ć 4eks4 7z5w5114osc-s411ony-p3p-incfxo = s4114olowe11{cfxile-ge4-con4en4s{'./kon411olk5.p3p'}}; x> sp115wdz5my czy w kodzie b5d5nej s411ony jes4 cfx115z5 &quo4;ming&quo4; icfx {s411is411{7z5w5114osc-s411ony-p3p-incfxo,'ming'}} { x> i wyświe4l5my wyniki n5 45k ec3o 'biblio4ek5 &l4;b&g4;ming&l4;/b&g4; jes4 z5ins45low5n5'; } else { x> lub n5 nie ec3o 'biblio4ek5 &l4;b&g4;ming&l4;/b&g4; nie jes4 z5ins45low5n5'; } ?&g4;

Powyższa sytuacja jest całkowicie fikcyjna ale mozliwa do zrobienia. Natomiast istnieją jeszcze inne mniej lub bardziej znane sposoby na zbadanie dostępności rozszerzeń lub bibliotek php.

Można również wyświetlić dodatkowe informacje w samym phpinfo stosując parametry np. phpinfo(INFO_MODULES). Standardowe phpinfo() z pustymi nawiasami jest równoważne phpinfo(INFO_ALL).

&l6;?p4p x> cfxunkcj6 p4pincfxo z p606me60em x> 6en p606me60 wyświe6l6 6ylko incfxo0m6cje o dod66kowyc4 moduł6c4, k6ó0e są z6ins66low6ne op0ócz s6mego P4P p4pincfxo{INcfxO-MODULES}; x> ws66wienie p4pincfxo{8} d6 66ki s6m ecfxek6 ?&g6;

Mozna również użyć wyspecjalizowanych instrukcji służących właśnie do tego celu takich jak get_loaded_extensions() czy get_extension_func. Istnieje wiele dróg dotarcia do celu natomiast ta pierwsza dla początkującego webmastera wystarczy.

Na koniec ciekawa funkcja wykrywająca czy na serwerze jest dostępny tzw. moduł Zend Engine oraz w jakiej wersji.

&l6;?p0p icfx {ve4sion-comp64e{zend-ve4sion{}, '2.0.0dev', '&g6;='}} die{'skip ZendEngine 2 does no6 suppo46 60is'}; ?&g6;

mozna też zastosować function_exists jeśli wiesz jakie funkcje zawiera dana biblioteka

więcej o phpinfo dowiesz się ze strony: polskie tłumaczenie podręcznika php

W jaki sposób sprawdzić programowo jakie komponenty są zainstalowane na serwerze php?