php require_once не работает так, как я хочу .. проблема относительного пути - PullRequest
3 голосов
/ 12 февраля 2010

У меня проблемы с назначением относительного пути для require_once. Я уверен, что это нечто простое, чего я не вижу ...

структура каталогов папок уровень 1: сайт уровень 2: включить уровень 2: класс

так ... site / include / global.php <- это то место, откуда вызывается автозагрузка функции сайт / класс / db.php </p>

когда я пытаюсь использовать

function__autoload($className)
{
     require_once '../class/'.$className.'.php';

}

я получаю:

Предупреждение: require_once (../ class / db.php) [function.require-Once]: не удалось открыть поток: нет такого файла или каталога

Неустранимая ошибка: require_once () [function.require]: Не удалось открыть обязательное '../class/db.php' (include_path = '.; ./ includes; ./ pear')

Что я делаю не так? Это будет работать нормально, если я добавлю файл global.php в папку класса, поэтому я предполагаю, что это мое плохое понимание относительных путей, которое вызывает проблему ..

Спасибо

Ответы [ 2 ]

10 голосов
/ 12 февраля 2010

require(_once) и include(_once) работают относительно пути первого сценария, то есть сценария, который фактически назывался .

Если вам нужно require что-то во включенном или обязательном файле и вы хотите работать с этим файлом, используйте

dirname(__FILE__)."/path/to/file";

или, как указывает @Arkh, начиная с PHP 5.3 и выше

__DIR__."/path/to/file";
0 голосов
/ 12 февраля 2010

Работает ли это (только Apache, я верю )

require_once($_SERVER['DOCUMENT_ROOT'] . '/class/' . $classname '.php');
...