Проверка наличия файлов перед include

Fakir

в работе над собой
Проверка наличия файлов перед include

Господа!

Есть некий скрипт, механизм которого подразумевает порядка 5-10 вызовов include(), при этом заранее не известно существуют ли включаемые файлы.

вопрос: стоит ли перед каждым вызовом проверять file_exists() наличие файла, или же просто погашать @include()? Учитывая что вызов скрипта происходит довольно часто (50-100 раз в минуту)?
 

Фанат

oncle terrible
Команда форума
данный механизм является неправильным.
предположу, что в данном случае функция include() не нужна.

в любом случае, @ - глупость и головотяпство.
 

Fakir

в работе над собой
Неправильно ты имеешь ввиду включать столь большое количество файлов? Как быть если это требуется?

Автор оригинала: Фанат в любом случае, @ - глупость и головотяпство.
Согласен.
 

Фанат

oncle terrible
Команда форума
Неправильно включать PHP скрипты, наличие которых заранее неизвестно.
в этих файлах есть хоть строчка на пхп?
 

Fakir

в работе над собой
Да, есть.

Суть механизма следующая: читается некий HTML шаблон, находится в нем включения (что-то вроде фрагментов), и соответственно они и подгружаются. НО! Возможна ситуация что в шаблоне фрагмент определен, а на самом деле его нет (возможно по причине что его просто удалили, а возможно что в шаблоне указали, а сам фрагмент создали с другим именем или вообще не создали).
 

svetasmirnova

маленький монстрик
С абсолютными путями.
А вот это, ИМХО, плохо:
читается некий HTML шаблон, находится в нем включения (что-то вроде фрагментов), и соответственно они и подгружаются.
В том виде, что ты описал, во всяком случае.
 

Dreammaker

***=Ф=***
leonid_p, и будет мучаться..
По причине того, что file_exists операция трудоёмкая и чтобы избежать лишних затрат результат кешируется... Так, что сюприз может подкрасться незаметно.

Так,что скорее нужно перепроектировать приложение, чтобы таких проверок не было... Писать в базу шаблоны? Писать в один (несколько файлов), но с одинаковыми названиями, менять только включения? XML?...
 

SelenIT

IT-лунатик :)
перепроектировать приложение, чтобы таких проверок не было
...или делать эти проверки не при выводе, а при добавлении шаблона и удалении-переименовании "фрагментов" (если эти операции делаются через админку ЦМС).
 

Fakir

в работе над собой
to svetasmirnova: Что значит плохо? И чем же это плохо?

to Dreammaker: приехали. Ты всегда перекраиваешь проект, если находишь что-то, что может не совсем корректно?

Так,что скорее нужно перепроектировать приложение, чтобы таких проверок не было... Писать в базу шаблоны? Писать в один (несколько файлов), но с одинаковыми названиями, менять только включения? XML?...
Тут вообще ниче не понял, как ты можешь писать в один файл если нужно чтоб содржимое было разным. Писать в базу шаблоны? Насколько я понимаю это еще затратнее чем проверить файл и загрузить его.

-~{}~ 02.11.05 01:23:

SelenIT. да они делаются через CMS. Но, представь себе, что есть такие понятия как шаблон, страница и фрагмент. Вот все они могут включать в себя фрагменты. И в конечном итоге, при изменении (удалении) какого-либо фрагмента, мне нужно перелопатить все эти объекты (а их может быть 1000), на содержание имени фрагмента с которым происходит изменение (удаление).
 

SelenIT

IT-лунатик :)
Ну и что? Лучше же сделать это один раз при действии администратора (и просто блокировать это действие, если оно приводит к нарушению порядка в системе), чем делать нечто подобное при каждом хите, попутно пытаясь "замаскировать" ошибку? В конце концов, действительно можно хранить все связи "шаблон-фрагмент" в базе, тогда поиск зависимостей станет проще...
 

svetasmirnova

маленький монстрик
>Что значит плохо? И чем же это плохо?
У меня сложилось впечатление, что у тебя несмотря на использование шаблонов логика неотделена от вывода.

И ещё один момент. Возможно, я неправильно поняла, так что проясним:

Из посыла, что тебе нужно проверить именно файлы, подключаемые include, для которых обычный file_exists не подходит, я сделала вывод, что это могут быть библиотечные файлы, путь к которым прописан в include_path. Это так?

Вопрос №2. В шаблон ты инклюдишь скрипты, которые делают что?
 

Fakir

в работе над собой
SelenIT, нет, ты видимо не понимаешь. Ну буду я проверять все это, а зайдет какой-нибудь "свисток" через FTP, возьмет и с горяча удалит пару фрагментов физически, и как твои рекомендации помогут в таком случае?

svetasmirnova, нет, представь себе шаблон типа:

Код:
<html>
<head>
[frg pages.meta]
</head>
<body>

------ тело страницы -----

</body>
</html>
Вот обработчик находит в нем фрагмент "pages.meta.html(php)" что говорит ему что надо подгрузить его.
 

Dreammaker

***=Ф=***
Фанат, нужно читать мануал (не думал, что придётся тебе такое говорить).. (file_exists() и как следствие описание для clearstatcache())
Насчёт сюрприза: если даже кеш обновляется по актуальным данным, то при хорошей скорости замены данных может быть момент, когда информация с кеша считалась -> файл есть, но в тоже время его успели удалить.. Возможная ситуация? Редкая, да, но возможная...
Fakir,
Так этот юзверь сгоряча и движок может удалить, если на то пошло... :)
 

Fakir

в работе над собой
to Dreammaker: не спорю =) Но как показала практика, удаляют только файлы фрагментов. Я не пытаюсь решить проблему кривых рук пользователей, просто есть желание контролировать некоторые вещи.
 

SelenIT

IT-лунатик :)
...зайдет какой-нибудь "свисток" через FTP, возьмет и с горяча удалит...
а на кой этому "свистку" ФТП-доступ, когда специально для него есть ЦМС? В ней, имхо, и надо все вещи контролировать...
 

Dreammaker

***=Ф=***
Fakir, дык в этом случае лучше тогда в базе всё-таки хранить.. Тогда ему уже труднее будет добраться.. :) Разве, что на своём серваке полезет кроить мускуловские (или другой БД) файлы. + Действительно в базе связи хранить удобнее...
 

Fakir

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

Dreammaker. да, но затратнее :(

Кстати,

нужно читать мануал (не думал, что придётся тебе такое говорить).. (file_exists() и как следствие описание для clearstatcache())
Так ведь это и есть по сути ответ :) Если инфа такого рода кешируется, то значит время отработки file_exists() будет довольно маленьким. И если не брать в счет "сюрпризов", то в принципе то...

-~{}~ 02.11.05 02:16:

Однако...

You should also note that PHP doesn't cache information about non-existent files. So, if you call file_exists() on a file that doesn't exist, it will return FALSE until you create the file. If you create the file, it will return TRUE even if you then delete the file.
Сейчас попробовал сначала использовать file_exists() когда файл есть, потом быстро удалил, и file_exists() вернула false.
 
Сверху