Переход на PHP 5.3 ошибки в Joomla 1.5

Вчера столкнулся с проблеммой: хостер перешел на более новую версию РНР 5.3, в результате чего на сайте (cms Joomla 1.5) перестали работать менюшки. Выдавало ошибку в функции call_user_func_array что-то вроде того что ожидается в качестве параметра ссылка. Ну сначала поругался с хостерами и хотел уже переходить на другой хостинг, а потом решил все же покопаться в коде. И как ни странно проблему смог устранить.
Начну по порядку. Зашел на ua.php.net и там прямым текстом сказано:
"Поведение функций при передаче параметров по значению, в которых параметры передаются по ссылке, было изменено. Там, где прежде функция принимала параметр по значению, сейчас генерируется фатальная ошибка. Любой прежний код, который передает константы или значения в качестве параметров функциям, которые ожидают ссылки, необходимо будет изменить, чтобы присвоить значение переменной перед вызовом функции."
В общем читал я читал этот обзац несколько раз... вроде бы все понятно, но как это сделать непонятно. Начал гуглить... и нагуглил таки ответ (спустя несколько проб и ошибок)
В общем вот решение:
call_user_func_array($callback, makeValuesReferenced($args));

function makeValuesReferenced($arr){
    $refs = array();
    foreach($arr as $key => $value)
        $refs[$key] = &$arr[$key];
    return $refs;
}


либо если не удается подставить это через функцию (у меня такое тоже встречалось) то просто можно переделать сам код программы примерно так:



        $refs = array();
     foreach($args as $key => $value)
        $refs[$key] = &$args[$key];
   
call_user_func_array($callback, $refs);

Вот и все. Теперь старая джумла работает. Но конечно все равно это костыли и надо переходить похоже на более свежую версию 2.5

Если есть вопросы, чем смогу - помогу. Задавайте в комментариях.

Comments

Popular posts from this blog

CSS Как прикрепить слой (div) к краю

MySQL - How to add JSON column type

Как сделать заголовок модуля активной ссылкой в Joomla 1.5