Как лучше включать файлы в PHP?

Я только что столкнулся с этим кодом

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');

1

Решение

В верхней части скрипта или в файле, который вы всегда включаете в начале, определите константу или переменную, которая является путем к корневому каталогу.
Вы должны определить два пути:
один из вашей машины, например:

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 и т. д.

2

Другие решения

Cron имеет собственный рабочий каталог, но вы можете изменить его с помощью cd:

cd /var/www/vhosts/domain.com/httpdocs

Вам также нужно знать, что вы можете выполнять несколько команд в задании cron следующим образом:

command1 && command2

Так что command1 может быть cd, а command2 — вашим php.

Тогда вам не нужно добавлять __DIR__, и задание cron будет работать так же, как обычный PHP.

Я знаю, что это на самом деле не отвечает на ваш вопрос, но решает проблему, которая заставила вас задать свой вопрос. Лично я не думаю, что есть веская причина всегда использовать абсолютные пути во включениях, относительные пути в большинстве случаев будут работать нормально.

0

По вопросам рекламы [email protected]