我最近将服务器升级为使用 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';
希望有帮助!