如果使用cronjob调用,PHP fopen无法读取文件

如果使用cronjob调用,PHP fopen无法读取文件,php,cron,pdf-generation,fopen,Php,Cron,Pdf Generation,Fopen,我有一个php脚本,它会发送一个带有附加pdf文档的电子邮件报告。我用钢笔。如果我手动调用php文件,它会正常工作,邮件会按预期发送 但是: 如果cron作业调用同一个文件,则它根本不起作用。错误是: 警告:fopen(filename.pdf):无法打开流:第29行的/home/public_html/util.php中没有此类文件或目录 有没有办法解决这个问题?Cron作业在没有任何环境(包括当前目录)的情况下运行。这意味着您需要使用要使用的任何文件的完整路径 如果在crontab顶部添加有

我有一个php脚本,它会发送一个带有附加pdf文档的电子邮件报告。我用钢笔。如果我手动调用php文件,它会正常工作,邮件会按预期发送

但是: 如果cron作业调用同一个文件,则它根本不起作用。错误是: 警告:fopen(filename.pdf):无法打开流:第29行的/home/public_html/util.php中没有此类文件或目录


有没有办法解决这个问题?

Cron作业在没有任何环境(包括当前目录)的情况下运行。这意味着您需要使用要使用的任何文件的完整路径

如果在crontab顶部添加有效的电子邮件地址:

MAILTO=your-email@example.com

您将收到cron作业发送到您的电子邮件的任何输出。这包括对调试有用的错误消息。

每个cron都在最小环境中运行,最小环境可以是不同于您的用户帐户的shell和配置文件。脚本也不是从包含目录本身启动的

在大多数情况下,如果您只是像在命令行shell上执行脚本那样将目录更改为包含脚本的目录,那么它就可以工作。而不是

* * * * * /usr/bin/php /path/to/your/file.php
写下:

* * * * * cd /path/to/your/ && /usr/bin/php ./file.php
如果这还不够,您可以通过写入来加载默认用户shell和
PATH
变量

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

在crontab的顶部(当然有正确的设置,可能是
/bin/bash
echo$PATH
的输出)。

是否使用绝对路径而不是相对路径?可能cron有不同的工作目录?确实使用相对文件路径吗?确实如此,尽管我不记得那个环境是什么,有时默认值就是错误的。。。我总是发现假装我需要自己安排一切会更有成效;-)谢谢你的回答。我不知道。