运行 来自 Crontab 的 PHP 文件,其中包含 require_once()
Running a PHP file from Crontab that includes require_once()
我正在尝试从 crontab 运行 一个 php 文件。 php 的目的是简单地向用户发送电子邮件。包括我的 php 框架的头文件。但是 crontab 的路径似乎有问题。我试过将其更改为绝对路径。请参阅下面的测试用例。
对命令行使用 require_once(http://www.test.com/inc/header.php)
和 运行ning php -f test.php
结果:
PHP Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /home/user/public/test.com/public/deploy/cron/test.php on line 3
PHP Warning: require_once(http://www.test.com/inc/header.php): failed to open stream: no suitable wrapper could be found in /home/user/public/trybe-ing.com/public/deploy/cron/test.php on line 3
PHP Fatal error: require_once(): Failed opening required 'http://www.test.com/inc/header.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/user/public/test.com/public/deploy/cron/test.php on line 3
在命令行中使用require_once('../../inc/header.php');
和运行宁php -f test.php
导致php文件被成功执行。
但是看看我的 cron 选项卡:
*/1 * * * * php /home/user/public/test.com/public/deploy/cron/test.php
然后查看 /var/mail/ 中的结果,returns 这个错误:
Message 23:
From user@server Thu Jun 25 13:13:02 2015
X-Original-To: user
From: root@user (Cron Daemon)
To: chrismoore@ibrahimovic
Subject: Cron <user@server> php /home/user/public/test.com/public/deploy/cron/test.php
Content-Type: text/plain; charset=UTF-8
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
Date: Thu, 25 Jun 2015 13:13:02 +0100 (BST)
PHP Warning: require_once(../../inc/header.php): failed to open stream: No such file or directory in /home/user/public/trybe-ing.com/public/deploy/cron/test.php on line 3
PHP Fatal error: require_once(): Failed opening required '../../inc/header.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/user/public/test.com/public/deploy/cron/test.php on line 3
crontab 似乎无法 运行 php 文件,就像从命令行 运行 时那样。我怎样才能让它工作?
你能看出我做错了什么并提供解决方案吗?
赞
尝试使用 __DIR__
magic constant:
包含文件的完整路径
require_once(__DIR__ . '/../../inc/header.php');
这样,它将需要完整路径并从任何目录工作,而无需先更改到 PHP 文件的工作目录。
另一种方法是将您的 crontab 更改为
*/1 * * * * cd /home/user/public/test.com/public/deploy/cron && php test.php
我正在尝试从 crontab 运行 一个 php 文件。 php 的目的是简单地向用户发送电子邮件。包括我的 php 框架的头文件。但是 crontab 的路径似乎有问题。我试过将其更改为绝对路径。请参阅下面的测试用例。
对命令行使用 require_once(http://www.test.com/inc/header.php)
和 运行ning php -f test.php
结果:
PHP Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in /home/user/public/test.com/public/deploy/cron/test.php on line 3
PHP Warning: require_once(http://www.test.com/inc/header.php): failed to open stream: no suitable wrapper could be found in /home/user/public/trybe-ing.com/public/deploy/cron/test.php on line 3
PHP Fatal error: require_once(): Failed opening required 'http://www.test.com/inc/header.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/user/public/test.com/public/deploy/cron/test.php on line 3
在命令行中使用require_once('../../inc/header.php');
和运行宁php -f test.php
导致php文件被成功执行。
但是看看我的 cron 选项卡:
*/1 * * * * php /home/user/public/test.com/public/deploy/cron/test.php
然后查看 /var/mail/ 中的结果,returns 这个错误:
Message 23:
From user@server Thu Jun 25 13:13:02 2015
X-Original-To: user
From: root@user (Cron Daemon)
To: chrismoore@ibrahimovic
Subject: Cron <user@server> php /home/user/public/test.com/public/deploy/cron/test.php
Content-Type: text/plain; charset=UTF-8
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/user>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
Date: Thu, 25 Jun 2015 13:13:02 +0100 (BST)
PHP Warning: require_once(../../inc/header.php): failed to open stream: No such file or directory in /home/user/public/trybe-ing.com/public/deploy/cron/test.php on line 3
PHP Fatal error: require_once(): Failed opening required '../../inc/header.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/user/public/test.com/public/deploy/cron/test.php on line 3
crontab 似乎无法 运行 php 文件,就像从命令行 运行 时那样。我怎样才能让它工作?
你能看出我做错了什么并提供解决方案吗?
赞
尝试使用 __DIR__
magic constant:
require_once(__DIR__ . '/../../inc/header.php');
这样,它将需要完整路径并从任何目录工作,而无需先更改到 PHP 文件的工作目录。
另一种方法是将您的 crontab 更改为
*/1 * * * * cd /home/user/public/test.com/public/deploy/cron && php test.php