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');
Другие вопросы по тегам