Преминаване на сайт от PHP 5 на PHP 7

Тази публикация е най-подходяща за уеб разработчици по отношение на детайлите, но ще бъде полезна и за собственици на сайтове, които имат (custom) сайт писан по поръчка отдавна. Разглеждаме случай на преминаване от PHP версия 5.6 към PHP версия 7.3.

Защо да обновим версията на PHP?

Причините са няколко:

  1. Най-съществената е, че PHP версия 5.6 беше спряна от поддръжка на 1 януари 2019 г. Същото се отнася дори за относително новата PHP версия 7.0. В момента активно се поддръжат версии 7.3 и 7.2. Версия 7.1 все още се поддръжа но скоро ще бъде спряна от поддръжка. Повече информация може да видите в таблицата на PHP версиите.
  2. Скоростта на версия PHP 7.3 спрямо версия PHP 5.6 е осезаемо по-добра. Вашият сайт ще работи много по-бързо отпреди.
  3. Подобрения в сигурността на сайта.
  4. Рано или късно ще ви се наложи. Не чакайте сайтът ви да спре да работи, за да мислите за обновяване на версията на PHP!

Как да вдигна версията на PHP?

Ако ползвате споделен хостинг, това е елементарно и става през хостинг панела cPanel, ако все пак имате затруднения помолете съпорта на хостинга.

Трябва да имате предвид, че ако вашият сайт е изцяло на WordPress и той е редовно обновяван, тогава е много лесно и може да вдигнете версията на PHP за целия сайт. Но ако вашият сайт е разделен на две: WordPress блог и основен сайт писан по поръчка (custom) на PHP 5 (или дори по-стара версия), тогава имате възможност да вдигнете версията до PHP 7, само на папката, в която е WordPress блога на сайта. Повече информация има в публикацията https://help.superhosting.bg/php5-linux-hosting.html

Ние не ви препоръчваме да оставяте стара версия на PHP и затова написахме тази подробна публикация, която да ви даде насоки, как да преминете към последната версия на PHP за целия сайт.

Какви проблеми мога да очаквам при преминаване към PHP7?

Проблемите идват от това, че някои функции на PHP във версия 7 са променени, а други напълно липсват. За съжаление липсва така наречената пълна обратна съвместимост (Backward compatibility) между тези версии, като това е направено в полза на подобряване на езика PHP.

По тази причина някои сайтове с много стар софтуер, които не са били обновявани с години, може да започнат да дават грешки или дори да спрат да работят, при преминаване към версия PHP 7.

Как да избегнем грешки при преминаване към PHP7?

Преди да вдигнете версията на PHP се уверете, че вашият сайт не използва PHP функции, който са променени или отстранени в новата версия на PHP. Това става най-лесно, като изтеглите по FTP файловете от уеб сървъра на вашия компютър и потърсите във файловете за някои функции.

Направете си резервно копие на файловете и продължете с промяна на функциите.

ВНИМАНИЕ! Съветваме ви да вдигнете тестово копие на сайта в друг хостинг акаунт, за да може да тествате дали сайтът ще работи без да прекъсвате работата на основния си сайт. Едва след като се уверите, че всичко е наред, може да презапишете файловете на основния ви работещ сайт. Ganbox не носи отговорност, за нанесени щети от следването на съветите в тази публикация!

Тук ще разгледаме само най-често срещаните промени с конкретни примери.

1) Функции за връзка с базата данни mySQL

$linkId = mysql_connect($host,$username,$password);

се замества с:

$linkId = mysqli_connect($host,$username,$password);

Функция:

mysql_select_db($database,$linkId);

заместваме с:

mysqli_select_db($linkId, $database);

разменени са местата на параметрите!

Най-често ползваната:

mysql_query($sql, $linkId);

се замества навсякъде с:

mysqli_query($linkId, $sql);

разменени са местата на параметрите!

 

Функция:

$rows = mysql_num_rows($res);

се замества с:

$rows = mysqli_num_rows($res);

Функция:

$rows = mysql_affected_rows($linkId);

се замества с:

$rows = mysqli_affected_rows($linkId);

Функция:

$arr = mysqli_fetch_assoc($res);

заместваме с:

$arr = mysqli_fetch_assoc($res);

По същия начин функция:

$arr = mysql_fetch_array($res);

заместваме с:

$arr = mysqli_fetch_array($res);

Функция:

mysql_close($linkId);

се замества с:

mysqli_close($linkId);

2) Класове на PHP

Ако ползвате обектно ориентирано програмиране (ООП), ще трябва да замените имената на едноимените конструктори на класовете със специалната функция __construct() – пише се с две долни тирета отпред. Например:

class Connection {

function Connection($host,$username,$password,$database) {

# connect to database

} // constructor

} // class

става:

class Connection {

function __construct($host,$username,$password,$database) {

# connect to database

} // constructor

} //class

 

3) Други функции на PHP

Други сравнително често срещани функции на PHP, които вече не работят на PHP 7 са:

3.1.) Функция split(), която навсякъде трябва да се смени с explode. Ако не бъде направено ще получавате грешката:

Call to undefined function split()

 

Например реда:

$domain=split("\.",$domain);

трябва да стане:

$domain=explode(".",$domain);

В първия случай има знак "" пред точката, защото е регулярен израз, но при explode не се налага да се ескейпват специалните символи.

3.2.) Функции започващи с ereg, например ereg(), ereg_replace(), ereg_match() и др.

Тези фукции се сменят със съответните си preg функции, като има лека промяна в регулярния израз в първия параметър, защото трябва да бъдат по Perl стандарта.

Например:

if( ereg("^-|-$",$domain) ) { # дали започва или завършва с тире

...

става:

if( preg_match("/^-|-$/",$domain) ) { # дали започва или завършва с тире

...

 

Пълен списък на променените функции има в тази страница http://php.net/manual/en/migration70.incompatible.php

След като промените всички нужни функции и направите тестове на тестов уеб сървър, качете файловете на уеб сървъра и вдигнете версията на PHP през cPanel.

Сайтът ви трябва да работи значително по-бързо отпреди.

Ако имате нужда от помощ с обновяване на версията на PHP и ускоряване на бързодействието на вашия сайт, може да се свържете с нас от страница Контакти.

Прочетена:1363
1 - лоша2 - слаба3 - средна4 - добра5 - отлична (2 гласа, оценка: 5,00 от 5. Моля изберете оценка!)
Loading...

Напишете коментар

споделиха