PHP 5.6 czeka za rogiem

php-logo

Już niebawem doczekamy się kolejnej wersji PHP. Na początku czerwca ukazała się ostatnia beta, tym samym zamknięto listę zmian funkcjonalnych. Przed nami już tylko wersje RC (Release Candidate).

Zmiany

Przede wszystkim wprowadzenie nowego operatora ** (do potęgi). Na pewno ułatwi to pisanie bardziej matematycznych aplikacji:

$a = 2**3; // $a = 2^3 = 8
$b = 2**3**2; // $b = 2^(3^2) = 512

Od teraz kodowanie UTF-8 jest uznawane za domyślne w ramach całego PHP (default_charset). Dodatkowo kodowanie ustawione za pomocą default_charset będzie automatycznie ustawiało kodowanie dla funkcji związanych z kodowaniem, np. htmlspecialchars(). Ustawianie kodowania dla iconv/mbstring zostsało uznane jako przestrzałe i zobaczymy deprecated.

W PHP 5.6 możemy wielokrotnie korzystać w ramach wywołania aplikacji z php://input, od teraz nie jest czyszczone po pierwszym użyciu. Chciałoby się rzec, dlaczego tak późno?

Na pewno spora część z Was korzysta z GMP (GNU Multiple Precision). Wcześniej aby dodać 2 liczby musieliśmy skorzystać z gmp_add, obecnie wystarczy użyć operatora +, który został przeciążony.

Jeśli chodzi o sprawy bezpieczeństwa, to została dodana funkcja hash_equals(), która ma za zadanie porównać 2 zakodowane hasła zawsze w tym samym, stałym czasie. Dodano również obsługę algorytmu hashującego gost-crypto.
Dodatkowo została mocno rozwinięta obsługa SSL/TLS w PHP 5.6 (m.in. łagodzenie ataków renegocjacji TLS, obsługa certyfikatów fingerprint). Jest tego naprawdę sporo.

Porządki

Od pewnego czasu zespół developerów PHP stara się pozbyć starych, problematycznych funkcji czy rozwiązań. I tak wraz z wersją PHP 5.6 otrzymamy błąd E_DEPRECATED, tzn. że w przyszłości zostaną całkowicie usunięte z języka:

  • możliwość włączenie w php.ini dyrektywy always_populate_raw_post_data
  • tym samym zostanie usunięta możliwość korzystania z $HTTP_RAW_POST_DATA, w takim wypadku powinniśmy użyć php://input

To nie wszystko, zmieni się również zachowanie niektórych składowych języka:

  • json_decode jest bardziej restrykcyjny, tzn. w przypadku użycia True zamiast true, False zamiast false, czy Null zamiast null zostanie rzucony błąd
  • zasoby GMP od teraz są zawsze obiektami
  • funkcje mcrypt wymagają od teraz podania prawidłowego klucza i IV
  • domyślnie wszystkie kodowane streamingi mają teraz domyślnie włączoną weryfikację połączenia

Wydajność

LornaJane po wydaniu PHP 5.6 beta2 przeprowadziła kilka testów wydajności środowisk, od wersji 5.3 do 5.6. Wykorzystała do tego bench.php:

PHP 5.6 Performance

Oczywiście, jeśli nadal korzystacie z PHP 5.3 migrujcie. Jest odczuwalne spore przyspieszenie, do tego dobrze w PHP 5.5 skorzystać z wbudowanej funkcjonalności opcache.

  • Pluto

    Super, na nowych serwerach będzie można sobie skompilować stabilna wersję. Na aktualnym Debianie Wheezy w repo jest 5.4, na Ubuntu LTS 14.04 jest 5.5, zaś 5.6 ukaże się w przyszłym roku w Debianie Jessie.

  • http://matipl.pl Mateusz Kamiński

    To jest dla mnie zawsze irytujące, że w paczkach są dość mocno stare wersje. Jeśli już nawet na obecną gałąź się przełączą to są zawsze w tyle z poprawkami, a ostatnio dość dynamicznie się rozwija PHP (stałe cykle wydawnicze).
    Ja z PHP 5.5 korzystam od wersji 5.5.4, od PHP 5.2 korzystam tylko z właśnie kompilowanych wersji.

    Jeśli będziesz robił przeskok pamiętaj, aby zapomnieć o APC. Niestety nie radzi sobie z nowym PHP. W prostych sprawach możesz korzystać z opcache, jeśli robisz chroot i masz te same ścieżki to wtedy lepiej z xcache.

  • Pluto

    Debian jest sporo w tyle za aktualna wersją, ale nie tylko przy PHP, oni bardzo ostrożnie podchodzą do aktualizacji, z tego Debian jest znany. W Ubuntu pakiety są świeższe. Niemniej jednak przy hostingu jak się chce pracować na w miarę aktualnym to trzeba kompilować. Pakiety „same” się aktualizują a kompilację trzeba powtarzać, szczególnie przy nowych wersjach na początku może to być bardziej konieczne ze względu na bezpieczeństwo i stabilność niż przy starszych.
    PHP 5.2 teraz to już tylko można sobie skompilować, ostatni 5.2.17 sam kompilowałem m.in. z APC i Suhishin’em na Debianie Squeeze i działa bez problemu z SuEXE w trybie Fast-CGI bo PHP-FPM jeszcze nie obsługuje. Kolega próbował zainstalować PHP 5.2.17 na Ubuntu 12.04 LTS i nie udało się…
    To XCache czy OPcache? :) Kiedyś eAccelerator, teraz jeszcze APC a niedługo … :)

  • http://matipl.pl Mateusz Kamiński

    XCache to nie jest nowy wynalazek, ale jedyny który działa stabilnie i uratował mi vhosty z podobnym contentem (ZF, WordPress etc.)

  • Sobak

    „Jeśli będziesz robił przeskok pamiętaj, aby zapomnieć o APC.”

    Część funkcjonalności APC (tych implementowanych w warstwie userland) można zastąpić tymczasowo rozszerzeniem APCu, które działa z PHP nowszymi niż 5.4.Cytując za autorem:

    „APCu only supports userland caching (and dumping) of variables, providing an upgrade path for the future.”
    https://github.com/krakjoe/apcu

  • http://matipl.pl Mateusz Kamiński

    Jasne, chociaż większość projektów wykorzystuje APC głównie na backendzie, a nie w samej aplikacji.
    XCache też daje dostęp do API, działa, minimalnie wolniej. Ale w takim wypadku lepiej skorzystać z memcached. Ale i tak wszystko zależy od architektury aplikacji.

  • winek

    W Debianie można podpiąć sobie repozytorium http://www.dotdeb.org/, w którym znajdują się nowsze wersje skompilowanych paczek. A w przypadku ciężkiej paranoi można zbackportować z sid/testing lub skompilować na własną rękę.

  • Pingback: Zapomnijcie o HHVM, nadchodzi PHPNG (aka PHP 6.0) | Mateusz matipl Kamiński

  • Pingback: Już w czwartek stabilna wersja PHP 5.6 | Mateusz matipl Kamiński