Podczas pisania kodu PHP możemy zastosować elementy języka, które zostały wprowadzone w konkretnej wersji. Przez to, nasza aplikacja może nie działać w pełni poprawnie lub nawet w ogóle na serwerze ze starszą wersją PHP. W jaki sposób sprawdzić, czy środowisko jest odpowiednie dla naszego skryptu?
Opisane poniżej metody są często stosowane podczas instalacji popularnych systemów CMS, forum itd. Podczas tego procesu sprawdzana jest wersja PHP i w przypadku wykrycia zbyt starej, proces jest przerywany. Warto w ten sposób zabezpieczyć własne skrypty zwłaszcza, gdy nie oferują one pełnej zgodności wstecz i są rozpowszechniane publicznie.
Metody standardowe
Najprostszym sposobem na sprawdzenie wersji PHP jest wywołanie funkcji phpinfo()
. Jej wynikiem jest jednak ogromna liczba danych dotyczących konfiguracji całego serwera. Jeśli natomiast mamy dostęp do wywołania poleceń shell, to możemy skorzystać z jednej z dwóch poniższych możliwości:
php -v php -–version
Oczywiście nie jest to dobre rozwianie, gdyż nie zawsze jest taka możliwość. Po pierwsze musimy mieć dostęp do funkcji shell_exec()
lub exec()
a z tym może być kłopot. Po drugie do sprawdzania wersji PHP przyda się bardziej wyrafinowana metoda. Możemy to zrealizować na dwa sposoby: za pośrednictwem odpowiedniej funkcji oraz predefiniowanych stałych.
Funkcja phpversion()
Zwraca ona po prostu dostępną na serwerze wersję PHP. W przypadku podania jako parametr wywołania nazwy konkretnego rozszerzenia, efektem wywołania będzie jego „aktualny numerek”. Może to wyglądać następująco:
echo "Wersja PHP: ".phpversion(); echo "Wersja PDO MySQL: ".phpversion('pdo_mysql');
Efektem działania skryptu może być:
Wersja PHP: 5.3.4 Wersja PDO MySQL: 1.0.2
Stałe PHP_VERSION_*
Innym sposobem na określenie wersji PHP jest skorzystanie ze zmiennych predefiniowanych. Jest ich kilka, wszystkie poza pierwszą dostępne są od PHP 5.2.7 wzwyż:
PHP_VERSION
– (string) bieżąca wersja PHP przedstawiona w formacie GłównaWersja.MniejszaWersja.Wydanie[extra], np. 5.2.0[RC2]PHP_MAJOR_VERSION
– (integer) określa „główną wersję” (pierwsza liczba)PHP_MINOR_VERSION
– (integer) określa „mniejszą wersję” (druga liczba)PHP_RELEASE_VERSION
– (integer) określa wydanie (trzecia liczba)PHP_VERSION_ID
– (integer) pełna wersja przedstawiana jako liczba, przydatna do porównywania, np. 50304 (czyli 5.3.4)PHP_EXTRA_VERSION
– (string) dodatkowe określenie wydania np. dev lub RC1
Wywołanie poszczególnych zmiennych może wyglądać następująco:
echo "Wersja PHP: " . PHP_VERSION . "<br />"; echo "- głowna wersja: " . PHP_MAJOR_VERSION . "<br />"; echo "- mniejsza wersja: " . PHP_MINOR_VERSION . "<br />"; echo "- wydanie: " . PHP_RELEASE_VERSION . "<br />"; echo "Wersja PHP jako liczba: " . PHP_VERSION_ID . "<br />"; echo "Określenie wersji: " . PHP_EXTRA_VERSION . "<br />";
Wersja PHP: 5.3.4 - główna wersja: 5 - mniejsza wersja: 3 - wydanie: 4 Wersja PHP jako liczba: 50304 Określenie wersji:
Jeśli korzystamy z wersji PHP starszej niż 5.2.7, a chcemy mieć dostępne wszystkie powyższe zmienne, możemy je sami zdefiniować (cytując dokumentację):
if (!defined('PHP_VERSION_ID')) { $version = explode('.', PHP_VERSION); define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); } if (PHP_VERSION_ID < 50207) { define('PHP_MAJOR_VERSION', $version[0]); define('PHP_MINOR_VERSION', $version[1]); define('PHP_RELEASE_VERSION', $version[2]); // itd. }
Porównywanie wersji PHP przy pomocy version_compare()
Oczywiście stosując przedstawione metody, możemy porównać wersję PHP tak, jak to zostało już pokazane w powyższym przykładzie przy pomocy instrukcji if
oraz zmiennej PHP_VERSION_ID
. Możemy to także zrobić, korzystając ze specjalnie stworzonej w tym celu funkcji version_compare()
.
Może ona działać na dwa sposoby. W obu przyjmuje jako dwa pierwsze parametry wersje PHP do porównania w formacie X.X.X
. Gdy podamy tylko tyle, zwróci ona -1 w przypadku, gdy pierwsza podana wersja jest niższa od drugiej, 0 jeśli są takie same lub 1 gdy druga jest mniejsza.
Funkcja może także przyjąć trzeci, opcjonalny parametr, określający rodzaj porównania: <=
, le
, >
, gt
, >=
, ge
, ==
, =
, eq
, !=
, <>
, ne
. W takim przypadku zwróci ona true
gdy warunek jest spełniony lub, w przeciwnym wypadku, false
.
Sposób użycia został przedstawiony na poniższym przykładzie:
if (version_compare(PHP_VERSION, '5.0.0') >= 0) { echo 'Używasz PHP5. Twoja wersja to' . PHP_VERSION; } if (version_compare(PHP_VERSION, '5.3.8', '<=')) { echo 'Twoja wersja PHP nie jest najnowsza! Używasz :' . PHP_VERSION; }
Jeśli ostatni przykład jest nieaktualny, proszę zwrócić uwagę na datę powstania artykułu