нотация "текущий каталог" не работает - PullRequest
2 голосов
/ 15 августа 2011

Меня учили, что хорошей практикой является указание каталога файла, на который вы ссылаетесь, даже если файл находится в текущем каталоге.Так, например, используйте «./constants.inc.php» вместо «constants.inc.php».Обычно это работает нормально для меня, за исключением одного конкретного места в моем коде, когда я использую обозначение ./, я получаю следующую ошибку PHP:

Предупреждение: require (./ constants.inc.php) [function.require]: не удалось открыть поток: нет такого файла или каталога в C: \ xampp \ htdocs \ widget_corp \ includes \ functions.inc.php в строке 4

Неустранимая ошибка: require () [function.require]: Не удалось открыть «./constants.inc.php» (include_path = '.; C: \ xampp \ php \ PEAR; C: \ xampp \ htdocs \ sites \ mathverse \ includes') в C: \xampp \ htdocs \ widget_corp \ includes \ functions.inc.php в строке 4

Запись "./constants.inc.php" выдает эту ошибку, а "constants.inc.php" - нет(PHP, кажется, находит файл просто отлично).Может кто-нибудь сказать мне, почему запись ./ не работает в этом конкретном случае?Возможно, я упускаю что-то очень простое?

Чтобы дать немного больше контекста (если необходимо), ошибка в функции ниже (строка 2), которая находится в моем файле функций PHP (называемых функциями.inc.php), который находится внутри каталога include.Файл constant.inc.php также находится в каталоге include.

Спасибо.

function connect_to_db() {
  require("./constants.inc.php");
  $connection_id = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
  if (!$connection_id) {
    die("Database connection failed: " . mysql_error());
  }
  $db_selection_was_successful = mysql_select_db(DB_NAME, $connection_id);
  if (!$db_selection_was_successful) {
    die("Database selection failed: " . mysql_error());
  }
}

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

даже с или без ./ PHP будет искать тот же файл (в случае ./, он не будет искать в include_path), и это означает, что constats.inc.php НЕ существует.

Попробуйте это

require(dirname(__FILE__)."/../constants.inc.php");
3 голосов
/ 15 августа 2011

Запись «./constants.inc.php» приводит к этой ошибке, а «constants.inc.php» - нет (PHP, кажется, находит файл просто отлично). Может кто-нибудь сказать мне, почему запись ./ не работает в этом конкретном случае? Может быть, мне чего-то очень просто не хватает?

Единственное объяснение, которое у меня есть, это то, что PHP, похоже, находит файл constants.inc.php в одном из каталогов в пути включения - скорее всего, C:\xampp\htdocs\websites\mathverse\includes.

0 голосов
/ 31 августа 2012

Создайте следующую иерархию:

index.php // echo 'I am in the top directory';
folder1/
    index.php // echo 'I am in folder 1';
    folder2/
        index.php // 'echo I am in foler' 2

на вашем верхнем уровне index.php требуется folder1/index.php. От этого требуют 'folder2/index.php';

Это работает без проблем. Однако добавьте ./ перед folder2/index.php, и вы получите ошибку. Кажется, как только вы определяете, какую папку вы хотите, используя ., она должна быть относительно текущего рабочего каталога. Но если оставить открытым, путь будет проверен и в собственной директории вызывающих скриптов.

Из руководства:

Файлы включаются на основе заданного пути к файлу или, если он не указан, указан include_path. Если файл не найден в include_path, include, наконец, проверит собственный каталог вызывающего скрипта и текущий рабочий каталог, прежде чем произойдет сбой . Конструкция include выдаст предупреждение, если не сможет найти файл; это поведение отличается от require, что приведет к фатальной ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...