Я только что столкнулся с этим кодом
include('../wp-load.php');
Сработало просто, если скрипт вызывался из веб-браузера (равняется ‘из Apache’). Если я запускаю тот же скрипт из cron или из командной строки, я получаю сообщение об ошибке
Warning: include(): Failed opening '../wp-load.php' for inclusion (include_path='.:/usr/local/php54/pear') in /home/myfolder/public_html/exe/myscript.php on line 6
Однако это сработало, если я изменил включение следующим образом:
include(__DIR__.'/../wp-load.php');
Он работает как из командной строки, так и из браузера.
В то же время я начал бояться использовать трюки из директории, где размещен скрипт. Так что если tools.php
Размещено в том же каталоге, безопасно ли использовать:
include('tools.php');
Или было бы лучше добавить __DIR__
?
include(__DIR__.'/tools.php');
В верхней части скрипта или в файле, который вы всегда включаете в начале, определите константу или переменную, которая является путем к корневому каталогу.
Вы должны определить два пути:
один из вашей машины, например:
define('SERVER_PATH', '/var/www/');
это будет использоваться для включения файлов php-скрипта в ваш php-скрипт
Вы просто будете использовать это как include(SERVER_PATH.'tools.php')
в любом месте вашего кода.
Вы также можете использовать __DIR__
вместо этого, если у вас есть PHP> = 5.3.0
И второе — URL-путь:
define('URL_PATH', 'http://www.xxxxxx.com/');
это будет использоваться вашей страницей для запросов http, таких как изображения, файлы javascript, файлы css и т. д.
Cron имеет собственный рабочий каталог, но вы можете изменить его с помощью cd:
cd /var/www/vhosts/domain.com/httpdocs
Вам также нужно знать, что вы можете выполнять несколько команд в задании cron следующим образом:
command1 && command2
Так что command1 может быть cd, а command2 — вашим php.
Тогда вам не нужно добавлять __DIR__, и задание cron будет работать так же, как обычный PHP.
Я знаю, что это на самом деле не отвечает на ваш вопрос, но решает проблему, которая заставила вас задать свой вопрос. Лично я не думаю, что есть веская причина всегда использовать абсолютные пути во включениях, относительные пути в большинстве случаев будут работать нормально.