Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

Приветствую.

Имею очень старую версию движка phpBB3 (3.0.1). По определенным причинам обновить нет возможности.

На хостинге был переход с php 5.3 (форум работал нормально) на php 5.6 - в логах начала появляться ошибка:

[11-Sep-2015 13:19:14 Europe/Helsinki] PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/lawportal/public_html/phpBB3/includes/bbcode.php on line 472

Вопрос - можно ли исправить эту ошибку простым редактированием кода?

P.S. Про то, что нужнообновиться и валиназадна5.3 - знаю.
Вопрос в том, можно ли решить проблему (1 ошибка) редактированием кода.

Спасибо.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Sheer »

Попробуй
Найти

Код: Выделить всё

        $tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $tpl); 
Заменить на

Код: Выделить всё

        $tpl = preg_replace_callback(
            '/{L_([A-Z_]+)}/',
            function ($matches) { global $user; return (!empty($user->lang[$matches[1]])) ? $user->lang[$matches[1]] : ucwords(strtolower(str_replace('_', ' ', $matches[1]))); },
            $tpl
        ); 
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

А где искать этот код?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba, приведённый Вами код не является ошибкой. Посему ничего править не нужно.
Просто старый движок (до phpBB 3.2) полагался на функцию (точнее на модификатор), которая в PHP 5.6 стала deprecated (устарела, выводится предупреждение), а в PHP 7 и вовсе была удалена.
Ошибку можно смело игнорировать или подавить соответствующими настройками.
Biba писал(а): 3.0.1
Версия 2008 года, так? И почему тема в поддержке другой ветки?
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

Хорошо, тогда вопрос, как решить проблему (временно, до обновления на новую версию).

1 вариант - откатиться назад (возможно, не на PHP 5.3, а на PHP 5.4 или PHP 5.5 - если там этот модификатор поддерживается)

2 вариант - отключить логирование на сервере (проблема именно из-за разрастания error.log - сайт работает нормально)
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba писал(а): отключить логирование на сервере
Можно выставить уровень ошибок без учёта E_DEPRECATED.
Найдите в Вашем файле Корень_конференции/common.php строчку error_reporting(E_ALL ^ E_NOTICE); и замените её на современный вариант:

Код: Выделить всё

if (!defined('E_DEPRECATED'))
{
    define('E_DEPRECATED', 8192);
}
$level = E_ALL & ~E_NOTICE & ~E_DEPRECATED;
error_reporting($level); 
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

LavIgor, большое спасибо. Ваш код действительно позволил убрать указанную выше проблему.

Но, после включения логирования выскачила новая ошибка (или предупреждение):

[13-Sep-2015 06:51:07 Europe/Helsinki] PHP Deprecated: Function set_magic_quotes_runtime() is deprecated in /home/lawportal/public_html/phpBB3/style.php on line 30
[13-Sep-2015 06:51:46 Europe/Helsinki] PHP Strict Standards: Non-static method utf_normalizer::nfkc() should not be called statically in /home/lawportal/public_html/phpBB3/includes/utf/utf_tools.php on line 1663

Не подскажите, что это значит и можно ли убрать?

Спасибо.
Перенесено из форума Поддержка phpBB 3.1.x в форум Поддержка phpBB 3.0.х 13.09.2015 4:27 модератором rxu

Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba, deprecated должны были уйти после правки выше.
Чтобы убрать E_STRICT, есть ещё одна версия кода выше.

Код: Выделить всё

if (!defined('E_DEPRECATED'))
{
    define('E_DEPRECATED', 8192);
}
$level = E_ALL & ~E_NOTICE & ~E_DEPRECATED;
if (version_compare(PHP_VERSION, '5.4.0-dev', '>='))
{
    // PHP 5.4 adds E_STRICT to E_ALL.
    // Our utf8 normalizer triggers E_STRICT output on PHP 5.4.
    // Unfortunately it cannot be made E_STRICT-clean while
    // continuing to work on PHP 4.
    // Therefore, in phpBB 3.0.x we disable E_STRICT on PHP 5.4+,
    // while phpBB 3.1 will fix utf8 normalizer.
    // E_STRICT is defined starting with PHP 5
    if (!defined('E_STRICT'))
    {
        define('E_STRICT', 2048);
    }
    $level &= ~E_STRICT;
}
error_reporting($level); 
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

LavIgor, спасибо за ещё одну версию кода - пока его не пробовал, сделаю это немного позже.

Предварительно хотел поинтересоваться - есть ли смысл вообще убирать ошибку strict или оставить как есть (она появляется редко, так что error.log не быстро разрастается).

Или может быть есть смысл просто откатиться на PHP 5.3? Есть ли какие-то минусы у версии 5.3 перед 5.6 (с учетом древней версии моего форума phpBB3 3.0.1)?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba писал(а): Есть ли какие-то минусы у версии 5.3 перед 5.6
Минус в том, что она не поддерживается и может содержать опасные баги.
Но это как использовать, опять же.

В любом случае старые версии phpBB не были заточены под новые версии PHP (которых просто ещё не было на тот момент).
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

А в плане критичности этих ошибок (в т.ч. E_STRICT) - стоит ли избавиться от них, перейдя на PHP 5.3 или они ни на что не влияют, кроме отображения в error.log ?

Спасибо.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba писал(а): стоит ли избавиться от них, перейдя на PHP 5.3
В PHP 5.3 E_STRICT не входит в E_ALL, поэтому по умолчанию эти ошибки подавляются. ;)
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

Ну то есть можно спокойно жить с этой ошибкой (E_STRICT) и оставаться на PHP 5.6 - она ни на что не влияет, правильно я понимаю?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 12 лет 4 месяца
Благодарил (а): 41 раз
Поблагодарили: 935 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение LavIgor »

Biba писал(а): с этой ошибкой (E_STRICT) и оставаться на PHP 5.6
Выше я приводил код подавления ошибок E_STRICT.
В принципе да, конкретно эти ошибки ни на что не влияют.
Будут ли другие при работе старого движка на новой версии PHP, сказать не могу.
Biba
phpBB 2.0.1
Сообщения: 251
Стаж: 15 лет 10 месяцев
Благодарил (а): 97 раз
Поблагодарили: 1 раз

Re: Ошибки в логах при переходе на PHP 5.6 с 5.3 у старой версии форума

Сообщение Biba »

В продолжение темы:

Исходные данные:
- форум phpBB3 версии 3.0.1 (как писал ранее - по определенным причинам обновить нет возможности)
- версия PHP 5.3

При попытке "Найти сообщения пользователя" (со страницы профиля) выдаёт следующие ошибки:

Код: Выделить всё

[phpBB Debug] PHP Notice: in file /includes/functions_content.php on line 242: preg_replace() expects parameter 4 to be long, string given
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3526: Cannot modify header information - headers already sent by (output started at /includes/functions.php:2948)
При этом сообщения находит, но кодировка неверная (и вверху страницы вылазят эти ошибки).

Подскажите, можно ли как-то решить данную проблему?
И чем она вызвана?

Спасибо :)
Последний раз редактировалось Sheer 16.12.2015 12:24, всего редактировалось 1 раз.
Причина: bb-код

Вернуться в «Поддержка phpBB 3.0.х»