в PHP

DLE + DLE Forum 2.6.1 = PHP 5.4.29

Те кто пользуются DLE Forum 2.6.1 знают, что его разработка и поддержка закончилась в далеком прошлом, но тем не менее это один из самых удобных форумов, особенно если он у вас стоит ещё с тех времен и просто напросто не хочется ничего переделывать.

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

Итак, пожалуй начну с того, что если у вас сервер на NGINX, вам пригодится альтернатива ЧПУ файла в Apache, он называется site.ru.conf, который должен лежать в папке /etc/nginx/site-aviable/, ЧПУ правила для него такие:

rewrite ^/forum/*$ /index.php?do=forum last;
rewrite ^/forum/category_([0-9]+)/*$ /index.php?do=forum&category=$1 last;
rewrite ^/forum/forum_([0-9]+)/*$ /index.php?do=forum&showforum=$1 last;
rewrite ^/forum/forum_([0-9]+)/([0-9]+)/*$ /index.php?do=forum&showforum=$1&cstart=$2 last;
rewrite ^/forum/topic_([0-9]+)/*$ /index.php?do=forum&showtopic=$1 last;
rewrite ^/forum/topic_([0-9]+)/last/*$ /index.php?do=forum&showtopic=$1&lastpost=1 last;
rewrite ^/forum/topic_([0-9]+)/([0-9]+)/*$ /index.php?do=forum&showtopic=$1&cstart=$2 last;
rewrite ^/forum/topic_([0-9]+)/reply/*$ /index.php?do=forum&act=_topic&code=reply&tid=$1 last;
rewrite ^/forum/forum_([0-9]+)/add/*$ /index.php?do=forum&act=add_topic&forum_id=$1 last;
rewrite ^/forum/search/*$ /index.php?do=forum&act=search last;
rewrite ^/forum/search/([0-9]+)-([^/]+)/([0-9]+)/*$ /index.php?do=forum&act=search&count_all=$1&search_text=$2&cstart=$3 last;
rewrite ^/forum/subscription/*$ /index.php?do=forum&act=subscription last;
rewrite ^/forum/getnew/*$ /index.php?do=forum&act=getnew last;
rewrite ^/forum/getnew/([0-9]+)/*$ /index.php?do=forum&act=getnew&cstart=$1 last;
rewrite ^/forum/warn/([^/]*)/*$ /index.php?do=forum&act=warn&user=$1 last;
rewrite ^/forum/warn/([^/]*)/([0-9]+)/*$ /index.php?do=forum&act=warn&user=$1&cstart=$2 last;
rewrite ^/forum/reputation/([^/]*)/*$ /index.php?do=forum&act=reputation&user=$1 last;
rewrite ^/forum/reputation/([^/]*)/([0-9]+)/*$ /index.php?do=forum&act=reputation&user=$1&cstart=$2 last;

# rewrite ^(.*)$ /engine/forum/textversion.php last;

Последний пункт закомментировать, для него правила не нужно, это простой .php файл. Кстати, отличный сервис для генерации правил из htaccess в nginx: http://winginx.com/ru/htaccess

Вторая проблема, это ошибки из-за использования в PHP коде старых функций и конструкций, таких как «&$», честно говоря это ПЗДЦ, кто такое вообще и раньше мог писать? Ну да ладно, здесь несколько правок в файлы необходимо внести.

1. В файле engine/forum/main.php найти

$stats_count = $this->forum->stats_count($forum['id'], &$this->forums_array);

удалить символ

&

перед

$this->forums_array

2. В файле engine/forum/classes/dle_forum_function.php найти

list($t,$p) = $this->stats_count($forum['id'], &$array, true);

так же удалить символ

&

3. В этом же файле найти

$list = $this->forum_list_build($id, '-1', '', '', &$forums, $optgroup);

то же удалить символ

&

Чуть ниже найти

$return = $this->forum_list_build($main_id, $row['id'], $marker, $return, &$forums, $optgroup);

опять же удаляем символ

&

А лучше всего воспользоваться поиском по файлам и везде удалить эти символы.

4. В файле engine/forum/sources/components/init.php закомментировать (или удалить) следущие строки

@session_register('forum_last');

и

@session_register('guest_forum_last');

После этого форум по идее должен завестись, но он начал ругаться на отсутствии активации лицензии, и какие-то ошибки в файле /engine/forum/sources/components/include/cp.php
Решил я их просто, закомментировал строку с ошибкой, у меня выдавало 27-ую строку, теперь она выглядит у меня так:

// $forum_hash = reset(explode('/',$forum_hash));$forum_hash = reset(explode(':',$forum_hash));

Нашёл функцию проверки активационного кода и обдурил её таким образом:

function check_key ($type = '')
{
global $forum_config;
$key = ($type == 'activate') ?'key': 'auth';
if ($this->get_hash_domain($type) == $forum_config[$key]){return TRUE;}
return TRUE; // поменял FALSE на TRUE
}

Смотрите комментарий в коде.

На этом проблемы с форумом не закончились, в заключительном этапе.
Ошибка вот в чем: когда в поиске на форуме вводишь то, что тебя интересует и допустим по указанному слову находит тем на 2 странице например. И если переходишь на следующую страницу, то происходит не совсем то что должно. Вторая страница не отображается, а так быть не должно. Наличие этой ошибки можете проверить прям на этом сайте, введя в поиск например слово «форум» и попробуйте перейти на 2ую страницу. Исправить это довольно просто.
Решение: В файле /engine/forum/sources/modules/search.php — находим следующую строку

$_GET['search_text'] = $_search_text[1];

(у меня это 24 строка в файле) и закомментируем ее двумя слешами или же вообще удаляем.
После этого поиск будет работать правильно.

Если у кого-то ещё есть какие-то замечания, дополнения или Вы отловили ещё какие-то баги связанные с новой версией PHP, предлагаю обсудить их в комментариях.

Всем спасибо. И вот вам интересное видео напоследок, реклама Mercedes с курицей Mercedes-Benz Intelligent Drive ‘Chicken’:

Оставить комментарий

Комментарии

  1. «Нашёл функцию проверки активационного кода»

    а в каком файле? переносил сайт на новый домен и столкнулся с проблемой активации, хотя форум у меня был даже лицензионный