是的,这有点容易:
$zfPresent = (bool) stream_resolve_include_path("Zend/Application.php")
如果可以在包含路径中找到该文件,stream_resolve_include_path()
将返回它的绝对路径 - 如果不是,它将返回 false。
因此,如果找到该框架,肯定就在那里。
对某些人来说只是一粒盐:它至少需要 PHP 5.3.2
见: http: //php.net/manual/de/function.stream-resolve-include-path.php
如果 PHP 版本不允许您使用上述解决方案:
尝试这样的事情:
set_error_handler(function($code, $text, $file, $line) {
// Handle zend not present
/* So that internal error handling won't be executed */
return true;
});
include("Zend/Application.php");
restore_error_handler();
我不认为它真的很优雅,但它在检测 Zend 方面应该有点可靠。另一种方式可能是这样的:
function checkForZf()
{
$includePaths = array_merge(explode(PATH_SEPARATOR, get_include_path(), array($myAppsLib));
foreach($includePaths as $path) {
if (file_exists($path . DIRECTORY_SEPARATOR . 'Zend' . DIRECTORY_SEPARATOR . 'Application.php') {
return true;
}
}
return false;
}
这也应该有点可靠,但文件操作的性能代价很高。您可以在第一次检测后测试它的性能或将状态存储在某处,因此它不需要在每个请求上运行。