Я программировал на PHP уже несколько лет и никогда не сталкивался с этой ошибкой раньше.
Вот мой файл widget.php :
require_once('fruit.php'); echo "I am compiling just fine!!!";
И файл fruit.php :
$bVar = true;
Когда эти два файла выглядят так, тогда все компилируется без ошибок, и я получаю сообщение об успешном компиляции « Я компилирую только штраф !!! ».
Теперь, в тот же момент, когда я перемещаю файл fruit.php на один уровень каталогов и меняю файл widget.php, чтобы отразить реструктуризацию каталога:
require_once('../fruit.php'); echo "I am compiling just fine!!!";
Теперь все внезапно, я получаю предупреждения PHP и фатальные ошибки:
Warning: require_once(../fruit.php) [function.require-once]: failed to open stream: No such file or directory in /webroot/app/widget.php on line 1 Fatal error: require_once() [function.require]: Failed opening required '../fruit.php' (include_path='.:/usr/local/php5/lib/php') in /webroot/app/widget.php on line 1
За все годы работы с PHP я никогда не видел require_once (), как раньше. Есть идеи?!?!
Возможно, вы находитесь в неправильном рабочем каталоге. Его плохая идея полагаться на него (за исключением того, что вы явно хотите получить к нему доступ) в любом случае. использование
require __DIR__ . '/../fruit.php';
или с пред-5.3
require dirname(__FILE__) . '/../fruit.php';
Напомните, что пути, начинающиеся с ..
, или .
не разрешены против include-path, но только против текущего рабочего каталога.
Помните, что во втором случае вы указываете путь, но в первом случае он использует ваш путь include. Возможно, вместо того, чтобы явно указывать .. во втором случае вы можете изменить свой путь include.
Я знаю, что вопрос старый, но он по-прежнему актуальный.
По моему опыту, директива open_basedir , скорее всего, вызовет эту проблему.
require_once('fruit.php');
Это ищет файл fruit.php в том же каталоге, в котором находится widget.php, независимо от того, что представляет собой текущий рабочий каталог.
require_once('../fruit.php');
Это ищет файл fruit.php в каталоге выше текущего каталога, а не в каталоге выше одного widget.php.