![](/img/trans.png)
[英]php script works when manually run but only partially works as cron job (will not write files to directory)
[英]php script works fully when called manually, but won't run from cron job
我有一个PHP脚本,该脚本实际上复制了一个zip文件,将其解压缩,然后将生成的文本文件复制到MySQL数据库。
当我手动调用php页面时,这种方法非常有效,但是每天都需要这样做,因此我想将其设置为cron作业。
我有一个可以执行的cron作业,并且已经通过调用一个非常简单的脚本进行了验证,但是在尝试运行我的整个页面时它失败了。
我已经将其追溯到两个代码区域。 首先:
date_default_timezone_set('Europe/London');
我了解可以通过htaccess或php.ini文件进行设置,因此我对此并不在意。
但是,第二个阻止cron作业运行的代码区域是:
$localzipfile = "myfolder/myzipfile.zip";
$localzipfilefullpath = "/homepages/20/dXXXXXXXXX/htdocs/sub/folder/" . $localzipfile . "";
$localpath = pathinfo(realpath($localzipfile), PATHINFO_DIRNAME);
$zip = new ZipArchive;
$res = $zip->open($localzipfilefullpath);
if ($res === TRUE) {
$zip->extractTo($localpath);
$zip->close();
}
同样,当我手动运行代码时,所有这些都可以完美地工作,因此我知道一切就绪并可以正常工作。 所有路径均正确,并且zip文件按预期解压缩。
只有当我尝试将其作为cron作业运行时,它才会失败并且不会解压缩文件。
我还看到了一些其他有关php文件的问题,这些问题是手动运行的,但不能作为cron作业运行,但是没有一个问题与本地zip文件的解压缩有关。
更新:
我已经设法记录了cronjob的错误输出,并且正在报告以下内容:
“无法实例化不存在的类:ziparchive”
我不明白这一点,因为当我从浏览器运行代码时,所有代码都能正常运行吗?
您是否使用$ localzipfile和$ localpath的相对路径?
如果是的话,请在运行PHP之前尝试使用绝对值脚本或将chdirs写入Shell脚本的shell脚本。
经过大量的测试和调查,终于设法找到了答案!
感谢所有提出建议的人,但是当我通过浏览器运行脚本时,它似乎在PHP 5.4版上运行,但是当cron作业运行时,它在4.9版上运行了!
将我的cronjob调用脚本从以下位置更改:
0 * * * * /usr/bin/php
至
0 * * * * /usr/bin/php5
解决了zip问题,cronjob现在可以正确解压缩我的文件了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.