Я пытаюсь настроить PHP-файл как задание cron, где этот PHP-файл содержит другие файлы PHP.
Сам файл находится по адресу /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/runner.php
Включенный файл находится в /var/www/vhosts/domain.com/httpdocs/app/protected/config.php
Как включить этот файл конфигурации из runner.php? Я попытался сделать require_once ('../../ config.php'), но он сказал, что файл не существует. Предполагаю, что cron запускает PHP из другого места или чего-то еще.
Задача cron следующая.
/ usr / bin / php -q /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/runner.php
Есть предположения?
Ваш cron должен изменить рабочий каталог перед запуском PHP:
cd /var/www/vhosts/domain.com/httpdocs/app/protected/classes/cron/ && /usr/bin/php -q runner.php
Обратите внимание: если каталог не существует, PHP не будет запускать runner.php.
Вы должны использовать абсолютный путь. Вероятно, cron не запускает скрипт из каталога, в котором он находится.
Я рекомендую использовать:
require_once( dirname(__FILE__) '../../config.php )
__FILE__
– это специальная константа, которая относится к файлу, в котором вы находитесь. dirname(...)
предоставит вам каталог, который будет оценивать абсолютный путь к файлу, который вы хотите включить.
Является ли классы или cron символической ссылкой? Кажется, я помню, что php оценивает реальный путь вместо символического пути.
Рассмотрим следующее дерево каталогов:
/target/index.php
/ path / sym -> / target
если вы должны были выполнить php index.php
из /path/sym
то инструкция require_once('../require.php');
будет оценивать require_once('/require.php');
not require_once('/path/require.php');
Вы можете изменить рабочий каталог внутри вашего скрипта PHP на расположение этого скрипта: chdir(__DIR__);
(или, если ваша версия PHP до 5.3: chdir(dirname(__FILE__));
) Затем вы можете сделать: require_once('../../config.php')