我目前正在编写一个脚本,我试图通过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文件的路径。只是想知道是否有其他人看到过这样的问题,或者是否能指出我正确的方向。感谢。
答案 0 :(得分:1)
最有可能的问题是工作目录和解决相对路径。
答案 1 :(得分: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 :(得分:0)
在xml文件中尝试绝对路径。