PHP 7 上的 Zend 框架

PHP 7 上的 Zend 框架

我最近将服务器升级为使用 PHP 7.0。然而,升级后,我注意到我的 Web 应用程序无法正常工作。我查看了 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,版权所有 (c) 1998-2015 Zend Technologies 与 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2015,由 Zend Technologies 提供

看起来框架已经安装了,但是只适用于 CLI(不是 Apache)。

有人知道如何为 Apache 启用它吗?

谢谢。

答案1

你所看到的php -v并不反映应用程序框架您正在使用(在本例中为 Zend Framework)。问题更可能出在你正在运行的应用程序级代码上,该代码似乎是 Zend Framework 1 应用程序。

我在使用 Doctrine 作为其 ORM 层的 ZF1 应用程序中遇到了非常类似的错误。在 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;
        }
    }
}

不确定这是否能具体解决您的问题。如果这不起作用,您可以尝试在 PHP 脚本中明确要求 Zend 自动加载器(假设它library/Zend在您的包含路径中):

require_once 'Loader/Autoloader.php';

希望有帮助!

相关内容