CLI包括通过cron运行zend框架的路径

时间:2010-04-27 17:00:03

标签: php zend-framework cron set-include-path

我使用Zend Framework编写了一个命令行实用程序来进行一些夜间报告。它在附带的网站上使用了大量相同的功能。当我手动运行它时效果很好,但是当我在cron上运行它时,我会包含路径问题。好像它应该很容易用set_include_path修复,但也许我错过了什么?

我的目录结构如下所示:

/var/www/clientname/
    application
        Globals.php
    commandline
        commandline_bootstrap.php       
    public_html
        public_bootstrap.php        
    library
        Zend

在public_bootstrap.php中,相对于当前目录,我使用set_include_path没有问题:

set_include_path('../library' . PATH_SEPARATOR . get_include_path());  

如果我理解正确,在commandline_bootstrap.php中我需要放入绝对路径,所以cron知道一切都在哪里。我的文件是这样开始的:

error_reporting(E_ALL);
set_include_path('/var/www/clientname/library' . PATH_SEPARATOR . get_include_path());  
require_once "../application/Globals.php";

但是当我通过cron运行时,我收到以下错误:

  

PHP致命错误:require_once():   打开失败   '../application/Globals.php'   (include_path中= '/无功/网络/客户端名/库/')   在   /var/www/clientname/commandline/zfcli.php   在第11行

我认为PHP接受了我的新路径,因为当我运行命令行并转储phpinfo时,我可以看到:

  

include_path =>   /var/www/clientname/library/:.:/usr/share/pear:/usr/share/php   => :在/ usr /共享/梨:在/ usr /共享/ PHP

我承认这里的语法看起来有点奇怪,但我无法弄清楚如何修复它。任何建议都将不胜感激。

由于 夏季

2 个答案:

答案 0 :(得分:2)

ZFPlanet查看Pádraic对zf-cli的处理方法。

这是我用来从shell执行php文件的一个小shell脚本,所以我确定cwd是什么:

#!/usr/bin/env php
<?php
chdir(dirname(__FILE__));
include('doctrine-cli.php');

在1.10.4之前还有a bug in the autoloader's isReadable(),尝试升级。

答案 1 :(得分:0)

很可能CRON作业的当前目录不是commandline目录。使用getcwd()检查当前目录。

[编辑:]

也不要在set_include_path中使用相对路径,因为这可能会导致意外行为 - 当然除了当前目录.。在将realpath()添加到include_path之前,您可以使用{{1}}获取绝对路径。