require_once и проблемы с включением php

#php

#php

Вопрос:

Почему-то я не могу включить нужный файл ни с помощью require_once , ни include . Файл, который я хочу включить, находится в том же каталоге, что и файл, в который я хочу его включить. Я перепробовал все комбинации, но все еще не работает.

Ошибка, которую я получаю, пытаясь использовать require_once

Предупреждение: require_once(D:PROJEKATwampwwwEifdb_connect.php ): не удалось открыть stream: нет такого файла или каталога в D:PROJEKATwampwwwEifcreate_user.php

Сначала я попробовал с

 require_once '/db_connect.php'
  

затем я использовал

 require_once 'db_connect.php' cause I realized that I have to use  in windows
  

Затем попробовал

 require_once __DIR__ . 'db_connect.php'
  

И, наконец,

 require_once $_SERVER['DOCUMENT_ROOT'] . '/Eif/db_connect.php';
  

Я думаю, что путь, который я использую, хорош, но он продолжает использовать его неправильно.

В чем проблема?

Спасибо

Комментарии:

1. используйте постоянный DIRECTORY_SEPERATOR, который всегда корректен на вашей платформе

2. Если это в том же каталоге, почему бы вообще не опустить косую черту?

3. @Dirkos хорошо, спасибо, но что еще это может быть?

4. Какую версию PHP вы используете? __DIR__ был впервые добавлен в 5.3 (который был выпущен в 2009 году и прекращает поддержку в этом месяце).

5. PHP не волнует, какой разделитель каталогов вы используете. Косая черта должна работать как в * nix, так и в Windows.

Ответ №1:

Быстрый ответ

Вы должны быть в состоянии сделать это:

 require_once 'db_connect.php';
  

Дополнительная информация

require , require_once , include и include_once все одинаковы, за одним исключением: require выдаст фатальную ошибку при сбое, когда as include выдаст предупреждение.

Еще одна вещь, о которой следует помнить, на самом деле это поиск через директиву php ini include_path , поэтому, когда вы пытаетесь включить другой файл, php будет выполнять поиск по этим каталогам в порядке первой директивы.

По умолчанию эта директива обычно выглядит следующим образом: .:/usr/share/php:/usr/share/pear . Это может быть изменено с помощью ряда функций, даже php.ini о которых вы хотели бы знать:

  • set_include_path — Задает директиву include paths включать пути;
  • get_include_path — Показывает текущие включаемые пути;
  • getcwd — Показать текущий рабочий каталог;
  • chdir — Изменить текущий рабочий каталог;

ОБРАТИТЕ ВНИМАНИЕ, что при использовании set_include_path вы не добавляете в список, а переопределяете его значение; поэтому было бы разумно знать правильный способ настройки этого:

 set_include_path(get_include_path() . PATH_SEPERATOR . '/path/to/new/location');
  

Ответ №2:

Если файл, который вы хотите включить, находится в том же каталоге, это должно сработать:

 require_once 'db_connect.php'
  

Ответ №3:

Должно быть, какая-то ошибка в том, как вы пытаетесь добраться до пути. Вы можете использовать следующие функции php для его отладки.

  <?php
   print_r(get_included_files()); // Write this above the file that you are trying to include     
  set_include_path('path_to_your_directory'); 
  // This will set the directory for once in<br /> your page after setting the path use require_once with the file name straight away
 ?>