PHP: Require path не работает для задания cron?
у меня есть задание cron, которое должно включать этот файл:
require '../includes/common.php';
однако, когда он запускается через задание cron (а не мое локальное тестирование), относительный путь не работает. задание cron запускает следующий файл (на живом сервере):
/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
используя тот же абсолютный формат, что и задание cron,common.php
на
/home/username123/public_html/includes/common.php
означает ли это, что я должен заменить свою строку 2 с:
require '/home/username123/public_html/includes/common.php';
?
спасибо!
5 ответов
технически видно, что скрипт php запускается там, где находится cron; ex. Если cron был в /bin / cron, то это утверждение будет искать общее.php в /bin/включает/общий.РНР.
Так что да, вам, вероятно, придется использовать fullpaths или использовать set_include_path
set_include_path('/home/username123/public_html/includes/');
require 'common.php';
Ноно. вам нужно использовать абсолютные пути на кронах.
что я делаю это:
// 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 global vs local.
альтернативой решениям, которые рекомендуют абсолютную спецификацию пути, является использование chdir
в свой сценарий. Таким образом, ваши относительные пути будут работать так, как ожидалось.
например, чтобы перейти в каталог скрипта:
$curr_dir = dirname(__FILE__);
chdir($curr_dir);
чтобы перейти в родительский каталог скрипта:
$curr_dir = dirname(__FILE__);
chdir($curr_dir . "/..");
и так далее.