2015-12-26 3 views
1

Я работаю с PHP на Windows, в течение нескольких дней. Все это время я указал включает следующий образом:php include path on windows

В файле index.php:

require ('include/init.inc'); 

В директории «включает в себя» Я сказал:

В init.inc файл:

require ("workbench.inc"); 

Но внезапно перестает работать. В одно время я должен также в "init.inc" указать каталог. Почему все это время работало, а вдруг уже не было?

+0

Вы должны быть более ясными. Вы используете PHP с Apache или CLI? Какова структура вашего каталога? – Lumen

+0

Я работаю с Eclipse и использую XDebug. Приложение настроено, и оно запущено как приложение CLI, но я также установил wamp и сервер Wamp Server все еще работает. Проводник очень прост. У меня есть корень и включенный каталог. – peter70

+0

Когда я помещаю код в "include/init.inc": set_include_path (get_include_path() .PATH_SEPARATOR. 'D: \ ... мой путь ... \ include'); то он отлично работает. Но до сегодняшнего дня не было необходимости ... – peter70

ответ

1

От PHP documentation:

файлы включены в основанный на пути к файлу данного или, если иное не указано, указанный в include_path. Если файл не найден в include_path, включает в себя, наконец, проверить в собственном каталоге вызывающего сценария и текущей рабочей директории перед отказом

Так current working directory (УХО) имеет важное значение при включении других файлов. Он может быть получен getcwd().

Если ваша структура каталогов выглядит следующим образом

rootdir/ 
    include/ 
     init.rc 
     workbench.rc 
    index.php 

тогда require('include/init.rc') будет работать только тогда, когда rootdir/ является УХО или является частью пути поиска. Аналогично, require('init.inc') предполагает, что CWD равен rootdir/include/. Поскольку текущий рабочий каталог может измениться, это idomatic в PHP, чтобы использовать более надежные

// in index.php 
require(__DIR__ . '/include/init.rc'); 

// in workbench.rc 
require(__DIR__ . '/init.rc'); 

Тогда require будет работать независимо от УХО. Это работает, потому что magic constant __DIR__ заменяется на абсолютном пути к файлу, который содержит константу без разделителя каталогов завершающего, например

  • в index.php, __DIR__ является D:\path\to\rootdir и
  • в include/init.rc, __DIR__ является D:\path\to\rootdir\include.