Php 是否使用CLI为子目录设置_include_path()?
我正在应用程序中使用Zend Framework 1.11。我正在尝试实现,以消除不必要的require_once()语句并完全自动加载。这在正常应用中工作良好 我还为一个守护进程编写了一个CLI接口(通过Bootstrap.php中的自定义路由器),它似乎不想很好地处理我的更改。它与我设置的include路径有关,该路径当前在我的index.php ZF入口点中配置:Php 是否使用CLI为子目录设置_include_path()?,php,zend-framework,command-line-interface,autoload,include-path,Php,Zend Framework,Command Line Interface,Autoload,Include Path,我正在应用程序中使用Zend Framework 1.11。我正在尝试实现,以消除不必要的require_once()语句并完全自动加载。这在正常应用中工作良好 我还为一个守护进程编写了一个CLI接口(通过Bootstrap.php中的自定义路由器),它似乎不想很好地处理我的更改。它与我设置的include路径有关,该路径当前在我的index.php ZF入口点中配置: set_include_path(implode(PATH_SEPARATOR, array( realpath(APP
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library/'),
get_include_path(),
)));
库文件夹的布局如下所示:
- library
-Zend
-Acl
-Amf
... etc, Zend Framework files
-Custom
-Api
-Twitter
... etc, My Custom library files
通过CLI运行应用程序时,在这些目录或子目录中找不到任何文件。因此,我将包含路径更改为:
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library/'),
realpath(APPLICATION_PATH . '/../library/Custom/Twitter/'),
get_include_path(),
)));
然后它就能找到我需要的文件
TL;博士我在这些库中有很多文件,如果我必须手动将每个文件夹放入include路径,那么从自动加载中获得的任何性能提升都将消失。有更好的办法吗
顺便说一句,我一时兴起,也尝试了一种类似/../library/*的方法,但也不起作用 为什么CLI脚本找不到以前安装的文件?您会遇到什么错误?
PHP致命错误:在/var/www/…
中找不到类'Someclass',而不是自动加载该类,它只是失败了。我找到了一个临时解决方案,在这里我只在CLI启动中添加必要的路径。这样,常规应用程序不会受到影响,因为它可以按原样工作。这只是一个细微差别,我不确定原因。错误应该包括它正在检查的路径(即,您的包含路径)-因此,看看这是否正确。您肯定能够在CLI应用程序中以相同的方式自动加载。需要补充的是,CLI版本的PHP有一个单独的PHP.ini文件,因此有一个单独的include_path config选项。如果在php.ini中设置include路径,则可能需要在两个位置进行设置。与直接使用require_一次相比,自动加载速度较慢。