Мы с 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"
странно (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 как ошибки (говорит «Путь include/autoloader.inc.php не найден» и «Выражение Include не разрешено»), в то время как (2), что я считал «правильным», получает хороший большой зеленый поставить галочку, но не работает при отладке или при прямом доступе через http://localhost и т. д.
Я всегда борюсь с этими путями, но почему мы с phpStorm согласны, а реальный мир говорит «нет»!
Думаю, мне придется вставить $_SERVER['DOCUMENT_ROOT']
повсюду (намного проще со Storm, а не от руки!), но все равно больно!
include_once __DIR__ . "/../include/autoloader.inc.php";
-- намного надежнее, так как таким образом вы не даете PHP шанса неправильно интерпретировать его (например, потому что у вас могут быть сложныеinclude_path
и т. д.). В идеале я бы порекомендовал использовать классы, PSR-4 и автозагрузку классов - в таком случае только несколько include/require, а остальные будут загружены автоматически. - person LazyOne   schedule 28.09.2015