php require_once не работает так, как я хочу.. проблема относительного пути
У меня проблемы с назначением относительного пути для require_once. Я уверен, что это что-то простое, что я не вижу...
структура каталогов папок уровень 1: уровень сайта 2: уровень включения 2: класс
так... site/include/global.php<- это то место, где функция автозагрузки вызывается из site / class / db.php
когда я пытаюсь использовать
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 ответа
require(_once)
а также include(_once)
работать относительно пути первого сценария, т.е. сценария, который был фактически вызван.
Если вам нужно require
что-то во включенном или обязательном файле, и хотел бы работать относительно этого файла, используйте
dirname(__FILE__)."/path/to/file";
или, как указывает @Arkh, начиная с PHP 5.3 и выше
__DIR__."/path/to/file";
Это работает (только Apache, я полагаю)
require_once($_SERVER['DOCUMENT_ROOT'] . '/class/' . $classname '.php');