如何设置要在crontab中运行的php脚本?
我试图在crontab中运行一个php脚本,但在crontab中运行时,我从php中得到一个include错误 crontab条目类似于:如何设置要在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
* * * * * 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
是否有更合适的方式包含此文件?谢谢!这就解决了问题。