【问题标题】:CLI include paths to run zend framework via cronCLI 包含通过 cron 运行 zend 框架的路径
【发布时间】:2010-04-27 17:00:02
【问题描述】:

我使用 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/library/') 在 /var/www/clientname/commandline/zfcli.php 在第 11 行

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

include_path => /var/www/clientname/library/:.:/usr/share/pear:/usr/share/php => .:/usr/share/pear:/usr/share/php

我承认这里的语法看起来有点奇怪,但我不知道如何解决它。任何建议将不胜感激。

谢谢 夏天

【问题讨论】:

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


    【解决方案1】:

    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(),试试升级吧。

    【讨论】:

    • 谢谢,我最终使用的技巧与您发布的 ZFPlanet 示例非常相似。我认为关键是使用: realpath(dirname(FILE) . '/../application') 一切现在都按计划进行:)
    【解决方案2】:

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

    [编辑:]

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

    【讨论】:

    • 正确,我有 cron 作为我运行,所以它从我的主目录 /home/summer 运行。我还尝试了我的主目录中的相对路径。 set_include_path('../../var/www/clientname/library/' . PATH_SEPARATOR . get_include_path());不工作。像我这样的接缝应该能够从 / 中做到绝对吗?
    • 是的,你不应该。我刚刚将其添加到我的答案中。
    猜你喜欢
    • 2012-06-05
    • 2012-04-22
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2014-02-22
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多