【问题标题】:Does it matter if I use relative or absolute path's when running a php script via cron?通过cron运行php脚本时使用相对路径还是绝对路径有关系吗?
【发布时间】:2011-02-07 14:54:06
【问题描述】:

我目前正在编写一个尝试通过 cron 自动化的脚本。通过终端运行脚本很好,但是当我尝试使用 crontab 运行脚本时,我遇到了一些问题。

我的部分脚本通过DOMDocument::loadXML()DOMDocument::validate() 加载和验证xml 文件,php 在尝试验证声明时抛出错误:

Failed to load external entity: /linuxuser/homefolder/my_dtd.dtd

在 xml 文件中,dtd 设置为:

../../../../../../../my_dtd.dtd

服务器是否存在一些错误配置,或者此时我的 php 代码是否有问题?它似乎抓住了我的 linux 主目录,而不是相对于 xml 文件的路径。只是想知道是否有其他人看到过这样的问题,或者可以为我指明正确的方向。谢谢。

【问题讨论】:

  • 当然不是。路径应该是正确的,无论是相对的还是绝对的。

标签: php xml cron


【解决方案1】:

引用differences in CLI usage(命令行界面)的PHP文档:

CLI SAPI 确实更改 当前目录到目录 执行的脚本!

当 PHP 脚本通过 CRON 运行时,它会在用户的主目录中执行。您可以将脚本使用的所有相对路径引用替换为绝对路径,或者将其放在脚本的开头:

chdir(dirname(__FILE__)); # for PHP 5.2.x and below
# or
chdir(__DIR__); # for PHP 5.3+

【讨论】:

  • 这正是问题所在。非常感谢!
【解决方案2】:

很可能,问题在于工作目录和解析相对路径。

【讨论】:

    【解决方案3】:

    在你的 xml 文件中尝试绝对路径。

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 2015-11-13
      • 1970-01-01
      • 2011-11-25
      • 2019-09-09
      • 2013-12-10
      • 2014-03-09
      • 2011-10-16
      • 2012-08-24
      相关资源
      最近更新 更多