У меня проблема с требованием некоторых файлов, PHP говорит мне, что эти файлы не существуют, но когда я просматриваю каталог, он говорит мне, что он существует.
Я упростил файлы для require
функций, и он все еще не работает.
Вот моя настройка:
root/ test.php test/ test2.php sub/ test3.php
кroot/ test.php test/ test2.php sub/ test3.php
test.php
echo 'test'; require 'test/sub/test3.php';
test / test2.php (файл, который по какой-то причине не включается)
echo 'test2';
тест / суб / test3.php
echo 'test3'; /* because we are still on test.php, the include path is the root that means the following would work: require 'test/test2.php'; however I don't know this path in this file. (it's dynamic) I thought this would work: */ set_include_path(dirname(__FILE__)); require '../test2.php';
РЕДАКТИРОВАТЬ
Хорошо, когда я изменил это:
set_include_path(dirname(__FILE__)); require '../test2.php';
в
set_include_path(dirname(__FILE__)."/../")); require 'test2.php';
оно работает. wtf php?
Теперь это мой вывод:
testtest3 Warning: require(../test2.php) [function.require]: failed to open stream: No such file or directory in siteroot/test/sub/test3.php on line 6 Fatal error: require() [function.require]: Failed opening required '../test2.php' (include_path='siteroot/test/sub') in siteroot/test/sub/test3.php on line 6
Если я добавлю следующий код в test3.php
:
echo '<pre>'; print_r(scandir(dirname(__FILE__).'/../')); echo '</pre>';
Я получаю (как ожидалось) следующее:
Array ( [0] => . [1] => .. [2] => sub [3] => test2.php )
Я думаю, что я схожу с ума, когда читаю ошибки, которые мне кажутся, как PHP говорит мне, что файл не существует, точно в том месте, где находится файл.
+ Изменить
set_include_path(dirname(__FILE__)); require '../test2.php';
в
set_include_path(dirname(__FILE__)."/../"); require 'test2.php';
Это может быть проблема с символическими ссылками? Пытаться:
set_include_path(realpath(dirname(__FILE__))); // added realpath here
Также попробуйте:
require(dirname(__FILE__) . '/../test2.php');