Назад | Перейти на главную страницу

Zend Framework на PHP 7

Недавно я обновил свой сервер, чтобы использовать 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';

Надеюсь, это поможет!