phpStorm и я согласны, что это безумие, но «неправильные» пути к файлам работают, а «правильные» — нет. Базовая структура.
|
|------classes(directory)
| |
| |
| Person.php
|
|------include(directory)
| |
| |
| db-connect.inc.php
| autoloader.inc.php
| helper.inc.php
|
|
|index.php
|etc.php
В индексе я использую: (1)
include_once "include/autoloader.inc.php";
include_once "include/db-connect.inc.php";
include_once "include/helper.inc.php";
и в Person.php я ожидал бы использовать: (2)
include_once "../include/autoloader.inc.php";
include_once "../include/db-connect.inc.php";
include_once "../include/helper.inc.php";
Но это становится:
"Warning: include_once(../include/autoloader.inc.php): failed to open stream:
No such file or directory in C:\xampp\htdocs\dummy\classes\Person.php on line 2"
Bizarely (3)
include_once "/../include/autoloader.inc.php";
include_once "/../include/db-connect.inc.php";
include_once "/../include/helper.inc.php";
работает и даже более странно (4)
include_once "include/autoloader.inc.php";
include_once "include/db-connect.inc.php";
include_once "include/helper.inc.php";
хотя мы находимся на одном уровне каталогов!
phpStorm помечает 3 и 4 как ошибки (говорит, что «путь включает / autoloader.inc.php не найден» и «включающее выражение не разрешено»), в то время как (2), что, как я думал, было «правильным», получает хороший большой зеленый отметьте, но не удается при отладке или при прямом доступе через HTTP: // локальный и т.п.
Я всегда борюсь с этими путями, но как же получается, что phpStorm и я согласны, а в реальном мире говорят: нет!
Думаю, мне придется поставить $_SERVER['DOCUMENT_ROOT']
повсюду (намного проще с Storm вместо обычного!), но все равно боль!
Это правильное поведение.
Страница, которую вы загрузили, находится на /
Там вы включили файл из /includes
И теперь файл, который вы включили, является частью страницы в /
Таким образом, все включения во включенном файле рассматриваются как родственники из /
не из /includes
и так далее…
Других решений пока нет …