эквивалентный $ _SERVER ['DOCUMENT_ROOT'], который будет работать, когда сценарий назовет крон?

Я использую $_SERVER['DOCUMENT_ROOT'] для моего включать пути, таким образом, файлы выяснят, куда они работают от (т.е. идут ли они живые или подготавливающие), и это хорошо работает, за исключением скриптов, которые запущены кроном, в котором у меня есть к hardcode путь.

Действительно ли там другой является переменным, я мог использовать, который мог работать и от крона и от браузера?

5
задан Anthony Forloney 19 February 2010 в 19:42
поделиться

3 ответа

При выполнении вашего PHP-скрипта через cron, я предполагаю, что он выполняется в контексте CLI, а не веб-сервера. В случае выполнения PHP из CLI, $_SERVER['DOCUMENT_ROOT'] заполняется неправильно. Вы можете использовать следующий код для решения этой проблемы:

if ($_SERVER['DOCUMENT_ROOT'] == "")
   $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
12
ответ дан 18 December 2019 в 07:54
поделиться

Следующее даст вам каталог, в котором находится ваш скрипт:

realpath(dirname(__FILE__));

Это работает как для веб-запросов, так и для скриптов cron.

5
ответ дан 18 December 2019 в 07:54
поделиться

Лучше всего определить собственную константу, на которую можно ссылаться из любого другого места в приложении. Например, вы можете поместить что-то вроде этого в MyAppDirectory / public_html / index.php:

define('APPLICATION_PATH', realpath(dirname(__FILE__).'/..'));

Это даст вам последовательную обратную ссылку на MyAppDirectory / независимо от того, откуда вызывается или включается index.php. Определение вашей собственной константы не только позволяет вам вызывать приложение из cron или через браузер, как вы хотите, но также позволяет изменять структуру хранилища гораздо шире с минимальными изменениями, которые нужно отслеживать. Zend Framework активно использует это в процессе начальной загрузки Zend_Application, а поиск в Google "php APPLICATION_PATH" предоставит вам множество дополнительных ссылок.

3
ответ дан 18 December 2019 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: