Переезд WordPress сайта на PHP 7.2

Судя по многочисленным статьям в интернете переезжать с PHP 5 на PHP 7 определенно стоит. PHP 7.2 чуть-чуть быстрее, чем PHP 7.1. PHP 7.1 чуть-чуть быстрее, чем PHP 7.0. А PHP 7.0 примерно в 2 раза быстрее чем PHP 5. Таким образом с помощью обновления версии PHP можно существенно снизить нагрузку на сервер, особенно если у вас достаточно нагруженные проекты.

Узнать свою версию PHP можно набрав в консоли сервера команду:

php -v

Сам движок WordPress последней версии поддерживает работу с PHP 7.2, поэтому при переезде проблемы могут возникнуть только с темой или плагинами WordPress, авторы которых не адаптировали их для работы с PHP 7.2. Как правило это старые темы и плагины, которые давно не обновлялись. У меня таких было несколько. К тому же у меня был самописный функционал, который также не вписывался в новые условия. Впрочем все удалось исправить.

Для отлавливания ошибок я использовал log-файл домена, который задан в конфигурации Nginx для домена в секции server вот такой директивой:

error_log /web/domain.ru/logs/error.log;

При открытии какой-либо страницы сайта, если в ней есть ошибки, то о них будет написано в файле /web/domain.ru/logs/error.log — новые записи появляются в конце.

Ниже приведены языковые конструкции в php-файлах сайта, которые необходимо заменить при переезде сайта с PHP 5 на PHP 7.2

В одном из моих самописных скриптов я использовал функцию strpos и на PHP 5 все работало как надо, а на PHP 7.2 все заработало нормально только после замены этой функции на mb_strpos. Видимо, PHP 7.2 строже работает с кодировками в строках.

$pos = strpos($out1, 'data-kor=', $k);

был заменен на:

$pos = mb_strpos($out1, 'data-kor=', $k);

В нескольких старых плагинах WordPress встретилась ошибка, когда параметр функции был указан без кавычек, после окружения его кавычками все наладилось.

function fndkor(par) {

был заменен на:

function fndkor('par') {

В теме одного из сайтов встретились сложносочиненные переменные с двумя знаками $$ в результате чего тему перекосило, после наведения порядка в вызове переменной тема выстроилась так, как было задумано.

$$value['id']

был заменен на:

${$value['id']}

Также в самописных скриптах я использовал прием параметров методом POST, в случае, когда параметр необязательный, то во избежание ошибок в error.log лучше устроить ему проверку на этапе приема.

$pr = $_POST['pr'];

был заменен на:

if (isset($_POST['pr'])) {$pr = $_POST['pr'];} else {$pr = '';}

Аналогично с приемом параметров методом GET:

$fi = (int)$_GET['fi'];

был заменен на:

if (isset($_GET['fi'])) {$fi = (int)$_GET['fi'];} else {$fi = 0;}

Обращение к базе данных в PHP 5 происходило с помощью устаревшей в PHP 7.2 процедуры. Такие обращения я использовал в своих самописных скриптах и пожалуй, адаптация в этой части была самой трудоемкой при переезде на PHP 7.2. Соединение с базой данных.

$connection = mysql_connect($host,$user,$pass);
if(!$connection) { die('Соединение с сервером MySQL неудачно:  '.mysql_error()); }
$select_db = mysql_select_db($db, $connection);
if(!$select_db) { die('Соединение с базой данных неудачно:  '.mysql_error()); }

был заменен на:

$mysqli = mysqli_connect($host,$user,$pass,$db);
if ($mysqli->connect_errno) {printf("Connect failed: %s\n", $mysqli->connect_error); exit();}

Установка кодировки при работе со строками в БД.

mysql_query('SET NAMES utf8 COLLATE utf8_general_ci');

был заменен на:

$mysqli->query('SET NAMES utf8 COLLATE utf8_general_ci');

Получение результата запроса к БД.

$result = mysql_query($query) or die(mysql_error() ." ". $query);

был заменен на:

$result = $mysqli->query($query); if (!$result) {printf("Errormessage: %s\n", $mysqli->error);}

Получение количества строк в результате запроса к БД.

$num_rows = mysql_num_rows($result);

был заменен на:

$num_rows = mysqli_num_rows($result);

Работа с рядом результата запроса к БД.

while ($row = mysql_fetch_assoc($result)) {

был заменен на:

while ($row = mysqli_fetch_assoc($result)) {

Освобождение результата запроса от ранее полученных данных.

mysql_free_result($result);

был заменен на:

mysqli_free_result($result);

Отключение от БД.

$close_result = mysql_close($connection);
if (false === $close_result) die ('Error database close');

был заменен на:

mysqli_close($mysqli);

Приведение строки в надлежащий вид перед записью в БД

$str = mysql_escape_string($str);

был заменен на:

// Здесь $mysqli - переменная подключения к БД
$str = mysqli_escape_string($mysqli, $str);

Кое-где я использовал функцию mysql_escape_string внутри своей функции, поэтому переменную соединения с базой данных нужно подключить внутри нее как глобальную.

function naborId($str) {
$str = mysql_escape_string($str);
}

был заменен на:

function naborId($str) {
global $mysqli;
$str = mysqli_escape_string($mysqli, $str);
}

Также при этом нужно учитывать, чтобы вызов функции naborId, в которой используется функция mysqli_escape_string, происходил после того как было установлено соединение с базой данных.

В некоторых своих скриптах я раньше использовал функцию mysql_escape_string вообще не обращаясь к базе данных, в этих местах я заменил ее функцией addslashes.

Поделиться статьей:  

Поделитесь своим мнением

Правила сообщений

Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Копирование материалов разрешено только с указанием источника и прямой индексируемой ссылкой на оригинал.
Яндекс.Метрика
© 2018 Хороший отзыв · Искусство выбирать · Лично · Разумно · Честно