set_include_path и file_exists

KhmelevskyY

Новичок
set_include_path и file_exists

Здравствуйте.
Я с помощью set_include_path установил пути, по которым нужно искать файлы при указании относительного пути в include() и require(). Теперь, мне перед include() файла нужно проверить его на существование, но функция file_exists() не ищет в каталогах, которые я указал в set_include_path. Как можно решить эту проблему? У меня пока только один вариант, но он какой-то корявый: получить все пути get_include_path, и в цикле попытаться найти указанный файл, прибавляя в начало файла путь с get_include_path.
 

mity

Новичок
Вы сами нашли единственное решение и ничего в нём корявого нет.

Уж не знаю зачем Вам потребовалась проверка на существование ставьте @ перед include и всё будет прекрасно работать.

Но сама идея поиска include файлов в куче папок является корявой. Представьте ситуацию, что у Вас в разных директориях будут файлы с одинаковыми именами, никто не гарантирует что php загрузит файл из первой директории.

Да сейчас у Вас всё прекрасно работает, а потом из -за добавления очередного include файла работа основного скрипта резко нарушится.
 

dimagolov

Новичок
RTFM
If the file can't be included, FALSE is returned and E_WARNING is issued.
Что мешает проверять результат include и не париться?

И когда это ты проверять собрался? В процессе исполнения или про подключении новых файлов в конфигурацию?
 

KhmelevskyY

Новичок
Автор оригинала: mity
Вы сами нашли единственное решение и ничего в нём корявого нет.
понятно, думал есть другое решение.

Автор оригинала: mity
Уж не знаю зачем Вам потребовалась проверка на существование ставьте @ перед include и всё будет прекрасно работать.

Но сама идея поиска include файлов в куче папок является корявой. Представьте ситуацию, что у Вас в разных директориях будут файлы с одинаковыми именами, никто не гарантирует что php загрузит файл из первой директории.

Да сейчас у Вас всё прекрасно работает, а потом из -за добавления очередного include файла работа основного скрипта резко нарушится.
я хочу бросить исключение, если подключаемого файла нет. Я не злоупотрябляю set_include_path, у меня там всего два пути, к моему фреймворку и к системным файлам (так например сделано в Zend Framework), функция __autoload автоматически пытается найти используемый класс в этих директориях.

Автор оригинала: dimagolov
RTFM

If the file can't be included, FALSE is returned and E_WARNING is issued.

Что мешает проверять результат include и не париться?

И когда это ты проверять собрался? В процессе исполнения или про подключении новых файлов в конфигурацию?
отлично, тоесть мне нужно перекрыть вывод варнинга при include с помощью @ и проверить результат на равенство false. Да такой вариант подойдет
 

Духовность™

Продвинутый новичок
хм, ситуация с фатальной ошибкой. когда нет подключаемого файла - можно смело материться без всяких исключений.
 

fixxxer

К.О.
Партнер клуба
resource [m]fopen[/m] ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

>> так например сделано в Zend Framework
Вот там через fopen(,,true) и сделано.

Тоже через зад, но другого способа пока нет.
 
Сверху