Как стать автором
Обновить

Комментарии 31

велосипед #100500 «Подготовка салатов из логики и представления методом смешивания без применения миксера». как-то так :-)
Вы правы в том, что я не вижу смысла заменять логику с пхп на нечто, что в конечном итоге будет все равно преобразовано в тот же пхп )) По-моему, пхп достаточно прост для верстальщиков, не встречал верстальщиков с таким барьером.
И рано или поздно в шаблоне кто-нибудь напишет mysql_query()…
Шаблоны сайта, также как и доступ к фтп, это не место для кого-нибудь.
На мой взгляд — для пхп разделение хтмл-верстки и пхп-кода надумана. В силу простоты языка пхп. Личный опыт работы в индустрии подтверждает это.
Это не место для кого-нибудь пока им пользуюсь я один.
Хотя меня и самого частенько разрывает желание сделать «попроще»: написать там css в html-е ну или там какие-нибудь данные получить в шаблоне пока никто не видит.
И вот если мне это удается, я, конечно, себе говорю: «вот щас клиенту покажу, и потом нормально перенесу в нужное место». Как правило это вот «потом» не наступает никогда.
Ну а так как в студии работаю ни я один — то количество таких вставок растет геометрически. И рано или поздно это все превращается в один большой комок лапши, в котором уже непонятно какой файл нужно править если я хочу изменить количество новостей на странице.
Архитектура приложения должна жестко задавать поведение разработки. Если что-то можно написать не там — это будет написано не там.
Я 7 лет руководил разработкой сайтов, с такой проблемой у себя не сталкивался. Возможно дело в организации процесса.
а сложные системы писали? или простые сайты странички?
Сложные — да, в том числе сиэрэм системы. С нагрузкой не более 4 запросов в секунду.
$fp = fopen($end, "w+")


За такое надо по рукам бить.
поясните?
Видимо это намёк на file_put_contents
Хм… ну тогда и мне тоже поясните что-ли :)
Открытие файла на запись в режиме «w+» я считаю в корне неправильным.
Если вы имели дело с большими нагрузками, то должны знать, что в такие fopen'ы может одновременно влезть несколько запросов.

Следует писать
$fp = fopen($end, "a+");
flock($fp, LOCK_EX); // блокируем файл
// делаем все нужные операции
flock($fp, LOCK_UN); // снимаем блокировку файла
Ясно. В своей практике вы сталкивались с таким конфузом. Объявите тогда и обстоятельства подобного случая. Что вы подразумеваете под большими нагрузками?

У меня были странички с посещениями 4 в секунду, при том что страничка перезаписывала 300 новых страниц, по указанной в статье схеме. Проблем не замечено.
Представьте ситуацию. Пользователи u1 и u2 выполняют запрос с разницей во времени 0.01сек, что намного меньше времени работы скрипта. Пользователь u1 очищает файл модификатором w+, пишет в него данные. Делает «еще что-то». В то время, как u1 делает «еще что-то», в этот процесс вклинивается u2, стирает файл, а это время u1 запрашивает его для отображения. Что увидит u1, думаю не секрет…
С теорией согласен. У вас реально были подобные случаи, ошибки?

зы. Я не сис.админ, но по-моему в апаче настраивается макс. количество одновременных соединений.
+ на подобного рода нагруженных проектах, на сколько мне известно, решение пишется сугубо индивидуальное, после анализа слабых мест и принятия какой-то внятной стратегии для оптимизации ресурсов. Возможно ваш опыт говорит иное.
Да, один раз было. Года 2-3 назад, точно не вспомню. Сейчас бы совершенно иначе выполнил реализацию алгоритма.
если в с чем-то не сталкивались в своей практике, то это еще ничего не значит. если несколько потоков создают\пересоздают файл, его обязательно надо лочить. ну или выставлять флаг, который кстати тоже надо лочить, если это файловая система.

а чем smarty со своим наследованием шаблонов не подошел?
У меня просто нет слов…
Изобретение Layout'a
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Погуглите на тему Layouts, Views, View model. Тот же Zend_View в качестве примера или Symfony. Идея использовать PHP в качестве шаблонизатора — хорошая (по скорости), но сейчас реализуют её совершенно по другому. Разделяйте мух от котлет, логику от представления, интерфейс от реализации.
Из придирок:

if ( !empty(load::$path[0]) ) — антипаттерн Magic Numbers, как минимум надо писать load::isIndex()
На кой Вам определять OS когда есть константы PATH_SEPARATOR и DIRECTORY_SEPARATOR?
Спасибо за замечание.
Код реально 2003-2004 года, видимо тогда PATH_SEPARATOR не увидел.
А какой смысл это выкладывать в 2011-м? Тем паче, что проблемы кода гораздо серьезнее, чем мои мелкие придирки (читайте дискуссии выше).
В 2011 все также просто и прекрасно работает.
Это Ваше мнение. Пусть так.
Посмотрите на Twig Template ( EN | RU )
Увидел расширение *.tpl, думал что-то интересное про Smarty, а тут — аля «изобретаем Smarty, ни разу его не видя» :))
С баша: изобрели терагерцовый процессор. Ура, можно писать еще больше говнокода!
Не обижайтесь, но изобретение велосипеда из костылей — не самая лучшая идея. Может посмотреть другие проекты, изучить код и логику, а потом уже изобретать что то по-настоящему полезное?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации