Хорошо, я видел много жалоб о директиве php include () здесь. Похоже, это стало причиной скорби и для меня.
Моя структура сайта выглядит примерно так:
public_html\index.php
public_html\includes\content.inc.php
public_html\language\en\language.inc.php
public_html\classes\db.inc.php
Сайт работает на Apache без проблем. Однако он не работает на IIS (grr ... # @ !!!%).
Позвольте мне объяснить:
Что делается, так это то, что index.php всегда вызывается веб-браузером и, в зависимости от запроса, включает в себя content.inc.php (существует много таких файлов содержимого и индекса. php включает в себя соответствующий, основанный на логике)
// -- index.php --
include(includes/content.inc.php);
Пока что он хорошо работает как на Apache, так и на IIS.
Теперь content.inc.php в свою очередь включает в себя lang.inc.php и db.inc.php .
Похоже:
// -- content.inc.php --
include(language/en/language.inc.php)
include(classes/db.inc.php)
Эти строки хорошо работают на Apache, но IIS жалуется, что не может подать файлы для включения.
Почему? Потому что Apache поддерживает текущую папку "." public_html\
, где выполнение скрипта началось впервые.
IIS, с другой стороны, меняет значение «.» быть файлом, который в настоящее время обрабатывается. т.е. после включения content.inc.php IIS интерпретирует «.» как public_html\includes\
Теперь я знаю, что одно решение состоит в том, чтобы каким-то образом изменить все включаемые пути на абсолютные. Но мой вопрос, действительно ли это проблема Apache / IIS, насколько я понимаю? Есть ли настройка IIS или PHP, чтобы заставить его вести себя корректно, не разбираясь в коде?
Кстати, PHP.ini имеет
include_path=".;C:\PHP\PEAR"