#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
?>