Zend Framework на PHP 7

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

Спасибо.

1
задан 16 December 2015 в 13:17
1 ответ

То, что вы видите с php -v не отражает фреймворк приложений , который вы используете (в данном случае - Zend Framework). Скорее всего, проблема заключается в коде запускаемого приложения, которое выглядит как приложение Zend Framework 1.

У меня была очень похожая ошибка в приложении ZF1, использующем Doctrine для своего ORM-уровня. В загрузчике класса Doctrine мне пришлось добавить дополнительную проверку, чтобы PHP 7 мог обрабатывать некоторые способы, с помощью которых PHP 7 изменяет интерпретацию переменных. Примерно в 224 строке библиотеки/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 скрипте (предполагая, что библиотека/Zend находится в вашем пути include):

require_once 'Loader/Autoloader.php';

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

.
2
ответ дан 3 December 2019 в 20:44

Теги

Похожие вопросы