Я пытаюсь запустить php-файл из crontab. Цель php – просто отправить электронное письмо пользователю. Включая файлы заголовков моей инфраструктуры php. Но у crontab, похоже, проблема с путями. Я попытался изменить его на абсолютный путь .. см. Примеры тестов ниже.
Использование require_once(http://www.test.com/inc/header.php)
и запуск 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 /, он возвращает эту ошибку:
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-файл, как при запуске из командной строки. Как я могу заставить это работать?
Вы видите, что я делаю неправильно, и предлагаю решение?
Thnnks
Попробуйте включить файл с полным путем, используя магическую константу __DIR__
:
require_once(__DIR__ . '/../../inc/header.php');
Таким образом, он будет необходим с полным путем и работой из любого каталога без необходимости сначала перейти на рабочий каталог вашего PHP-файла.
Другим способом было бы изменить ваш кронтаб на
*/1 * * * * cd /home/user/public/test.com/public/deploy/cron && php test.php