【问题标题】:(PHP) How to obtain the filename (or file path) when a script is executed as a cron job?(PHP) 当脚本作为 cron 作业执行时,如何获取文件名(或文件路径)?
【发布时间】:2011-09-08 03:53:46
【问题描述】:

我有一个通过浏览器调用时可以完美执行的 PHP 脚本。但是,当作为 cron 作业调用时,它会失败。失败是因为脚本需要访问它自己的文件名,我通过$thefilepath = $_SERVER['REQUEST_URI'] 进行。不幸的是,当文件被称为 cron 作业时,不会填充 $_SERVER['REQUEST_URI'] 变量。 (我尝试$_SERVER['PHP_SELF'] 也同样失败)。

如果有人感兴趣,脚本需要访问它自己的文件名,因为文件名包含一个整数(例如,filename = myfile4.php),用于计算数据库表中的行子集。更具体地说,myfile4.php 获取 ID 为 40-49 的行,而myfile5.php 获取 ID 为 50-59 的行,等等。

所以,我的问题是,鉴于 $_SERVER['REQUEST_URI']$_SERVER['PHP_SELF'] 未能提供用于 cron 作业的文件名(或文件路径),任何人都可以建议在此 cron 中访问脚本自己的文件名的替代方法执行上下文?

谢谢!

【问题讨论】:

    标签: php cron


    【解决方案1】:

    使用__FILE____DIR__dirname(__FILE__) http://www.php.net/manual/en/language.constants.predefined.php

    【讨论】:

    • 我现在测试了 Marc B 的解决方案(使用 $argv[0])和 Martin B 的解决方案(使用 FILE)——两者都很好用(谢谢你!)。我没有资格评估此类解决方案的任何细微差别或其他考虑因素——我很高兴得到一个可行的解决方案。
    【解决方案2】:

    $argv[0] 将始终包含脚本名称:http://www.php.net/manual/en/reserved.variables.argv.php

    【讨论】:

    • 不应该使用。想象一个充当前端控制器的脚本,它将 cronjob 名称(这将是有趣的部分)作为参数;或为 php 文件定义的别名。
    • 我现在测试了 Marc B 的解决方案(使用 $argv[0])和 Martin B 的解决方案(使用 FILE)——两者都很好用(谢谢你!)。我没有资格评估此类解决方案的任何细微差别或其他考虑因素——我很高兴得到一个可行的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2012-07-31
    • 2019-06-22
    相关资源
    最近更新 更多