У меня есть задание крона, которое должно включать этот файл:
require '../includes/common.php';
однако, когда это выполняется через задание крона (и не мое локальное тестирование), относительный путь не работает. прогоны задания крона следующий файл (на живом сервере):
/home/username123/public_html/cron/mycronjob.php
и вот ошибка:
Fatal error: require(): Failed opening required '../includes/common.php'
(include_path='.:/usr/lib/php:/usr/local/lib/php') in
/home/username123/public_html/cron/mycronjob.php on line 2
использование того же абсолютного формата как задание крона, common.php
был бы расположен в
/home/username123/public_html/includes/common.php
делает это означает, что я должен заменить свою строку 2:
require '/home/username123/public_html/includes/common.php';
?
спасибо!
Технически php-скрипт запускается там, где находится cron; например. Если бы cron находился в /bin/cron, то этот оператор искал бы common.php в /bin/includes/common.php.
Так что да, вам, вероятно, придется использовать полные пути или использовать set_include_path
set_include_path('/home/username123/public_html/includes/');
require 'common.php';
nono. вам нужно использовать абсолютные пути в crons.
вот что я делаю:
// supouse your cron is on app/cron and your lib is on app/lib
$base = dirname(dirname(__FILE__)); // now $base contains "app"
include_once $base . '/lib/db.inc';
// move on
Если относительный путь не работает, это означает, что текущий каталог, установленный при выполнении задач cron, не является / home / username123 / public_html. В таких случаях можно использовать только абсолютный путь.
Это звучит так просто, как если бы какой-то сценарий, который вы запускали, устанавливает include_path, и вы включаете этот сценарий. используйте phpinfo (), чтобы проверить глобальную или локальную настройку include_path.