Jak sprawdzić i porównać wersje PHP?

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

Dodaj komentarz