Web Design Blog / Programowanie:

Aktualizacja PHP – zalety, jak zmienić wersję PHP?

Data publikacji: 8 listopada 2019

Po ponad dziesięciu latach internetowy język PHP (czyli z ang. PHP Hypertex Preprocessor) przeżył swój prawdziwy renesans. Od 2015 roku jest dostępna wersja siódma tego najpopularniejszego języka wykorzystywanego do programowania back-endu aplikacji internetowych.

Aktualizacja ta przynosi wiele różnorakich zmian. W tym artykule prześledzimy jakie są to zmiany i skąd się bierze najważniejsza zaleta wykorzystywania wersji PHP 7 w istniejących aplikacjach – chodzi oczywiście o duży skok wydajności który przekłada się na mniejsze obciążenie serwera i szybsze działanie aplikacji.

Dużo lepsza wydajność – skąd ta różnica?

W przypadku omawiania różnic pomiędzy PHP5 a PHP7 najczęściej wymieniana jest ta związana z wydajnością. To zrozumiałe, jest to bowiem bardzo korzystna zmiana, tym bardziej, że przyspieszenie będzie odczuwalne zarówno w aplikacjach napisanych w starej wersji PHP, które uruchamiamy w PHP 7.

Wydajność PHP 7 w stosunku do wersji PHP 5 - wykres

To brzmi wspaniale ale skąd ta różnica? Różnica w wydajności bierze się z bardzo prostego mechanizmu o nazwie Dead Code Elimination, czyli eliminacja martwego kodu. Został on wprowadzony w PHP 7.2 wzwyż. Optymalizacja interpretacji kodu polega na tym, że ignoruje ona instrukcje, które nie mają rzeczywistego wpływu na program. Najlepiej pokazać to wszystko na przykładzie:

function fn(){
   $a = 1;
   return 0;
}

W wersjach wcześniejszych niż 7.3, przypisanie liczby 1 do zmiennej $a zostanie faktycznie wykonane przez procesor. W PHP 7.3 instrukcja ta zostanie całkowicie pominięta.

Pamiętajmy przy tym, że w PHP zmienna $a jest zawsze lokalna jeżeli nie posłużono się instrukcją globals.

Ta zdawałoby się mała różnica w aplikacjach większej skali potrafi zaoszczędzić nawet około 50% czasu potrzebnego na wykonanie się kodu.

Deklaracje typów dla zwracanych wartości

W starszych wersjach PHP nie mamy możliwości zdefiniowania typu zwracanego przez funkcję lub metodę. W niektórych przypadkach, taka sytuacja mogła stanowić sporą wadę. Nie można łatwo zapobiec zwracania niechcianych typów i trudniej śledzić błędy. W PHP 7 można bez problemu zdeklarować typ zwracanych wartości przez funkcje i metody. Dostępne są cztery typy zwracanych wartości:

  • bool,
  • int,
  • string,
  • float.

Przykład:

<?php
   function suma($a, $b): float {
      return $a + $b;
   }

Wsparcie 64-bit

Nawet jeżeli dysponowaliśmy 64-bitowym systemem operacyjnym i sprzętem, PHP 5 nie oferował obsługi 64-bitowych liczb całkowitych oraz dużych plików. Wszystko z powodu podstawy PHP napisanej w C. W PHP7 jest prawdziwe wsparcie dla 64-bit co pozwoli wykonywać operacje możliwe w 64-bitowych architekturach systemu.

Obsługa błędów

Jeśli rozumiesz różnicę między błędem a wyjątkiem, wiesz, jak bardzo trudne było radzenie sobie z błędami krytycznymi w PHP 5. W PHP7 ułatwiono ten proces, ponieważ zastąpiono kilka poważnych błędów wyjątkami, które można rozwiązać w kodzie. Jest to możliwe dzięki wprowadzeniu nowych obiektów wyjątku silnika PHP.

Klasy anonimowe

W PHP 5 można było pisać kod całkowicie zgodny z paradygmatem obiektowym. Niektóre bardzo popularne konstrukcje znane z innych modnych języków programowania takich jak Java czy C# nie były możliwe do wykorzystania. Jedną z takich funkcji jest klasa anonimowa.

Klasa anonimowa jest przydatna w przypadku, gdy nie trzeba jej wykorzystywać więcej niż raz i nie trzeba jej dokumentować.

PHP 5:

class Logger {
     public function log($msg){
         echo $msg;
     }
 }
$util->setLogger(new Logger());

PHP 7:

$util->setLogger(new class {
    public function log($msg){
        echo $msg;
    }
});

Spaceship operator <=> operator statku kosmicznego

Wspomniana w ramach czystej ciekawostki instrukcja, która jest idealnym przykładem cukru syntaktycznego. Cukier syntaktyczny lub lukier składniowy (ang. syntactic sugar) to instrukcja która realizuje zazwyczaj prostą operację, którą łatwo uzyskać za pomocą kilku innych. Wprowadza się je do języków programowania aby zwiększyć czytelność i ułatwić pracę programiście.

PHP5:

function sortuj ($a,$b){
        if ($a>$b)
            return 1;
        else if ($a==$b)
            return 0;
       else
            return -1;
    }

PHP7:

function sortuj ($a,$b){
       return $a < = > $b;
    }

Zalety aktualizacji PHP

  • dużo większa wydajność dzięki optymalizacji polegającej na ignorowaniu instrukcji niemających wpływu na program,
  • możliwość wykorzystania nowych rozwiązań zwiększającą czytelność kodu,
  • łatwiejsza nauka, możliwość wykorzystania przyzwyczajeń z programowania Java i C# (dodanie funkcji lambda, deklaracje typów itd.),
  • zwiększone bezpieczeństwo (usunięcie z PHP problematycznych instrukcji np. uniemożliwiono dodawanie własnej soli do funkcji password_hash()).

Wady aktualizacji PHP

Nie są to wady samego PHP, ale aktualizacja interpretera w starszych aplikacjach (napisanych w PHP 5 i wcześniejszym) może przysporzyć niepotrzebnego kłopotu i frustracji. Jeżeli aplikacja nie jest kompatybilna z PHP7 należy po prostu ten temat odpuścić do następnej aktualizacji strony lub aplikacji – nic nie jest wieczne. Przeróbka kodu polegająca na tym aby był kompatybilny z PHP7 jest możliwa w stosunkowo prostych aplikacjach.

  • brak 100% kompatybilności (istniejące aplikacje mogą przestać działać jeżeli wykorzystano zdeprecjonowane funkcje),
  • konieczność zmiany kilku przyzwyczajeń,
  • starsze frameworki (np. Kohana) nie są kompatybilne z PHP7, próby naprawy mogą być uciążliwe i nieopłacalne.

Rozwiązywanie najczęstszych problemów po aktualizacji PHP do wersji 7

MySQL

Jeden z najczęstszych mitów dotyczących aktualzacji PHP5 do PHP7 głosi, że w PHP7 musimy korzystać z PDO. Nie jest to prawda, wystarczy instrukcję mysql_ podmienić na mysqli_ i dodać obiekt połączenia jako pierwszy argument.

Jeżeli w PHP5 mamy taki kod:

$connection = mysql_connect( 'host', 'username', 'password');
$database = mysql_select_db( 'database');

W PHP7 wystarczy tak naprawdę drobna modyfikacja:

$connection = mysqli_connect( 'host', 'username', 'password', 'database');
 $database = mysqli_select_db($connection, 'database');

Dodanie „i” do słów kluczowych sprawdza się także w innych przypadkach:

MySQLMySQLi
mysql_affected_rowsmysqli_affected_rows($connection)
mysql_closemysqli_close($connection)
mysql_data_seekmysqli_data_seek $result, $offset)
mysql_errnomysqli_errno($connection)
mysql_errormysqli_error($connection)
mysql_fetch_arraymysqli_fetch_array($result, $type)
mysql_fetch_assocmysqli_fetch_assoc($result)
mysql_fetch_lengthsmysqli_fetch_lengths($result)
mysql_fetch_objectmysqli_fetch_object( $result, $class, $params)
mysql_fetch_rowmysqli_fetch_row($result)
mysql_field_seekmysqli_field_seek($result, $number)
mysql_free_resultmysqli_free_result(result)
mysql_get_client_infomysqli_get_client_info($connection)
mysql_get_host_infomysqli_get_host_info($connection)
mysql_get_proto_infomysqli_get_proto_info($connection)
mysql_get_server_infomysqli_get_server_info($connection)
mysql_infomysqli_info($connection)
mysql_insert_idmysqli_insert_id($connection)
mysql_num_rowsmysqli_num_rows($result)
mysql_pingmysqli_ping($connection)
mysql_querymysqli_query($connection, $query)
mysql_real_escape_stringmysqli_real_escape_string($connection)
mysql_select_dbmysqli_select_db($connection, $database)
mysql_set_charsetmysqli_set_charset($connection, $charset)
mysql_statmysqli_stat($connection)
mysql_thread_idmysqli_thread_id($connection)

Funkcje zdeprecjonowane

W PHP7 nie wykorzystamy pewnych funkcji znanych z PHP5, tutaj znajduje się cała lista funkcji, które nie będą się wykonywać i wygenerują błąd: https://www.php.net/manual/en/migration70.deprecated.php

Aktualizacja PHP na serwerze VPS (i serwerach dedykowanych)

Jeżeli dysponujemy Linuxowym serwerem aktualizacja sprowadza się do wpisania kilku komend w konsoli.

sudo apt update
sudo apt upgrade
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.3    (dla Apache)

Możemy sprawdzić za pomocą komendy php -v czy instalacja przebiegła poprawnie.

Za pomocą komendy sudo apt install php7.3-nazwa_rozszerzenia instalujemy rozszerzenia np:

sudo apt install php7.3-common php7.3-mysql php7.3-xml php7.3-xmlrpc php7.3-curl php7.3-gd php7.3-imagick php7.3-cli php7.3-dev php7.3-imap php7.3-mbstring php7.3-opcache php7.3-soap php7.3-intl -y

Po wszystkim przydatna może być edycja pliku PHP.ini

sudo nano /etc/php/7.3/fpm/php.ini

Aktualizacja PHP w cPanel

Tutaj sprawa jest prosta, wybieramy Oprogramowanie >> Zmiana wersji PHP. Po wybraniu wersji możemy ustawić tę wersję PHP jako bieżącą. Za pomocą checkboxów możemy włączać dowolne rozszerzenia.

Aktualizacja PHP w hostingu Home

Zmiana wersji PHP w hostingu home jest możliwa za pomocą .htaccess:

<FilesMatch "\.php$">
SetEnv CGI_HANDLER php73
</FilesMatch>

Plus jest taki, że możemy zmieniać wersję PHP w zależności od konkretnego katalogu.

Aktualizacja PHP w hostingu Nazwa

Zmiana wersji PHP w nazwie jest możliwa za pomocą panelu Active.admin. Przechodzimy do Ustawienia >> Ustawienia WWW PHP.

W wygodnej liście rozwijalnej możemy wybrać najnowszą wersję PHP.

Aktualizacja PHP w hostingu OVH

W OVH możemy wykorzystać podobny trick jak w Home z tą różnicą że nie tworzymy pliku .htaccess a specjalny .ovhcontrol

W pliku tym nalezy dodać następujące wartości:

app.engine=php
app.engine.version=7.3

http.firewall=none
environment=production

container.image=stable

Opcja environment z wartością production włącza dodatkowy cache na poziomie PHP, który odciąża hosting i może przyspieszać wykonywanie się skryptów.

Jak sprawdzić wersję PHP i zainstalowane rozszerzenia?

Niezaleznie od hostingu, można stworzyć plik phpinfo.php i dodać w nim jednąinstrukcję:

<?php 
phpinfo();

To pozwoli zapoznać się z tabelką, którą nie raz pokazywałem na tym blogu:

Podsumowanie

Aktualizacja wersji PHP nie należy do skomplikowanych działań. Niektórzy dostawcy hostingu wirtualnego umożliwiają włączyć różne wersje PHP dla osobnych folderów co ułatwia utrzymywanie wielu różnych stron na jednym serwerze.

Źródła

https://www.php.net/manual/en/functions.returning-values.php

https://www.php.net/manual/en/language.oop5.anonymous.php

https://www.php.net/manual/en/migration70.new-features.php

Aktualizacja PHP – zalety, jak zmienić wersję PHP? Aktualizacja PHP – zalety, jak zmienić wersję PHP? 4.5 na 5 na podstawie 6 ocen Aktualizacja PHP – zalety, jak zmienić wersję PHP?


Komentarze

Brak komentarzy.

Dodaj swój komentarz