У меня есть задание 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';
?
благодаря!
С технической точки зрения скрипт php запускается там, где находится cron; ех. Если cron был в / bin / cron, то это утверждение будет искать common.php в /bin/includes/common.php.
Так что да, вам, вероятно, придется использовать 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 и локальную настройку.
Альтернативой решениям, которые рекомендуют спецификацию абсолютного пути, является использование chdir
в вашем скрипте. Таким образом, ваши относительные пути будут работать должным образом.
Например, чтобы перейти в каталог скрипта:
$curr_dir = dirname(__FILE__); chdir($curr_dir);
Чтобы перейти к родительскому каталогу скрипта:
$curr_dir = dirname(__FILE__); chdir($curr_dir . "/..");
И так далее.