Похожие статьи

Исправляем ошибку ja_comment с PHP 7.2

После перехода на PHP 7.2, при администрировании ja_comment в Joomla появляется ошибка в строке 1157 Warning: count(): Parameter must be an array or an object that implements Countable ошибка проявилась из-за изменения поведения функции count() для неисчислимых элементов, в том числе пустых или несуществующих

[Hack] Один материал в нескольких категориях для Joomla 2.5 (мультикатегории)

Обратились ко мне в очередной раз помощью на тему мультикатегорий для Joomla 2.5, также как и в случае с мультикатегориями для Joomla 1.5, только заказчик...

[Hack] Один материал в нескольких категориях для Joomla 1.5 (мультикатегории)

Делал я как то сайт для одной компании, среди условий было использование движка Joomla и возможность размещения одной статьи в нескольких категориях, они почему то были уверены что в Joomla это есть. Для меня же это было первое знакомство с Joomla, поэтому не возражал, но практика показала...

Последние обновления

Исправляем ошибку ja_comment с PHP 7.2

После перехода на PHP 7.2, при администрировании ja_comment в Joomla появляется ошибка в строке 1157 Warning: count(): Parameter must be an array or an object that implements Countable ошибка проявилась из-за изменения поведения функции count() для неисчислимых элементов, в том числе пустых или несуществующих

Исправляем неподключающийся VPN в Windows 10

Приходится иногда сталкиваться с проблемой подключения VPN на компьютерах с Windows 10. Происходит это как правило после обновления релиза или после сброса всех сетевых настроек. При этом при попытке подключения VPN в логах Windows можно увидеть ошибку "The user SYSTEM dialed a connection named Home which has...

Не открывается gpedit.msc с сообщением "неопознаная ошибка"

Столкнулся с проблемой, когда не хотела открываться оснастка групповых политик (gpedit.msc) в Windows 10. И не зависимо от пользователя и прав выдавало сообщение "Не удалось открыть объект групповой политики на этом компьютере. Возможно, у вас недостаточно прав. Сведения: Неопознанная...

Адаптация сайта под PHP 5.4 и выше

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

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

php_value display_errors 1

А если и после этого будете видеть белий лист без ошибок, то добавьте в ваш стартовый файл следующий PHP код:

error_reporting  (E_ALL);

Теперь посмотрим на типовые ошибки, которые мы можем получить и как их исправлять:

Strict Standards: Non-static method CModule::_GetCache()

для решения этой проблемы нам надо объявить функцию _GetCache() статичной. Для этого лучше всего воспользоваться поиском файлов по содержимому и искать нам придется, в данном случае, следующее:

function _GetCache

когда найдём данную функцию, надо её заменить на

static function _GetCache

Function ereg_replace() is deprecated

меняем подобные функции

ereg_replace("lang=[^&]*&*", "", $QUERY_STRING);

на

preg_replace("/lang=[^&]*&*/", "", $QUERY_STRING);

Function eregi_replace() is deprecated

аналогично предыдущему, но с модификатором "i"

preg_replace("/lang=[^&]*&*/i", "", $QUERY_STRING);

Function ereg() is deprecated

меняем подобные функции

ereg("<script[[:space:]]+language[[:space:]]*=[[:space:]]*["\']*php["\']*[[:space:]]*>", $src);

на

preg_match("/<script[[:space:]]+language[[:space:]]*=[[:space:]]*["\']*php["\']*[[:space:]]*>/", $src);

Function eregi() is deprecated

меняем

eregi('<script[[:space:]]+language[[:space:]]*=[[:space:]]*["\']*php["\']*[[:space:]]*>', $src)

на preg_match с модификатором "i"

preg_match('/<script[[:space:]]+language[[:space:]]*=[[:space:]]*["\']*php["\']*[[:space:]]*>/i', $src)

Strict Standards: Only variables should be passed by reference

Ищем в указаном файле нужную строчку

CCurrency::GetList(($by="SORT"), ($order="ASC"));

и оставляем только сами переменные, а значение выносим выше

$by="SORT"; $order="ASC";
 CCurrency::GetList($by, $order);

Strict Standards: mktime()

ну тут всё просто, меняем везде функцию

mktime()

на

 time() 

Fatal error: Call-time pass-by-reference has been removed

здесь всё дело комбинации"&$". Суть в том, что использовать такую функцию при создании функции можно, а вот при обращении к функции нельзя.

То бишь амперсанды тут

function GetFilterTypeList(&$arrUSER)

мы оставляем, а вот тут

return CFormField::GetFilterTypeList(&$arrUSER);

надо убрать

preg_replace(): The /e modifier is deprecated

это, наверное, самая противная проблема, поскольку придется вместо прямой передачи в функцию, писать ещё одну функцию делающую это... таким образом все функции preg_replace с модификатором "e":

$str = preg_replace("#\x03([^\n\x03]+?)\x03#ies", "convert_to_mailto('\\1', '$link_class')", $str);

надо менять на

$str = preg_replace_callback("#\x03([^\n\x03]+?)\x03#is", function( $t ) use ($link_class) { return convert_to_mailto( $t[1], $link_class ); }, $str);

Отсутствие русского текста

С данной проблемой столкнутся все, у кого сайт работает в кодировке cp1251. Проблема тут в том, что начиная с PHP 5.4 функция htmlspecialchars() по умолчанию стала работать в кодировке UTF-8. Выходов в данной ситуации два:

1 - если почти все тексты сайта находятся в БД, а интерфейс сайта использует языковые файлы, то лучше всего перевести БД и языковые файлы интерфейса в utf8.

2 - заменить в коде сайта все функции  htmlspecialchars(), на свою  собственную htmlspecialchars1251()

 function htmlspecialchars1251($string, $flags=ENT_COMPAT)
{
return htmlspecialchars($string, $flags, "cp1251");
}

Статья обновляемая...

 
© 2016 Legion Leonhart. При полном или частичном копировании материалов сайта - активная ссылка на сайт обязательна.