PHP Fatal error: Call-time pass-by-reference has been removed in /var/www/user
При обновлении PHP с 5.3 на 5.4 некоторые клиенты, использующие старые версии популярных CMS столкнулись с подобной ошибкой. Подобный вызов функции с версии PHP 5.3 вызывал предупреждение на странице, а в версии 5.4 передача переменной по ссылке стала невозможна. Рассмотрим решение данной проблемы на примере одного из сайтов клиента:
Смотрим в журнал ошибок:
Или включаем вывод ошибок php в браузере:

Загружаем файл core.class.php на ПК, открываем текстовым редактором и находим в нем 541 строку:
Нам нужно убрать & из строки №541. Такой вызов функции более не поддерживается.
В итоге получается так:
Сайт снова работает! :)
Читать дальше
Смотрим в журнал ошибок:
[Thu Apr 03 10:48:17 2014] [error] [client XXX.XXX.XXX.XXX] PHP Fatal error: Call-time pass-by-reference has been removed in /var/www/userXXXXX/data/www/xx-xxx.org/phpshop/class/core.class.php on line 541, referer: http://xx-xxx.org/
Или включаем вывод ошибок php в браузере:

Загружаем файл core.class.php на ПК, открываем текстовым редактором и находим в нем 541 строку:
537 function setHook($class_name, $function_name, $data = false, $rout = false) {
538 if ((phpversion() * 1) >= '5.0')
539 return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
540 else
541 return $this->PHPShopModules->setHookHandler($class_name, $function_name, &$this, $data, $rout);
542 }
Нам нужно убрать & из строки №541. Такой вызов функции более не поддерживается.
В итоге получается так:
537 function setHook($class_name, $function_name, $data = false, $rout = false) {
538 if ((phpversion() * 1) >= '5.0')
539 return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
540 else
541 return $this->PHPShopModules->setHookHandler($class_name, $function_name, $this, $data, $rout);
542 }
Сайт снова работает! :)