如何设置要在crontab中运行的php脚本?

如何设置要在crontab中运行的php脚本?,php,crontab,Php,Crontab,我试图在crontab中运行一个php脚本,但在crontab中运行时,我从php中得到一个include错误 crontab条目类似于: * * * * * php /path/sendEmail.php > /path/logs/sendEmail/sendEmail-`date +\%Y-\%m-\%H\ \%k:\%M:\%S`.log 2>&1 & 这将创建日志文件,但在日志文件中我发现一些php错误: PHP Warning: include_once

我试图在crontab中运行一个php脚本,但在crontab中运行时,我从php中得到一个include错误

crontab条目类似于:

* * * * * php /path/sendEmail.php > /path/logs/sendEmail/sendEmail-`date +\%Y-\%m-\%H\ \%k:\%M:\%S`.log 2>&1 &
这将创建日志文件,但在日志文件中我发现一些php错误:

PHP Warning:  include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6

Warning: include_once(../../../lib/Database.php): failed to open stream: No such file or directory in /path/sendEmail.php on line 6
PHP Warning:  include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6

Warning: include_once(): Failed opening '../../../lib/Database.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /path/sendEmail.php on line 6
PHP Fatal error:  Class 'Database' not found in /path/sendEmail.php on line 9

Fatal error: Class 'Database' not found in /path/sendEmail.php on line 9
当我在crontab条目中运行命令时,我在日志文件中得到了相同的错误。现在,当我在终端中运行
php sendmail.php
时,它工作得非常好。发送电子邮件和其他一切。在之前的案例中,我收到了错误(电子邮件也不会发出)


不确定输出管道如何改变php脚本的运行方式。关于如何让php脚本作为cronjob运行,有什么想法吗?

当cron启动脚本时,它的工作目录不太可能是php脚本所在的目录,因此像
。/../../../lib/Database.php这样的相对路径是不可取的,至少在当前的形式下是如此

在脚本顶部添加:

define('__SCRIPT_ROOT', dirname(__FILE__));
并将您的包含更改为:

include_once(__SCRIPT_ROOT . '/../../../lib/Database.php');

现在
\u脚本\u ROOT
包含脚本的绝对路径,您可以使用它作为执行相对路径的基础。

您遇到了路径问题,您包含文件的方式不安全
。/../lib/Database.php
是否有更合适的方式包含此文件?谢谢!这就解决了问题。