Вышел PHP 7

Говорим обо всем, что не имеет отношения к основной тематике сайта и форума. Установлена авточистка (400 дней).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
shvager
phpBB 1.4.4
Сообщения: 158
Зарегистрирован: 12.04.2008 9:20
Благодарил (а): 103 раза
Поблагодарили: 8 раз

Re: Вышел PHP 7

Сообщение shvager » 07.05.2016 7:54

Хотя можно просто выкинуть части, которые не найдёте в чистом phpBB.
В общем так. Нужно удалить файлы
Может кто делал правки для 3.1.9?

dnk
phpBB 2.0.4
Сообщения: 419
Зарегистрирован: 23.08.2006 19:34
Благодарил (а): 13 раз

Re: Вышел PHP 7

Сообщение dnk » 06.09.2016 21:59

Для phpBB 3.0.14
то же самое, что и указано здесь Вышел PHP 7
и вдобавок:

phpbb_captcha_gd_plugin.php

Найти:

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

function &get_instance()
	{
		$instance =& new phpbb_captcha_gd();
		return $instance;
	}
заменить на:

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

function &get_instance()
	{
		$instance = new phpbb_captcha_gd();
		return $instance;
	}
functions_content.php:

Найти:

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

// Be sure to not let the matches cross over. ;)

		// relative urls for this board
		$magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ieu';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_LOCAL, '\$1', '\$2', '\$3', '$local_class')";

		// matches a xxxx://aaaaa.bbb.cccc. ...
		$magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ieu';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";

		// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
		$magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ieu';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";

		// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
		$magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
	}

	return preg_replace($magic_url_match, $magic_url_replace, $text);
Заменить на:

не знаю что

Если установлен мод чата, то

\chat\include\cmgurl.php

Найти:

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

// Be sure to not let the matches cross over. ;)

		// matches a xxxx://aaaaa.bbb.cccc. ...
		$magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ieu';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";

		// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
		$magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ieu';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";

		// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
		$magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
		$magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
	}

	return @preg_replace($magic_url_match, $magic_url_replace, $text);
Заменить на:

не знаю что
Последний раз редактировалось dnk 06.09.2016 22:16, всего редактировалось 1 раз.

Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1657
Зарегистрирован: 02.11.2014 13:57
Благодарил (а): 264 раза
Поблагодарили: 219 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Sumanai » 06.09.2016 22:04

dnk, а проверять кто будет? Код не рабочий, не запускал, но простое удаление модификатора е код не починит.

dnk
phpBB 2.0.4
Сообщения: 419
Зарегистрирован: 23.08.2006 19:34
Благодарил (а): 13 раз

Re: Вышел PHP 7

Сообщение dnk » 06.09.2016 22:18

Sumanai писал(а): dnk, а проверять кто будет? Код не рабочий, не запускал, но простое удаление модификатора е код не починит.
Ну, правильно, нерабочий, сейчас проверил. Как тогда изменить?
Господи, как же эти PHP-шники надоели мне своим числом e

Отправлено спустя 12 минут 23 секунды:
короче, взять и поменять всю функцию, как в phpBB 3.1.9:

function make_clickable()

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

function make_clickable($text, $server_url = false, $class = 'postlink')
{
	if ($server_url === false)
	{
		$server_url = generate_board_url();
	}

	static $static_class;
	static $magic_url_match_args;

	if (!isset($magic_url_match_args[$server_url]) || $static_class != $class)
	{
		$static_class = $class;
		$class = ($static_class) ? ' class="' . $static_class . '"' : '';
		$local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';

		if (!is_array($magic_url_match_args))
		{
			$magic_url_match_args = array();
		}

		// relative urls for this board
		$magic_url_match_args[$server_url][] = array(
			'#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#iu',
			MAGIC_URL_LOCAL,
			$local_class,
		);

		// matches a xxxx://aaaaa.bbb.cccc. ...
		$magic_url_match_args[$server_url][] = array(
			'#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#iu',
			MAGIC_URL_FULL,
			$class,
		);

		// matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
		$magic_url_match_args[$server_url][] = array(
			'#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#iu',
			MAGIC_URL_WWW,
			$class,
		);

		// matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
		$magic_url_match_args[$server_url][] = array(
			'/(^|[\n\t (>])(' . get_preg_expression('email') . ')/iu',
			MAGIC_URL_EMAIL,
			'',
		);
	}

	foreach ($magic_url_match_args[$server_url] as $magic_args)
	{
		if (preg_match($magic_args[0], $text, $matches))
		{
			$text = preg_replace_callback($magic_args[0], function($matches) use ($magic_args)
			{
				$relative_url = isset($matches[3]) ? $matches[3] : '';
				return make_clickable_callback($magic_args[1], $matches[1], $matches[2], $relative_url, $magic_args[2]);
			}, $text);
		}
	}

	return $text;
}
вроде, пошло.

dnk
phpBB 2.0.4
Сообщения: 419
Зарегистрирован: 23.08.2006 19:34
Благодарил (а): 13 раз

Re: Вышел PHP 7

Сообщение dnk » 07.09.2016 1:48

Тут еще не все.
bbcode.php

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

@@ -200,7 +211,9 @@
 							'[/quote:$uid]'	=> $this->bbcode_tpl('quote_close', $bbcode_id)
 						),
 						'preg' => array(
-							'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"
+							'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#is'	=> function ($match) {
+								return $this->bbcode_second_pass_quote($match[1], $match[2]);
+							},
 						)
 					);
 				break;
Если установлен мод цитаты со ссылкой на пост и временем, то должно быть так:

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

case 0:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[/quote:$uid]'	=> $this->bbcode_tpl('quote_close', $bbcode_id)
						),
						'preg' => array(
													//-- Quote Post Back Link
						//-- Delete:
						/*
							'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"
						*/
						//-- Add:
							'#\[quote(?:="(.*?)")?(?:;p=([0-9]+))?:$uid\]((?!\[quote(?:=".*?")?(?:;p=([0-9]+))?:$uid\]).)?#is' => function ($match) {
								return $this->qpbl->bbcode_second_pass_quote($match[1], $match[2], $match[3]);
							},
						//-- End Quote Post Back Link.*?")?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"
						)
					);
				break;
в

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

foreach ($bbcode_ids as $bbcode_id)
		{
			switch ($bbcode_id)
номер case, соответствует вызову соответствующего bb-кода

например, если $bbcode_id=0 для quote (цитаты), то и case 0
Если spoiler идет под 13 номером, значит, и правка соответствующая должна быть в case 13

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

case 13:
					$this->bbcode_cache[$bbcode_id] = array(
						'str' => array(
							'[/spoiler:$uid]'	=> $this->bbcode_tpl('spoiler_close', $bbcode_id)
						),
						'preg' => array(
							'#\[spoiler(?:="(.*?)")?:$uid\]((?!\[spoiler(?:=".*?")?:$uid\]).)?#is'	=>function ($match) {
								return $this->bbcode_second_pass_spoiler($match[1], $match[2]);
							},
						)
					);
				break;
Далее:

/includes/message_parser.php

Тут здесь менять надо аккуратно:

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

// To perform custom validation in extension, use $this->validate_bbcode_by_extension()
 		// method which accepts variable number of parameters
 		$this->bbcodes = array(
Если spoiler идет под $bbcode_id=13, то должно быть так:

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

'quote'			=> array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?(?:;p=([0-9]+))?\](.+)\[/quote\]#is' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_quote($match[0], 'quote');
				}
                )),
			//-- End Quote Post Back Link
			'spoiler'			=> array('bbcode_id' => 13,	'regexp' => array('#\[spoiler(?:="(.*?)")?\](.+)\[/spoiler\]#uis' => function ($match) use($bbcode_class)
				{
					return $bbcode_class->bbcode_spoiler($match[0], 'spoiler');
				}
			)),
, а то там и для спойлера автор правки почему-то указал:

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

return $bbcode_class->bbcode_quote($match[0], 'spoiler');
Далее в

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

function bbcode_quote($in)
,

если установлен мод со ссылкой на пост и время, должно быть так:

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

$in = preg_replace_callback('#quote="(.*?)"p=([0-9]+)#i', function ($match) {
			return 'quote"' . str_replace(array('[', ']', '\\\"'), array('[', ']', '\"'), $match[1]) . '"]';
		}, $in);
в

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

function bbcode_spoiler($in)
должно быть так:

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

$in = preg_replace_callback('#spoiler="(.*?)"\]#i', function ($match) {
			return 'spoiler="' . str_replace(array('[', ']', '\\\"'), array('[', ']', '\"'), $match[1]) . '"]';
		}, $in);
,

а то автор фикса не указал ни черта, как править здесь.

Отправлено спустя 8 минут 9 секунд:
P.S.
Кстати, хорошее название темы
Вышел PHP7
...
Вышел месяц ... из тумана

Аватара пользователя
Webliberty
phpBB 2.0.2
Сообщения: 318
Зарегистрирован: 22.12.2011 11:03
Благодарил (а): 124 раза
Поблагодарили: 39 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Webliberty » 07.09.2016 12:09

Решил сделать правки, чтоб включить PHP7, но получил в итоге ошибку:

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

General Error
SQL ERROR [ mysql4 ]

mysql_connect function does not exist, is mysql extension installed? []

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
Подпись заверена нотариусом

dnk
phpBB 2.0.4
Сообщения: 419
Зарегистрирован: 23.08.2006 19:34
Благодарил (а): 13 раз

Re: Вышел PHP 7

Сообщение dnk » 07.09.2016 12:56

Webliberty писал(а): Решил сделать правки, чтоб включить PHP7, но получил в итоге ошибку:
Вышел PHP 7

Аватара пользователя
Webliberty
phpBB 2.0.2
Сообщения: 318
Зарегистрирован: 22.12.2011 11:03
Благодарил (а): 124 раза
Поблагодарили: 39 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Webliberty » 07.09.2016 14:06

dnk, спасибо!
Подпись заверена нотариусом

dnk
phpBB 2.0.4
Сообщения: 419
Зарегистрирован: 23.08.2006 19:34
Благодарил (а): 13 раз

Re: Вышел PHP 7

Сообщение dnk » 14.09.2016 16:23

Webliberty,
Рад был помочь.
И еще:

Правка phpBB 2.0.23 под PHP 7.0.x:

1) Применить полностью все правки под PHP 5.4, указанные в файле phpbb2 fixes.zip
phpbb2 fixes.zip
(17.35 КБ) 128 скачиваний
2) Используется ТОЛЬКО mysqli(), mysql() полностью вырезана! Поэтому, если еще где встретите что-то подобное:
mysql_query() или mysql_fetch_row() - все нужно переделать под mysqli_query() или mysqli_fetch_row()

config.php

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

$dbms = 'mysql';


заменить на:

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

$dbms = 'mysqli';
//Обязательно должен быть установлен фикс, содержащий файл db/mysqli.php

3) Никаких более магических цитат типа set_magic_quotes() или get_magic_quotes()

common.php и прочие файлы, где есть такое:

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

@set_magic_quotes_runtime(0);
4) includes/db.php

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

// Make the database connection.
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false); 
mysql_query("SET NAMES cp1251");
if(!$db->db_connect_id)
{
	message_die(CRITICAL_ERROR, "Could not connect to the database");
}
Заменить на:

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

// Make the database connection.
$db = new sql_db($dbhost, $dbuser, $dbpasswd, $dbname, false); 
mysqli_query($db->db_connect_id, "SET NAMES cp1251"); 
if(!$db->db_connect_id)
{
	message_die(CRITICAL_ERROR, "Could not connect to the database");
}
5) Больше никакой функции split (). Везде, где она встречается, ее нужно заменить на explode()

Например, viewtopic.php:

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

$title_search_array = ( !strstr($multibyte_charset, $lang['ENCODING']) ) ? split_words(clean_words('post', stripslashes($topic_title), $stopword_array, $synonym_array), 'search') : split(' ', $topic_title);
заменить на:

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

$title_search_array = ( !strstr($multibyte_charset, $lang['ENCODING']) ) ? split_words(clean_words('post', stripslashes($topic_title), $stopword_array, $synonym_array), 'search') : explode(' ', $topic_title);
6) Никаких более вещей типа ereg_replace(). Данные вещи нужно переделывать под preg_replace(). Часто достаточно просто заменить ereg на preg, но иногда, нужно дорабатывать конструкцию.

Например, еcли установлен мод календаря:

cal_lite_functions.php

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

if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
		// Need to strip out any TIME references so...
		$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
		while (list(,$val) = each ($timerefs))
			{
			$dateformat = ereg_replace($val, "", $dateformat);
			}
		// strip out any characters used for time
		$dateformat = ereg_replace('[:\.]', " ", $dateformat);
	}
менять на:

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

if ($span || ($myh=='00' && $myn=='00' && $mys=='00')) {
		// Need to strip out any TIME references so...
		$timerefs = array ('a','A','B','g','G','h','H','i','I','s');
		while (list(,$val) = each ($timerefs))
			{
			$dateformat = preg_replace('[:\.]', " ", $dateformat);
			}
		// strip out any characters used for time
		$dateformat = preg_replace('[:\.]', " ", $dateformat);
	}
7) Может встретиться вот такая мура:

Declaration of class pafiledb_categor::main($action) should be compatible with pafiledb_public::main($module_id = false) in pa_category.php on line 162

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

class pafiledb_category extends pafiledb_public
{
	function main( $action )
	{
Это из мода "Файловый архив pafiledb". Вот такую конструкцию нужно "утихомиривать" (// silenced). Решением стало открытие совершенно другого файла functions_pafiledb.php (из файлов данного мода) файла, содержащего:

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

function main( $module_id = false )
	{
		return false;
	} 
и заменой в нем:

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

function_public( $module_id = false )
	{
		return false;
	} 
8) Ну, и под конец, то самое число e в preg_perlace(). Везде, где есть вот такое:

в частности, bbcode.php:

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

$text = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
менять на:

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

 $text = preg_replace_callback("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#si",  function ($match) use ($uid) {
						return '[img:$uid]$match[1]' . str_replace(' ', '%20', $match[3]) . '[/img:$uid]';
					} , $text);
9) В файлах, если функция, идущая в классе имеет то же имя, что и класс, то функцию во всех файлах надо переименовать в function __construct()

В результате подобных манипуляций и правок на форуме, где установлено более 40 модов все открывается, но пока, почему-то не выводится текст в сообщениях самих постов в темах. Главное, в предварительном просмотре он выводится, при редактировании он выводится, после отправки поста - отправляется, но почему-то во viewtopic.php в теле сообщения всё пусто, хотя название и описание темы присутствует.
Вот сам хотел бы понять, почему.

Аватара пользователя
Gubkin
phpBB 2.0.14
Сообщения: 972
Зарегистрирован: 11.07.2015 6:10
Благодарил (а): 206 раз
Поблагодарили: 91 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Gubkin » 15.08.2017 18:37

переключил php c 5.6 на 7.0 выдало на форуме

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

General Error
SQL ERROR [ mysql4 ]

mysql_connect function does not exist, is mysql extension installed? []

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
расширение mysql точно включено, проверил
что ещё посмотреть ?
Ещё один тупой вопрос и будете забанены. К гуру надо приходить подготовленными, а не как Вы. Вчера создали форум с парой постов, а сегодня уже 20 вопросов )))

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14173
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 334 раза
Поблагодарили: 1456 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение rxu » 15.08.2017 18:38

Поменяйте в файле конфига mysql на mysqli.
Изображение

Аватара пользователя
Gubkin
phpBB 2.0.14
Сообщения: 972
Зарегистрирован: 11.07.2015 6:10
Благодарил (а): 206 раз
Поблагодарили: 91 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Gubkin » 15.08.2017 18:48

rxu,
в config.php сделать так ?
$dbms = 'phpbb\\db\\driver\\mysqli';
Ещё один тупой вопрос и будете забанены. К гуру надо приходить подготовленными, а не как Вы. Вчера создали форум с парой постов, а сегодня уже 20 вопросов )))

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14173
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 334 раза
Поблагодарили: 1456 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение rxu » 15.08.2017 18:52

Так. И очистить кэш.
Изображение

Аватара пользователя
Gubkin
phpBB 2.0.14
Сообщения: 972
Зарегистрирован: 11.07.2015 6:10
Благодарил (а): 206 раз
Поблагодарили: 91 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение Gubkin » 15.08.2017 18:57

rxu, крутяк, спасибо!
переехал на 7.0.21 :!:

Peak Memory Usage: 11.14 МБ
А был 5,5 :shock:

Отправлено спустя 2 минуты 28 секунд:
может что-то лишнее из модулей включено или наоборот нет кэширования ?
2017-08-15_145359.png
Ещё один тупой вопрос и будете забанены. К гуру надо приходить подготовленными, а не как Вы. Вчера создали форум с парой постов, а сегодня уже 20 вопросов )))

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14173
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 334 раза
Поблагодарили: 1456 раз
Контактная информация:

Re: Вышел PHP 7

Сообщение rxu » 15.08.2017 19:02

OPcache выключен зачем-то?
Изображение

Ответить

Вернуться в «Флейм»