Как пути вычисляются в PHP – Почему файлы в текущей директории игнорируются?

Обновить:

Файл index.php:

/public_html/d/index.php 

включает:

 /public_html/d/core/source/class.File1.php 

Этот класс.File1.php здесь включает в себя следующее:

 include 'class.File2.php'; 

Естественно, я помещал class.File2.php в тот же каталог, что и class.File1.php, как указано выше.

 /public_html/d/core/source/class.File2.php 

Однако,

Он фактически включает этот файл: (обратите внимание на отсутствующий /d/ )

 /public_html/core/source/class.File2.php 

Не уверен, почему он не использует файл, находящийся в текущем каталоге.

Но вот некоторые возможности.

Вход от пользователя, запрашивающего страницу, поступает в: (типы пользователей www.host.com/d )

 /public_html/d/ 

Это включает в себя: (который отлично работает, я его протестировал)

 /public_html/d/core/source/class.File1.php 

Однако включить в этот файл, где вещи сломаются, как указано выше:

 include "class.File2.php" 

Единственное, что имеет смысл … заключается в том, что включает в себя какую-то внутреннюю константу, такую ​​как

 ROOT 

или

 $_SERVER['DOCUMENT_ROOT'] 

но я до сих пор не могу понять, почему он проигнорировал /d/ но выяснил остальное.

Solutions Collecting From Web of "Как пути вычисляются в PHP – Почему файлы в текущей директории игнорируются?"

Вы используете set_include_path в любом месте своего приложения? Возможно, это может быть причиной вашей проблемы. Поступая таким образом, вы указываете список каталогов, в которых функции require, include, fopen (), file (), readfile () и file_get_contents () сначала ищут файлы.

В качестве альтернативы я предлагаю вам определить абсолютный путь, чтобы избежать проблем. Напишите это на вашем /public_html/d/core/source/class.File1.php

 // This if you are using PHP >= 5.3 include(__DIR__ . '/class.File2.php'); // Or this if you dont have the magic constant __DIR__ available include(dirname(__FILE__) . '/class.File2.php'); 

__FILE__ и __FILE__ – магические константы. __FILE__ – это константа, которая имеет абсурдный путь к этому конкретному файлу. И __DIR__ – это абсурдный путь к каталогу, в котором находится этот файл. Вы можете даже проверить их, выполнив echo __FILE__; или echo __DIR__;

Подробнее о них вы можете узнать здесь http://php.net/manual/en/language.constants.predefined.php

Вы пробовали включить относительный путь?

 include './class.File2.php'; 

Является ли класс.File1.php сам по себе частью другого скрипта?

  • getcwd() всегда возвращает тот же путь независимо от того, в каком файле он находится (в моей системе). Ошибка, на мой взгляд.

  • (В моей системе) PHP нашел другой файл в пути, не указанном в списке include или в текущем каталоге. На мой взгляд, это ошибка.

  • В моей системе, если вы не хотите использовать абсолютные пути … единственный способ, которым я нашел относительные пути, – dirname(__FILE__); чтобы добавить, куда вы хотите отправиться.

  • , или ./ добавление файла не сработало.