2015-06-15 6 views
1

Как услужливо указано в documentation for include():PHP включают в себя/требуют: Предотвратить Откат в разрешении пути

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

Есть ли какие-либо настройки, чтобы предотвратить это и заставить его сбой каким-то образом? Я хочу знать, когда мои файлы «думают» должны быть в местах, где они нет. (Или я могу хотя бы добавить предупреждение, когда это произойдет?)

Является ли мой единственный вариант использования file_exists()? Это как-то плохое; Я не хочу откатывать свою собственную функцию включения.

+0

Невозможно изменить поведение функции PHP по умолчанию. Вам нужно либо написать свой собственный тип функции включения, либо проверить что-то вроде file_exists(). – versalle88

+0

Хорошо. Кажется немного странным, что это должно быть так. Я просто буду жить с возможностью того, что мой код «технически не прав» об этих вещах, но все равно отлично работает. Должен ли я удалить/поставить флага на этот вопрос? –

+0

Могу ли я спросить, почему вы все равно используете include/require? Почему бы не использовать автозагрузчик? – DanielM

ответ

1

Удерживайте все, что вам нужно сделать, это предоставить путь к файлу самостоятельно, если вы не хотите использовать по умолчанию «полезное» поведение.

От PHP manual ...

Файлы включены на основе пути к файлу данного или, если иное не указано, указан include_path.

и

Если путь определен - будь то абсолютное (начиная с буквы диска или \ на Windows, или/на системах Unix/Linux) или по отношению к текущему каталога (начиная с. или ..) - include_path будет проигнорирован вообще . Например, если имя файла начинается с ./, синтаксический анализатор будет искать в родительском каталоге, чтобы найти запрошенный файл.

+0

Возможно, я был неясен, или я не понимаю вас. Я говорю о поведении, даже если указан путь, но файл там не найден. –

+0

Насколько я могу судить об ошибке, это происходит только в том случае, если вы НЕ ПРЕДОСТАВЛЯЕТ свой собственный путь. Таким образом, вы можете указать путь, такой как require_once ("./ filename.php") и не беспокоиться о каком-либо резервном включении, в котором может быть определен любой включенный путь. Чтобы избежать возврата, всегда предоставляйте свои собственные подробные сведения о пути. –

+0

Ах, это кажется правильным. На мой опыт может повлиять мое использование функции set_include_path, о которой я должен был упомянуть в исходном вопросе, но думал, что это не является необходимой детальностью. –