我已经浏览了建议的答案,但找不到我要找的东西。
我有一个内部网页,向高级管理层提供统计数据。
为了减少服务器负载和网页加载时间,我有一个在服务器上创建 XML 文件的 cron 作业 (cron_pateintcensus.php)。
此文件由两个脚本访问
ptc_xmlreader.php//feed 网页
ptc_emailer.php//每天通过电子邮件发送一次报告
在我的测试服务器上一切正常,昨晚我将其推广到我的生产环境中。
当 cron 作业运行时,电子邮件没有发出,但当我进入浏览器并调用电子邮件程序脚本时,它确实发出了。
事情是这样的...
读取网页文件的脚本和写入文件的脚本在访问它时没有问题。
电子邮件脚本告诉我它找不到该文件...但我从有效的脚本中复制并粘贴了file_get_contents行。
两个 cron 作业在同一用户下运行,并且该用户对文件夹和文件具有权限。
我设法让它工作,但我试图弄清楚它发生的原因,并希望有人能提供一些启示。
这是在 PHP 5.4.36 中运行的 Turnkey Lamp Debian 服务器。
这是原始代码
$output = file_get_contents('outputfiles/test.xml');
这是我将其更改为的内容,以使其正常工作
$rp = realpath(__DIR__.'/outputfiles');
$dc = file_get_contents($rp.'/test.xml');
谁能说出一些启示?
谢谢
正如你所看到的 cron 执行作业时的"工作目录"是什么:
添加 cd/home/xxxx/Documents/Scripts/如果您希望您的作业在该目录中运行。cron 没有理由会更改为该特定目录。Cron 在您的主目录中运行您的命令。
由于您没有提供完整路径,因此您可以从主目录运行它(手动运行时您可能已经cd到另一个位置)。
这可能意味着两者之间的区别
/home/foo/www/outputfiles/
和
/home/foo/outputfiles/ (does not exist)
这意味着当您使用__DIR__.'/outputfiles'
它工作正常时,__DIR__
解析为文件所在的路径(而不是您从中运行命令的文件夹)。
解决方案很简单:
通过__DIR__
或dirname(__FILE__)
提供完整路径,或使用 chdir()
方法更改工作目录:
chdir(__DIR__);
// or
chdir('/home/foo/www/');