Недавно я обновил свой сервер, чтобы использовать PHP 7.0. Однако после этого обновления я заметил, что мое веб-приложение не работает. Я заглянул в свой файл apache2 error.log и обнаружил эту ошибку:
Неустранимая ошибка PHP: Неперехваченная ошибка: класс Zend_Loader_Autoloader не найден
Когда я выполняю команду php -v в командной строке, это показывает следующее:
PHP 7.0.0-5 + deb.sury.org ~ trusty + 1 (cli) (NTS) Авторское право (c) 1997-2015 гг. PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2015 гг. Zend Technologies с Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, Zend Technologies
Похоже, фреймворк установлен, но только для cli (не для Apache).
Кто-нибудь знает, как включить его для Apache?
Спасибо.
Что ты видишь из php -v
не отражает рамки приложения вы используете (в данном случае Zend Framework). Проблема, скорее всего, кроется в используемом вами коде уровня приложения, который, похоже, является приложением Zend Framework 1.
У меня была очень похожая ошибка в приложении ZF1, которое использовало Doctrine для своего уровня ORM. В загрузчике классов Doctrine мне пришлось добавить дополнительную проверку PHP 7 для обработки некоторых способов, которыми PHP 7 изменяет интерпретацию переменных. Вокруг строки 224 из library/Doctrine/Common/ClassLoader.php
, Я изменился:
} else if ($loader[0]::$loader[1]($className)) { // array('ClassName', 'methodName')
return true;
}
кому:
} else if {
if (substr(PHP_VERSION_ID, 0, 1) == '7') {
$method = $loader[0] . '::' . $loader[1];
if ($method($className)) { // array('ClassName', 'methodName')
return true;
}
}
else {
if ($loader[0]::$loader[1]($className)) {
return true;
}
}
}
Не уверен, что это поможет решить вашу проблему. Если это не сработает, вы можете попробовать явно потребовать автозагрузчик Zend в своем PHP-скрипте (при условии, что library/Zend
находится в вашем пути включения):
require_once 'Loader/Autoloader.php';
Надеюсь, это поможет!