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

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

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

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

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

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

Исправление ошибок при работе с MYSQL

Обновляемый список с возникающими проблемами при работе с MYSQL.

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

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

Windows 10 не видит привод оптических дисков

Столкнулся я с одной проблемой, после установки Windows 10 на ноутбуке - в Windows не было видно DVD привода, хотя сам привод прекрасно работал и определялся в BIOS. Просмотрев диспетчер устройств, я увидел, что привод висит не в DVD/CR-ROM приводах, а в Других устройствах со знаком вопроса. В...

Адаптация сайта под 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. При полном или частичном копировании материалов сайта - активная ссылка на сайт обязательна.