Pull to refresh

Comments 405

>> Ни одного класса в коде не найдено.

>> $UserChek->BadUserFormaWindow();

А объект тогда откуда взялся :)?
посмотрел. согласен, неправ. претензию снимаю, пост редактирую
Это, кстати, очень по ООП :) объект $UserChek :)
«Ни одного класса в коде не найдено» — чего ж тут плохого? )
… имя стола базы записей в базу
о боже
о боже!
но самое печальное, что такое встречается повсеместно во многих платных и гораздо более дорогих продуктах (например про netcat тут уже была статейка)…
мне кажется пора уже статью в кодексе вводить, по которой за представление такого качества продукта — наказывать самым жестким способом!
Да, казнить за такой код, на лобном месте )))
Вы предлагаете вводить показательные расстрелы программистов? Каждого второго тогда казнят.
ох уж, этот несбыточный идеальный мир… =)
Каждого первого. Кто скажет, что не писал кода, за который ему сейчас стыдно, пусть бросит в меня камень.
писал, но не продавал :)
писал, продавал, даже пишу и продаю :) а куда деваться, сроки, позднее переделываю если время есть :) стыдно
Солидарен. Последнее время что-то особенно жестко… Большинству посрать на всё кроме сроков.
Вот и получается ситуация про которую еще Райкин рассказывал:… нам платят за коликчество, а не за какчество, так, что скажите спасибо что рукав вместо гульфика не пришили…
=(
Ненене… не «посрать на все, кроме сроков», а просто «сроки превыше всего». Очень разные вещи и людей с такой позицией понять очень даже можно.
Сколько людей поверили :)
UFO just landed and posted this here
Верно. Но на заре своей юности лично я каждый свой говнокод продавал лишь одному покупателю и стыдился его тиражировать.
Тоже писал… но продавать о_О неее…
да ладно, во время написания разве вы не считали свой код идеальным? :) если не считали -то почему не писали идеально(по вашему мнению). Имхо, это уже опытный программист с миллионами строчек кода может себе позволить написать какие-то вещи влоб и плохо(сознавая это) для скорости лишь бы работали(кто из программеров со стажем не писал быстрых решений например для разового парсинга текста, когда накодить быстрее чем делать руками), а начинающий всегда считает что у него идеальный код :)
Да нет, почему, я писал и знал, что здесь надо бы и функции использовать и прочие интересные штуки, но вломы было копаться в доках, чтоб узнать как это оформлять, по этому я был уверен что пишу ху*ню, но она работала и я её не продавал :)
Вот та же ситуация ))
У меня, когда начинал программить, было ощущение несовершенства — вроде все верно, на кусочки разбито логично, работает даже — но что-то не то, поделкой пахнет… потом прошло — но и код переменился :)
я не раз смотрел на код, написанный год или более назад с ужасом, хотя когда писал -казалось все очень неплохо, наверное только последние полтора года ужос притупился или код правильным стал
да уж, согласен… как то мне попал на глаза код vBulletin, первые 5 минут я был просто в шоке… от количества eval'ов…
Таким образом у них обрабатываются шаблоны — момент спорный, согласен.
В остальном в vBulletin довольно всё прилично
Зато способ этот довольно таки быстрый…
А в остальном, да… После 3.5 они действительно прилично все переписали
eval-ы в версии 2.5 — это единственное, что я почерпнул хорошего из кода. Мы с <~ibear> уже давное перебрали весь fobo.ru, шаблоны до сих пор еваляться.
Чего за минус? Evalы не нравятся? Обоснуй!
Функция eval — зло потому что она:

1. Работает очень медленно.
2. Не кешируется всевозможными кэшерами опкода (в отличие от того же содержимого, но сохранённого в php файле).
3. Открывает потенциальную дырку в безопасности.
4. Уродлива идеологически, прививает дурные привычки.
1. Я бенчмаркал протим str_replace способа. Медленнее, но не очень. Зато по объему памяти экономнее.
2. Согласен — но мы говорим не о коде всего проекта, а о шаблонах. Отеваленые шаблоны вообще кешировать можно и нужно другими способами.
3. Еще раз уточню, мы говорим о шаблонах.
4. См. пункт 3.

— Сдается мне, что вы не совсем понимаете, как eval используется в качестве шаблонизатора. Сейчас попробую найти небольшой кусочек кода, чтобы продемонстрировать.
Я прекрасно знаю, как использовался eval в vBulletin, я с его кодом впервые познакомился 7 лет назад.

2. Я прекрасно понял, что речь только о шаблонах. И тем не менее, eval выполняет очень много шагов (см. сообщение slik ниже), которые будут выполняться даже при наличии кешера. Зачем такое счастье нужно?
3. Я это прекрасно понимаю. Только вот в том же vBulletin шаблоны редактировались пользователем через админку.
4. Дурные привычки от этого не стали хорошими.
Спасибо, с вами интересно поспорить.

2. Чтобы упростить работу с ними. Очень удобно вызывать eval из метода, когда все нужные переменные находятся в области его видимости. Таким образом мы можем использовать средства php (вы же наверняка знаете, что php придумался как шаблонизатор.) для управления потоком вывода (циклы, условия и т.д.), при этом не засоряя бизнес-логику HTML вставками. При этом еще и сам шаблон выглядит очень опрятно.

Я занимаюсь в основном хай-лоадом, поэтому для меня нормально класть сгенеренный html в кеш. Таким образом евал не вызывается так часто, как это могло-бы быть.

И за весь мой опыт разработки шаблоны через eval ни разу не были бутылочным горлышком. Вот дисковые операции при чтении файлов шаблонов — становились.

3. Простите, я не понял, на что влияет место и способ редактирования шаблонов?

4. Для меня это не привычка, а осознанный выбор.
2. Чем eval() проще чем include()?

Сгенерированный html — это хорошо, только на серьёзных проектах, где нужно отдавать по большей части не статику, а активно генерируемый/обновляемый контент, это помогает, но не очень, т.к. динамический шаблон приходится дёргать чаще статического кэша.

3. По идее, если доступ к админке имеет человек не совсем понимающий что к чему, он не должен суметь наломать дров. Или, если к админке сайта получил доступ «кул хацкер», то он не не должен суметь оставить бекдор. eval же открывает тут широкое поле для злоупотреблений/фатальных ошибок.
2. тем что в нем не нужно писать никаких php инструкций, а просто строку HTML-разметки. Это дает ощущение того, что перед вами действительно шаблон, а не кусок недокода.

3. Мы уже давно ушли от vB и его админки. К шаблонам можно достучаться только по FTP.
2. Если там исключительно HTML разметка, зачем тогда вообще eval?

3. Если шаблоны итак лежат файлами на сервере, не проще ли делать include?
2. Вы же говорите, что видели шаблоны vB. Они примерно такие:



$thread->name
$thread->description
$postList

3. Следует из 2.
м2. Вы же говорите, что видели шаблоны vB. Они примерно такие:

<html>


<div>$thread->name</div>
<div>$thread->description</div>
<div>$postList</div>
</html>

3. Следует из 2.
Хм. Если всё, что нужно — это вставка переменных, то почему бы не использовать heredoc синтаксис?
Интересная идея. Надо будет поразмыслить. Спасибо.
Вам не кажется, что даже эту ленту комментариев можно кешировать в html и обновлять по мере появления новых.

Подкрашивать непрочтенные мной можно средствами JS.
Можно. Я повторяю: если сайт в основном статичный, то там решает статичный кэш, сохраняющий результаты работы динамического шаблона.

Но если число вызовов динамического шаблона начинает приближаться к числу вызовов статичного кэша (а его тоже нужно обновлять, что тоже не бесплатно), то цена скорости динамического шаблона круто меняется.

Хай-лоад хай-лоаду рознь :)
Согласен с вами. Но я все-таки не верю, что использование evala приведет к каким-то фатальным последствиям. Для меня плюсы в удобстве пока выше. Может быть я еще не сталкивался с такой ситуацией, где это бы стало катастрофой.
Кстати, а как вы шаблонизируетесь?
Компилирую шаблоны в нативный php (в smarty сделано так же). Шаблонизатор потом эти файлы подключает (он заботится о плагинах, переменных и прочей мишуре).
Каким образом картинка сравнения эффективности разных кэшей опкода связана с обсуждаемой темой?
Если посмотреть внимательно, то можно увидеть, что кэшеры не все справляются с кодом. Вы тут приводите пример смарти, как хорошего шаблонизатора. Вы также упоминали про неэффективность эвала, ставя ему это в минус. Эта картинка показывает, что у смарти с эффективностью даже с кэшерами всё плохо.
по моему вы ошиблись, было написано что шаблонизатор TiGR'а компилирует шаблоны в нативный php, как это делает smarty, о использовании smarty TiGR'ом — нислова…
Да, smarty я не использую.
Вот поэтому, очевидно, смарти и показывает жуткую неоптимизабельность кешерами, и поэтому же, то же самое происходит и с шаблонизатором TiGR'а.
Во-первых, производительность смарти выросла в два раза с кэшерами.

Во-вторых, не ясно что именно тестировалось — первичное обращение к шаблонам (компилирование) или повторное использование скомпилированных шаблонов.

В-третьих, данные ни в коем случае не являются сравнительными, т.к. мы не знаем что именно тестировалось, как тестировалось. Мы даже не знаем каких размеров были шаблоны, какие плагины smarty использовались!

Эта схема показывает не соотношение производительности разных php скриптов, а уровень оптимизации достигаемой при использовании разных опкешей.
> Во-вторых, не ясно что именно тестировалось — первичное обращение к шаблонам (компилирование) или повторное использование скомпилированных шаблонов.

Если подумать, то можно понять, что раз измерялось RPS, то ясное дело, что обращения были множественные, а стало быть шаблоны скомпилировались при первом же обращении.

> Эта схема показывает не соотношение производительности разных php скриптов, а уровень оптимизации достигаемой при использовании разных опкешей.

На примере смарти она показывает, что ни один из более-менее известных кэшеров ему не помогает.

По поводу остального — разумно предположить, что смарти был в дефолтной поставке. И размеры шаблонов, скорее всего, были из тестов смарти.
То есть шаблоны были из тестов смарти.
расширю первый пункт: работает очень медленно потому что запускает еще один интерпретатор, а это довольно громозко (инициализация, лексический разбор, компиляция в опкод, и, к этому еще, встраивание опкода в основной опкод)…
Мы вот тут буквально две недели назад с <~ibear> экспериментировали. Заменили eval на include. При включенном xcache разница при генерации была в ~5 миллисекунд при 1000 итераций в пользу include
include действительно работает почти так же как и eval, но вот средства кеширующие опкод, с eval'ом не умеют пока-что работать…
Так я и говорю, что опкод-кешер (xcache) не дал значительного преимущества include перед eval
Теперь понятно почему в названии буква «v». Надо было назвать «evalBulletin».
предлагаю сделать доску позора!
Вы бы прочитали топик про неткат, прежде чем позориться публично.
«Поиск» config.ini просто убил xD
> Ни одного класса в коде не найдено.
}else $UserChek->BadUserFormaWindow();

я нашёл =) Кроме шуток, дейстивельно, ужас.
Я постоянно с таким сталкивался, уже привык. Бывает и не такое, вообще это обычное явления для всяких мелких платных проектов на php типа магазинов, mlm движков и тд. Кстати этот код еще более менее ок) Бывает много хуже.
ну не сказал бы я, что phpshop такой уж мелкий магазин. по популярности среди народа на втором месте после oscommerce. написан очень криво, верстка вобще не отдается ничему, кроме ие6…
Первый раз если честно слышу о нем, вернее может натыкался, но не обращал внимание. Да и в гугле на него ссылок на два порядка меньше чем на oscommerce
Кстати с OsCommerce я сталкивался, тоже довольно неудобен, когда что-то нужно доработать. Мешанина HTML и PHP, генерация input'ов на форме при помощи функций (в упор не понимаю, зачем, там функция места занимает больше, чем та же строка на HTML).
Правда сталкивался я с ним всего пару раз по мелким заказам, может и есть там какая-то своя логика, но всё равно, первое впечатление сосем не положительное.
А куски кода, приведённые автором, просто ужасны. Как ТАКОЕ продавать вообще можно? И интересно, как сами авторы в этом хламе разбираются.
oscommerce такой же кривой как и phpshop. чуть прямее, но все же. а продавать можно все, что люди покупают. как в одной известной сказке говорилось — покуда есть на свете дураки, обманом жить нам, стало быть, с руки… правда тут не обман, а чистой воды халтура, но суть та же.

от этой кривизны, кстати, так часто и появляется желание создания собственной модульной CMS, но продуманной на все 100%(по мнению создателя).
В свое время дали заказ на смену дизайна(вместе с версткой дизайна) в нем…
Очень долго и мучительно разбирался в этом чуде. Некоторые вещи даже не понятно как работали.
Подумал — может скрипт не полная версия, какого же мое удивление было, оказалось что заказчик лицензию покупал к этому чуду и код действительно такой о_О
поддерживаю про PHPShop. Это ужасно… просто ужасно.
Пришлось как-то исправлять ошибку в коде (заказчику надо было очень срочно)… просто каша из пхп и хтмл.
Это еще коммерческий — коробочный… А было сайт переделывал… Там элементы массива проверялись каждый по отдельности (без использоваия цикла) со 100%-ым дублированием кода…
всмысле так?
if ($arr[1] == 1) {}
if ($arr[2] == 1) {}
а большой массив был? :)
10 элементов… В общем обработчик формы с 10-ю полями для загрузки картинок…
если «пипл хавает», то его продают, если оно выполняет свою задачу, то клиент доволен и ему глубоко плевать что там в коде кружочки или треугольнички…

с точки зрения программера, да код не есть гуд.
Да, но как с таким подходом к кодингу учесть возможную «дырявость»?
ну не факт, что она учитывалась, да и если знать как и что закрывать. то это можно сделать при любом подходе.
С учётом того что это коробочный продукт, количество взломов сайтов с этой поделкой должно приближаться к 100%.
Наверняка клиент будет доволен до первого изменения на сайте. Когда изменения начнут влетать в копеечку ;-)
Потому, наверное, разработчики и затребовали «непомерную сумму» ))
Возможно, авторы сего продукта будут мотивировать такой подход к делу тем, что «не важно как это написано, главное — что оно работает». Быстрей бы денюжку срубить.
Так поддерживать это убожество сложнее, чем хорошо структурированый код(ооп и тд). Компания могла бы сэкономить на программистах и уменьшить сроки разработки.
/Сарказъм:
Как видим, компания уже сэкономила на программистах. Возможно, и сроки урезали.
Есть мнение, что в компании вообще один программист и он на себе не экономит :)
Что поделать — кризис, кризис
Ради интереса посмотрите cs-cart.com, я рад что принимал там участие непосредственное. Каждая мелочь отточена была — мне на самом деле любопытно мнение разработчиков.
Если я отвечу чем — это будет моё и наверняка необъективное мнение так как я делал работу с большим удовольствием. Я не пытаюсь пропиарить продукт — он итак сильно на ногах держится без моего комментария на хабре. Просто мне хочется элементарно чтобы другие разработчики посмотрели на продукт который делали с любовью к своей работе, с большой отдачей.
Ну, если Вы мне ответите в личку, я может быть не буду покупать ViArt, как собирался, а куплю cs-cart. Но только если он лучше. Если нет — можете не отвечать :)

P.S. PHPShop — ужос. Сразу отмёл его в качестве платформы для магазина.
а можно узнать, почему не вариант, например, magento?
Ну, как Вам сказать… Тяжеловат, медленноват и с непонятной политикой платности/бесплатности. Как-то так :-)
На самом деле политика очень даже понятная. Открытая лицензия, а создатели зарабатывают на поддержке и доработке. Т.е. если хватает квалификации самому поставить-настроить-доработать, то можешь смело и бесплатно пользоваться.

А что тяжеловат и медленноват — это да. Требования у него (в том числе и к квалификации) неслабые. Но и мощный соответственно.
мы сейчас просто рассматриваем вариант миграции, и выбираем между мадженто и виартом. не можем решить.
медленность там решаема, если верить постам в коммьюнити. в планете тяжести — если вы о том, что в нем очень много всего, то я вот не уверена, что это минус… хотя разобраться поначалу непросто, но потом все знаешь:)
а в политике мне только непонятна жуткая цена за enterprise edition, но она меня не касается:)
Бегло ознакомился. Код, похоже, заточен под PHP4. ООП не используется. Часть кода закрыта через Zend Optimizer. Оформление исходников нормальное, но вот такие куски просто убивают:

if ($setting_name == «site_map_block») {
include_once("./blocks/block_site_map.php");
site_map($setting_value);

} elseif (preg_match("/^a_subcats_(\d+)$/", $setting_name, $matches)) {
articles_categories($setting_value, $matches[1], "", «a_subcats»);
} elseif (preg_match("/^a_search_(\d+)$/", $setting_name, $matches)) {
articles_search($setting_value, $matches[1], "");
}

Дизайн просто никакой. Верстка местами неряшливая (см. меню Orders). Много, на мой взгляд, лишнего функционала (Forum, CMS, HelpDesk). Если вам реально нужны такие вещи, стоит подумать о Joomla+VirtueMart+компоненты.

Руссификация… Блин, лучше бы ее вообще не было. К тому же браузеру кодировка не отдается, из-за этого я вижу строки типа "Öåíà". Очень грубый прокол.

Формы сильно перегружены полями ввода. Двойка за юзабилити.

Понравилась задумка с «Options & Components». Как я понял, через Options можно можно указать, что у вас на складе, скажем, 8 футболок белого цвета и 4 красного. Другие движки тоже позволяют задать параметры товара, но без привязки к количеству. Как результат, «Извините, футболки данного цвета уже нет на складе». Даже в cs-cart такого не нашел. На этом достоинства заканчиваются.

извините, а вы про какой магазин сейчас говорили? и, кстати, в cs-cart последняя фишка тоже есть — option combinations называется
Я говорил про ViArt. Большущее спасибо за наводку насчет option combinations, проверю.
не за что, если глубже начать изучать cs-cart, то столько всего еще полезного можно найти )
Да, сейчас cs-cart выглядит неплохо, существенно получше, чем x-cart. :)
о… в 2004 году x-cart была просто песТня)
UFO just landed and posted this here
смотрим на cscart год, тоже не фонтан, честно говоря. бизнес-логика в темплейтах, сериализованные массивы в БД (когда часто надо только одно из их полей), выдача AJAXом целой страницы ради смены одного поля (и парсинг всего этого HTML)…
да и 400 запросов при создании главной страницы немного удивили.
Вы вероятно смотрели старую версию. Она существенно обновилась.
скорее всего.
в нашем случае, однако, это не помогает — мы делали очень много кастомизаций, в т.ч. починку багов, и нам сейчас обновиться будет очень непросто.
Не уверен что прям совсем каждая.
«В наличии: 50 штук(-а)» — так штук или штука?
«Поиск товара или выбрать» — прикольно звучит, но открывается почему-то выбор из артикула, а не из товара.

И таких мелочей еще много :(

Хотя в целом довольно неплохо
Выглядит красиво, но сразу нашел косяк — на странице demo.cs-cart.com/ картинки у продуктов больше чем указано в <img width="" height>. Демо сайт вроде на русском, а выбор валюты ограничивается долларами, евро и фунтами, мелочь конечно, но неприятно.

А чтобы судить о внутреннем устройстве, нужно его сначала увидеть. Где можно посмотреть исходники?
Должна быть доступна для скачки триалка. По поводу языка и валюты — магазин ориентирован на западный рынок. Но перевести не проблема — там просто всё.
Нехорошо с вашей стороны предлагать гемморой читателям хабра. Если уж сказали оценить, то дайте ссылку на исходники. Я потратил время на регистрацию, и увидел что меня просто послали:

Free 60-day trial version
Download failed.

Your download request could not be processed as the specified store URL is already registered in our license database and there is a full commercial CS-Cart license issued for this website URL.
может быть стоит прочитать, что написано в «послали»?
URL другой надо было указывать. Я как раз вчера скачал без проблем. Кстати, поставить таки не смог. На этапе подготовки БД ошибка в скриптах. Но это дело поправимо, обязательно добью. Чертовски хочется на cscart изнутри посмотреть. Продукт заинтересовал приятным дизайном. Админка настолько удобна, что все клоны osCommerce просто отдыхают.
Мнение менеджера web-проектов. =)

Скин написан на Smarty. Вставок кода не заметил. Вёрстка блочная. Форматирование исходников аккуратное. Система именования переменных внятная, соответствует стандартам. ООП используется, но без фанатизма.

Еще раз подчеркну очень хорошую проработку дизайна и юзабилити. Готов признать, что мне есть чему поучиться. Некоторые фишки вижу впервые и они реально удобны.

Нашел и недостатки. Проблемы при установке под Windows. Сразу видно что линуксоиды писали. Товар в корзину можно положить без уточнения атрибутов, что не есть хорошо. «В наличии: 50 штук(-а)» действительно режет глаза.

В целом же продукт на редкость добротный. Снимаю шляпу перед ребятами из Simbirsk Technologies.
Код не смотрел, но фронтЭнд очень порадовал, все продумано и правда с любовью делали
вобщем зачет
написано конечно страшненько, но ведь работает! =)
работает конечно страшненько, но ведь написано! =)
страшненько конечно страшненько, но ведь страшненько!!!
работает-то работает, но вот сколько программистов намучились с доделыванием таких поделок
им за это деньги платят.
они за это деньги получают ))
И мы за доделывание получаем хорошо же )))
«Имя стола базы записей». Блеск. Степан, спасибо, порадовали всю нашу компанию :)
зато они его продают… кажется это зависть :) но конечно на уязвимости Вам следовало сообщить им прежде чем публиковать код на удаление записей ;) так это похоже на вредительство
это в админке.

сообщать о тысячах уязвимостей в коде я не считаю возможным. кроме того, данный код легко получить всем, кому интересно.
Вредительством было бы замалчивать от потенциальных покупателей ужасное качество продукта.
UFO just landed and posted this here
$sql=«UPDATE ».$SysValue['base']['table_name27']."
SET
login='$login_new',


Голубая мечта хакера. :)

Но массив с индексами типа 'table_name27' наводит на мысль: а не были ли отдельные части кода сгенерированы каким-то автоматическим средством?
javascript-пакеры подобным образом кромсают названия переменных (с php-пакерами не встречался :) )… но тут… чтото сомневаюсь
Да, хакерам скидки :)
Тоже вначале подумал про кодогенерацию, но «характерные» комментарии вкупе со стилем включения других файлов заставили отбросить эту версию. Да и на job security не похоже.

В этом продукте маркетинг явно превалирует над техничесткой составляющей.
«Индус», однако, это не национальность.
Ну да, указание на религию никогда и не было национальностью.
интернет-магазин на пэ-ха-пе работает, да? а написан, стало быть, криво, да? и тем не менее работает? хм… чу-де-са!
Руйню сморозивши?
PHP это инструмент, и я осмелюсь сказать — хороший, годный инструмент в правильных руках грамотных разработчиков. И на С можно навернуть такого, что лобковые волосА дыбом встанут.
Как же запарили эти тролли! Если ты быдлокодер, то хоть php, хоть java — все равно будешь писать быдлокод!
У одной моей знакомой небольшой, но очень гордый магазинчик, сделанный на сабдже. Несколько раз она просила там что-то подправить, несколько раз я, перекрестившись, лез в этот код и плакал.
Однажды неразобравшись в хитросплетениях кода, я обратился к разработчику за документацией по API. Был получен ответ (дословно): «Если будет что-то непонятно в коде — Вы у нас спрашивайте».
Мои рыдания стали слышны у соседей. А знакомую всё боись расстраивать, что она не очень разумно потратила деньги.
Только по-моему это shop-script, а не PHPshop.
shop-script не менее ужасен. Я ниже о нём немного написал.
сто пудов, одна верстка чего стоит… в бесплатной версии, но оно работает! :)
Вёрстка, да, тоже — находил там нарушения табличной структуры. То ли забытые td, то ли ещё что-то. Уже не помню точно.
А работает оно ровно до первого решившего проверить на инъекции ^..~
UFO just landed and posted this here
да, с shop-script сталкивался
говнище то еще
UFO just landed and posted this here
Програмеров и правда этот код заставляет ужасаться. Я без лазания в код был в легком шоке от требований — PHP4, register globals on. Потом еще увидел админку на фреймах и дизайн интерфейса в стиле helloWin'98. И мне тогда все стало ясно. А сейчас еще и сорцы =)

Но в нем есть некоторые + для комерсов — это наличие встроенной из коробки связки с 1С и прочие подобные вещи. Видимо по этому и берут — альтернатив за те же деньги нет. Или есть?
Альтернатива есть, не сочтите за рекламу :) promofront.ru
А где скачать и посмотреть код?
«Мы бесплатно сделаем вам сайт (с магазином) и бесплатно разместим в сети. А платно будем только продвигать.»
Кто из заказавших может составить отзыв о качестве?
password='".base64_encode($password_new)."',
Это что-то новенькое.
Шоб никто не догадался! Видимо им не рассказывали что base64 это как-бэ обратимый алгоритм и хранить в нем пароли как-бэ не кошерно
MD5 тоже обратимый, в принципе. Правда, обратить его очень сложно…
Мне аж интересно стало, может вы напишете статью где осветите этот животрепещущий вопрос?
Ну может быть и статью следует написать… Но, к слову сказать, MD5 — открытый алгоритм шифрования :) А разработан он настолько профессионально, что дешифровать его очень и очень сложно. Все приходят к выводу, что якобы невозможно.
md5 это алгоритм не шифрования, а подсчета контрольной сумы :)
интересно как вы «дешефрируете» 4.5Гигабайтовый образ DVD диска из 40-символьного хеша? :)
Блин, я «обывательскими» понятиями фигурирую :) Спасибо за просветление.
UFO just landed and posted this here
это хэшалгоритм, его невозможно дешифровать в прямом значении этого слова, можно подобрать коллизию, но не больше.
Вы ошибаетесь, у md5 есть уязвимость, можно подобрать коллизии(т.е. найти другую строку, которая дает такой же хэш), но это не значит, что вы сможете получить строку по которой был сделан md5-хэш.

ЗЫЖ логически подумайте, размер строки получаемый после применения вами «функции» md5, к любому тексту(пусть он хоть 100МБ), всегда одинаковый, если можно было сделать обратное преобразования, то получили бы идеальный архиватор :)
В принципе, это никому ещё и не удалось, получается. Но суть в том, что это открытый алгоритм шифрования. Никто не знал? о_0
Ну да, это явное преимущество. Но представить только, что пароль от 6 до 16 символов в длину, например. А из хэша мы получаем список соответствующих ему входящих значений… Во сколько раз вырастает вероятность узнать пароль?
да станет полегче.

75d2c6d2283f7b76f402e5f022f67032
когда вкскроете маякните ок?

Ну к тому времени я уже про этот пост забуду.

Жопа в том, что подобрать входящие строки (с учётом появления функции «unmd5» какой-нибудь, которая бы возвращала массив с подходящими значениями) для md5(md5('[password]').md5(md5('[password]'))) не очень-то возможно.
Вы идиот и не лечитесь.
Давайте я щас придумаю простой «открытый алгоритм шифрования», а вы мне расшифруете результат его работы.
Итак алгоритм: берем остаток от деления числа на 5. Использовав этот «алгоритм шифрования» на каком-то числе, я получил 3. У вас есть «открытый алгоритм шифрования», есть результат работы этого алгоритма. Попробуйте восстановить исходное число.
А Вы дебил? Я сказал, что он простой?
Вы же сказали что для «сложного» MD5 вам понадобится много времени. Так обратите хотя бы «простой» алгортим.
Я прав? «Parlament» :)
да, но если б его не было в rainbow таблицах то перебирать оч долго.
подскажите метод :) хотя бы ссылку, где есть метод обратной функции MD5
Брутфорс по словарям.
интересный способ «обращать» :)
Ага. Как обратить ещё не придумали (дело времени). Поэтому пока что этим методом ограничиваются.
Вон, чуть выше говорят, мол, интересно, как вы «дешефрируете» 4.5Гигабайтовый образ DVD диска из 40-символьного хеша? :)
Пока что я читал про пару уязвимостей md5-sha-подобных хэшей. И это были уязвимости из разряда коллизий, т.е. практической пользы с этих уязвимостей ровно ноль.
Дык хэш-алгоритмы потому и могут только по словарям взламываться, что изначально создавались как необратимые.
ну тогда куда уже без такого полюбившегося способа, как терморектальный криптоанализ.
Это же не наш метод :)
Так смешенее:

echo unmd5(md5(file_get_contents('[ну а тут путь к образу какого нить DVD]')));
strlen(md5(file_get_contents('[ну а тут путь к образу какого нить DVD]')))) === strlen(md5(file_get_contents('[FDD 3,5inch]'))));

«Зачем платить больше?»
MD5 какбэ хэш-алгоритм
Просто ребята задумались, как бы получить из пароля кашу, и уметь его проверять. Каша из base64 видимо их визуально устроила. Никто ж не догадается, фигле :)
Идея в другом — вместо того, чтобы сделать обнулялку админских паролей, они сделали подстматривалку, т.е. по факту бэкдор. Если бы пароли шифровали не бейзом, а мд5, то получить список паролей они бы не могли, а следовательно не могли бы осуществлять «недокументированную техническую поддержку» :)
Умение продать себя и свои услуги зачастую компенсирует качество продукта.
Да вы ничего не понимаете, ребята же бабки зарабатывают. $)
ну норм) я думал что все пшп-ники так пишут) обычно когда я работаю с пшп проектами там такая каша)

просто удивительно, что вас, пшп девелопера это еще и удивляет)
Очень приятно осознавать, что я не отношусь к такой категории пшп-ников :)
увы, не вы один так думаете… что пхп — такой вот мерзкий язык, а те, кто на нем пишут — недопрограммисты.
грустно.
на самом деле пшп не такой уже плохой, в плане синтаксиса

но то что он интерпретируемый
и нет дебагиров нормальных, которые подошли бы ко всем решениям

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

вот и по этому такой гавно код)
эээ… обычно такое разделение все же на уровне фрэймворков появляется. Что в яве или си шарпе, как в языке, заточено?
ну ясное дело что нет)

но первоначально с этими языками идет какой то дефолтный фреймворк
Ну… Zend Framework, можно считать почти дефалтным :) От разработчиков ПХП, а если берете платформу зендовскую, то он там даже в дистрибутив входит. На ПХП есть несколько достаточно мощных фрэймворков — есть из чего выбрать.

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

кому-то это мешает? вы решаете на нём урчп чтоли, чтобы вам производительность самого интерпретатора мешать начала?

> да и нет, первоначальной заточки для разделение на презентацию, бизнес-логику, и базу данных

а где она есть? кто мне мешает сделать:

int main(int argc, char *argv[]) {
printf("Цэ какбэ не имеет первоначальной заточки на разделение чего-то там, про что я слышал где-то там");
}

> вот и по этому такой гавно код)

такой говнокод не потому.

> на самом деле пшп не такой уже плохой, в плане синтаксиса

еще один судитель языков по синтаксису, сколько же вас развелось…
В коде на цэ внутри printf-а тэги. Их пожрал пхп-парсер хабра из расовой справедливости :)
та не, я безумно люблю пшп)
в Zend Studio for Eclipse более чем адекватный дебаггер/профайлер, примерно такой же в NuSphere PhpEd (только для Win/Linux), но в студии все равно получше и покачественнее
написать кривой и не грамотный код можно абсолютно на любом языке
Но почему-то на PHP он встречается в разы чаще, чем на других языках.
Потому что низкий порог входа. Попробуйте на C++ начать начать что-то писать за 2 дня.
Да я и сам это прекрасно знаю. Просто оправдывать похапе тем, что на других языках тоже можно писать говнокод, как-то неправильно.
ПХП всегда был языком быдлокодеров, и всегда будет им. Такова идеология этого языка, и именно благодаря ей он и стал популярным. Конечно, иногда из этих быдлокодеров вырастают нормальные программисты, но это уж очень большая редкость. Иногда нормальные программисты специально переходят на PHP, т.к. на нём проще зарабатывать, но опять-таки это никак не говорит о качестве самого языка. Вы можете назвать еще какие-нибудь преимущества PHP по сравнению с другими подобными языками, кроме низкого порога вхождения?
PHP нельзя ни обвинять ни оправдывать. Нельзя обвинить бейсбольную биту в том что ей проламывают головы, а не отбивают мячик. Нельзя обвинить паяльник в том что его используют как криптоанальный дешифратор. Так до бесконечности.

Вы правы в том что так как PHP легок в освоении, то очень много кода написано на нем, соответственно и быдлокода в том числе.

Так уж случилось, что я с самого начала своей карьеры попал в компанию, где не то что за плохой код, а за плохие названия переменных, пробелы и отступы били по яйцам, а за систематические нарушения просто увольняли. Так что у меня не было шансов стать быдлокодером. Как это вам не покажется странным, но придя из классики в веб, я осознанно выбрал PHP, не потому что на нем проще зарабатывать, у меня мыслей кодить на продажу сразу не было.

Я не буду называть какие-то приемущества PHP, и уж точно не считаю что низкий порог вхождения — это приемущество языка, это вообще просто данность.

Я могу назвать с 50 недостатков PHP, как языка, но в этом-же нет ничего страшного, я знаю еще столько-же в любом языке, которым пользовался.
В заключение, скажу, что в PHP я нашел все, что мне было необходимо для программирования по паттернам, к которым я привык в классике. Легко применяю ООП подход.

Да, вы правы, если рассматривать сферический PHP в вакууме — то это действительно не такой уж и плохой язык (по крайней мере последние версии). Но также как к недостаткам линуксов часто относят отсутствие фотошопов, точно также к недостаткам похапе можно отнести огромное количество говнокода, от которого никуда не деться.
Если сравнивать PHP, Python, Perl и Ruby, я могу назвать только два преимущества PHP перед остальными:
1. Легкость изучения и простительность к ошибкам.
2. Большая распространенность и огромное кол-во уже готовых решений.

Но если вы пишете хороший код — первый пункт вам будет безразличен. Если же вы хотите всегда избегать плохого кода — тогда и от второго пункта тоже придется отказаться. В итоге я просто не вижу преимуществ PHP перед другими языками. В то время как преимущества других языков я вижу довольно чётко.
3. Распостраненность на хостингах. Решает, знаете ли.
4. Скорость работы — не так и плоха.
5. Простота простых операций. Работа с массивами и строками максимально проста. Можно конечно сравнить с Руби и увидеть, что в РНР ужасающие по своей хаотичности сигнатуры стандартных функций, и ограниченность через отсутствие лямбда-функций, но это такое. Портит впечатление, но не критично.
Лямда теперь вроде есть.
Что вы так на php нападаете? Он вам сделал что-то?
ИМХО PHP мешает популяризации более достойных языков. Много хорошего можно сделать на Django или RoR, но большинству заказчиков нужен «сайт на похапе».
Ужас! Но наверное тому есть причины. И то что вы говорите, можно перевести в другую область, сказав «столько всего можно написать на дельфях, но заказчик требует .NET», ну или наоборот «это можно написать на Джаве, но надо C++ и WinAPI».

Вообщем, пишите на Symfony, он во многом приближается к Рельсам, во много превосходит их. Так что это не проблема языка, а платформы. Поверьте, под РНР есть хорошие фреймворки.
Касательно RoR например, выдержка из rubyonrails.org/deploy очень многое говорит «по сути»:
Prior to Passenger, Rails was mostly deployed using Apache or nginx with either a built-in or standalone proxy (like HAProxy) against a CLUSTER of Mongrels or Thins.
Как бе кластер (особенно в России) может позволить себе далеко не каждый высоконагруженный проект. Я уверен, что тот же «вконтакте» не выпулил бы, изволь они делать решение не на PHP, а на ruby on rails.
Т.е. вы хотите сказать что веб-сервер на Ruby быстрее чем веб-сервер на Си? Спасибо, но я это и без вас прекрасно понимаю. Насколько мне известно, преимущества Mongrel не в скорости, а в легкости масштабирования и всяких других фичах. Иногда железо стоит дешевле программистов.
И кстати, как я понял, под кластером в данном случае подразумевается одна машина, на которой запущено несколько инстансов сервера. Думаю что даже в России, любой высоконагруженный проект располагается не менее чем на одной машине :)
> Т.е. вы хотите сказать что веб-сервер на Ruby медленнее чем веб-сервер на Си?
Простите, не понимаю, как из моего комментария выше можно было сделать подобный вывод — я имел в виду только то, что RoR СУЩЕСТВЕННО медленее PHP, а в большинстве случаев расход времени (который является следствием мощи RoR для прикладных задач) совершенно неоправдан с точки зрения возможности более быстрой (во всех смыслах) реализации этих же задач на PHP.
Я скажу за себя — очень многие «фичи» RoR я сам реализовал (не под влиянием причем, а совершенно самостоятельно довольно давно, для себя, и только недавно с лешким удивлением и беспокойством обнаружил RoR) на PHP, и пхпшное решение, хоть и далеко по красоте пока что от RoR, тем не менее быстрее его (сейчас как раз занимаюсь капитальной оптимизацией вплоть до пресловутых «ноль запросов на страницу»)

> под кластером в данном случае подразумевается одна машина
Ммм, кластер — это все таки кластер (http://ru.wikipedia.org/wiki/Кластер)
1. В процитированной вами фразе (кстати вырванной из контекста) говорится о преимуществах разворачивания RoR на Mongrel/Thin вместо Apache/nginx. Как можно делать выводы о скорости RoR из разговора о веб-сервере? Более того, RoR изначально позиционировался как фреймворк, в котором удобство разработки и сопровождения приоритетнее производительности, поэтому глупо судить его за низкую скорость.

2. Я прекрасно знаю что такое кластер. Но в данном случае важно не то, что написано в Википедии, а то, что разработчики имели ввиду. И под кластером в данном случае подразумевается несколько веб-серверов, вне зависимости от того, на скольки машинах они располагаются. Например можно взять 3 машины, и на каждой запустить 5 Mongrel'ов. А можно запустить 15 Mongrel'ов на одной машине. В обоих случаях это будет считаться кластером.
1. Кто сказал, что лично я вывод о скорости сделал из разговора о веб-сервере? Я прекрасно знаком с предметом, и знаю отлично его слабую сторону (точнее, одну из).

2. Какой сакральный смысл в запуске 15 Mongrel'ов на одной машине? Mongrel что, не умеет форкаться?
1. Тогда на что вы хотели указать, цитируя фразу о том, что RoR проще развернуть и настроить на кластере из Mongrel чем на Apache. Ключевые слова: «проще развернуть и настроить». Я наверное совсем тупой, но я не понимаю, на какие именно недостатки RoR это должно было указать.

2. Под Apache/nginx тоже запускают несколько процессов Mongrel'а, и балансируют запросы к ним. Такие дела.
Виндовс мешает популяризации лиункса.
Английский мешает популяризации наречия нанду.
Иностранный автопром мешает популяризации российского.

С народным выбором еще сложнее бороться чем с ветряной мельницей.

Если вам не нравится PHP, не используйте его. Хотите популяризовать другие технологии — учавствуйте в их распространении.

Да, кстати, уже много раз писали, что сравнивать PHP с Django или RoR нельзя. Так как первое — это язык, а второе и третье — фреймворки.

Мне вот, например, неприятны принципы питона, на Django мне писать тяжело. А к руби я присматриваюсь.
Я не сравниваю Django/RoR с PHP. Просто заказчиков отпугивает не фреймворк, а язык. Т.е. я хочу например писать на Python/Django, а заказчик согласится только на PHP/что_угодно.
У меня вот как-то складывается наоборот пока, в смысле, что я сам _привык_ к PHP и пишу на нем быстрее, чем комменты на хабре оставляю, а вот заказчики иногда выдвигают жестокое требование типа «только Perl, и ничего другого», и это прекрасно.
odesk, количество предложений о работе:
PHP: 1160
Perl: 35
Python: 49
Ruby: 85
Даже если знать перл, руби, и пайтон вместе взятые, все равно гораздо проще найти работу на PHP.
Ну вы сравнили, сайт для фрилансеров, где заказчики «по умолчанию» выбирают наиболее предпочтительного быдлокодера, и серьезные проекты в студиях.
Если вы говорите о Django и RoR, то надо их сранивать с ZF как минимум.
> 1. Легкость изучения и простительность к ошибкам.

У меня в режиме отладки выводятся даже suppressed errors, те которые c @ (так как использвоание @ в общем дурная практика), и тем более, любой нотис или варнинг завершает скрипт. Разве можно писать как то по другому?

> 2. Большая распространенность и огромное кол-во уже готовых решений.

Тут да, проблема, неизвестно как написано то или иное расширение. Но я не понимаю. почему например библиотека на ruby не может содержать те же ошибки? В чем тут проблема php?
Может быть большая база готового кода? Или может быть то, что легче найти хостинг
слава богу уже лет пять не работаю на проектах PHP с кашей…
Вас могут обвинить в распространении исходников )
Навёл на интересную мысль: а что, если бы php-shop был OpenSource проектом? С тем же «добрым кодом», но абсолютно бесплатный. Пользовался был ли он такой популярность или весь секрет в том, что он коммерческий? Типа там внутри всё «схвачено», разработано профессионалами. Вон продажи какие! :)
Возможно, тогда скоро продукты будут переделывать из опенсорса в коммерческие, что бы они стали популярными ))
Цитирование. Ненаказуемо.
Да, вот и разработчики из Microsoft процитировали пару тысяч строк у себя в проэкте )))
OSCommerce на самом деле не менее ужаснее. Код выглядит почти аналогично. Даже в коммерческих версиях, которые на нём основаны код не видоизменился. Всё тот же ужас!
Самое страшное что такое встречается очень часто, я сам уже две работы сменил из за этого
Аналогичную кучу гадостей я могу рассказать про Shopscript (free, premium… Does not matter.)
wave-blessed.livejournal.com/44041.html

Без какой либо проверки и экранирования пихают $_POST в базу, никакой обработки ошибок сложнее
db_query() or die (db_error());

Километровые isset

if (isset($_GET[«register»]) || isset($_POST[«register»]))
$register = isset($_GET[«register»])? $_GET[«register»]: $_POST[«register»];
(Подобные переменные позже без всякой проверки и экранирования используются)

Мешанина php и html (тем более странная, что используется смарти).

И так далее.
еще есть Мелбис. По мне — жуть. Но человек администрирующий магазин и менеджеры готовящие контент — довольны.
это был просто кошмар моей молодости верстальщика!
там «система» редактирования шаблонов особенно «понравилась»
ну через пару недель ничего — даже оплату карточками удалось прицепить туда
Ох, я когда-то дотачивал галерею на PHP, тоже платная, coppermine называлась что-ли (за давностью лет могу забыть). Помню, что на сайте указывалась цена порядка 500-600 евро.

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

С тех пор я понимаю, почему так популярны обфускаторы и почему многие конторы страсть как боятся, что кто-либо увидит их код. «Украдут» говорят. Ага…
На самом деле, много контор думают, что действительно есть, что воровать :)

А я считаю, что даже если код безупречно написан, то всё равно не у каждого есть надобность тратить время на его изучение.
Коппермайн бесплатный. Впервые я с ним пару лет назад познакомился, и тогда никаких упоминаний о платности не было. Т.е. если что и было, то раньше.
Про код сабжа сейчас ничего не скажу.
Угу, я уже сам посмотрел. Не помню точное название, помню, что продавала какая-то немецкая компания и сайт был большей частью на немецком. Не понимаю, почему только с coppermine ассоциации остались. Дело было где-то в 2005-ом году, столько воды утекло с тех пор…

Но воспоминания, как я grep'ом по дереву исходников искал копии кусков кода, которые надо исправить, до сих пор отчетливы. :)
Не стоит делать преждевременных выводов. Afaik, Gallery 2 очень недурно написан.
Хахаха, пишут на том же уровне, если не хуже, что и бесплатные. смотрел код нескольких CMS, вроде Джумлы/Джустины — ад и кошмар, я бы не хотел вообще с такими CMS работаь (в смысле как програмист).

После ознакомления с фреймворками, типа RoR/Django, на этот ужас в стиле середины 90-х страшно смотреть.

Что касается использвоания @ — у меня в дебаг-режиме все подавленные ошибки выводятся, так как использовать ее дурной тон.

По ходу такая ситуация всюду, люди, учившиеся лет 10 назад, написали продукт лет 5 назад и до сих пор его всем впаривают.
Надо понять причину, а причина, что люди учившиеся 5 лет назад, не хотят писать свой продукт для всех, а пытаются сделать стартап для «себя» :) Шучу конечно, но ведь не от лучшей жизни народ покупает phpshop`ы, другого нет (или почти нет).
а я вот вспомнил свою первую «цмску»(!) :D некоммерческую конечно, но пару лаб защитить в универе смог. Тем приятнее сейчас было посмеяться
php это убогий недоязык по сути, на нем очень сложно писать красиво, вот почему многие фанаты Ruby это дизертиры армии php которые наелись бесперспективным php-быдлокодингом. в идеальном мире нет места для php. а долбоебы всегда были и будут.
Отличии от других языков у ПХП в том, что там низкий порог для программирования, и на нем можно писать очень страшный код, который даже работает. НО!!! При этом на нем можно писать и красивый код — это выбор программистов.
А вы наверное на PHP много проектов создали, чтобы такое заключение сделать.
очень много, юноша.
Юноша старше вас на 2 года :)

ЗЫЖ в принципе понятно, на каком уровне вы писали код с ПХП, как вы сказали… «php-быдлокодингс» :)
А поконкретнее? Интересно посмотреть.
Пока вы пердите в лужу… Уж простите.
Видимо ничего серьёзнее датеингов и дорвеев не писали, раз так говорите.
Прикольно, я пишу на Rails и на Symfony и однозначно сказать кто лучше не могу. Вот только боюсь, что те дизертиры из РНР, могут превратить Руби в быдлокодинг :)
UFO just landed and posted this here
пффффффффф…

ну и чего шумим??? сами так пишете? нет? не пишете??? странно… и чего тогда ваши проекты не известны никому? вы такой код крутой пишете, а толку никакого… а?

давайте без понтов…

по поводу повторения участков кода в разных местах-- сам так делаю и буду делать- часто бывает надо что-то подправить именно в одном месте, а не везде…

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

для этого есть молоток… на крайняк гантелину возмите…
Как программист могу сказать, мне например морально тяжело писать в указанном стиле, думаю я бы, если так пришлось писать, до конца бы не дописал (( На хорошо написанный код приятнее смотреть, и в нем легче что-то подправить (а как практика показывает, подправлять что-то потом приходится постоянно).

Так что ООП и прочие изыски (например, наследование шаблонов — не представляю как без этого обходился :) ) — это не прихоть, а суровая необходимость, чтобы не возникло желания вообще бросить эту работу. И кстати, с чего вы взяли, что писать «хороший» код дольше «плохого»? У более-менее опытных программистов есть свои заготовки, куски кода, фреймфорки и прочее, им быстрее писать так как привыкли.

Ну а «по поводу повторения кода» — поверьте, ваш пост очень огорчает негров^W программистов, которым потом приходится исправлять какой то баг (который в таком коде найдется с вероятностью 99%) в куче мест. Чтоб вы всю жизнь проекты за отзывы писали. (пользуясь случаем, также передаю привет чайникам-верстальщикам, пишущим шедевры вроде [div class=«title»] или [div class=«page_text»])

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

В общем, с временем поймете, о чем я))
нет, не пойму… и не надейтесь…

никто не говорил, что писать плохой код лучше, дело не в этом…

ВАШ магазин продаётся по такой цене? если продается-- ссылочку киньте… код посмотрим…

покупатель не смотрит код… вы не знали?

чего только не видел-- люди и не так пишут… и уж поверьте-- покупают и не такое… а сидеть и осуждать…

не нравиться-- учите как надо!

и сами так не делайте… устроили тут распальцовку… первый раз чтоль? возьмите любой проект коммерческий… даже программы под виндус… да сами знаете, сами же так пишете…

или что, это журналисты, по вашему, пишут? :)
Вы все-таки не поняли. Писать аккуратный код *проще* и *удобнее* самому программисту, независимо от того, продается он потом или нет. Мне (и уверен, не только мне) некомфортно работать с лапшой, из HTML и PHP, я смотреть не могу, на такой код как в любом из примеров. Некомфортно — значит, я так писать не буду, и все. Сами жрите свой кактус (образно выражаясь).

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

И да, я не пишу магазинов (пока не пишу?))), поэтому ссылочек не будет, сорри.

А осуждать я могу кого хочу, это мое дело.
Подскажите, пожалуйста, чайнику-верстальщику с 10-летним стажем, что плохого в [div class=«title»] или [div class=«page_text»]?
Плохо в них то что они были использованы вместо тегов и. Я за дивную верстку, но таких вот сторонников «разверстать таблицу дивами» (хы, сам пытался когда-то :) не люблю.
Плохо что они использовались вместо тегов [h1] и [p], парсер сожрал мои теги((

В общем, я люблю аккуратную структуру страницы, а там на простом макете все что можно было сделано дивами (+куча вложенных пустых дивов), включая меню, текст страницы, и куча дивов для создания отступов.
А, ну да, тут согласен полностью (не имею, как и вы, возможности безмолвно выразить согласие плюсом). [div class=«title»] нужно использовать (по моему мнению), когда в этот самый .title {} вкладывается гораздо больше, чем font-size: 120% (например, особенный фон, отступы, цвет не такой, как для остальных заголовков, ну и так далее), короче, когда этот див занимает логическое место в структуре страницы.
Гм, а не лучше тогда [h1 class=«title']? Я например люблю иногда смотреть на страницу с отклбченными стилями, в случае с дивом семантика страдает.

Мне как-то кажется, див — это что-то большое, заголовок, подвал, сайдбар.

Хы, я даже логотипы спонсоров как-то вставлял списком ссылок, с image replacement, чтобы без стилей (или при отключенных картинках) отображался простой текстовый список со ссылками, а со ссылками — логотипы :) А всякие контакты и адреса в подвале удобно закллючать в [address] Все же разные теги смотрятся в коде лучше чем безликие дивы.
Плохо то, что хромает семантика. Если вам всё равно, что о вашем сайте думают разные роботы (например поисковые), то можете и дальше использовать div вместо h[1-6].
И вообще, не рассчитывайте особо на коробочные решения, по крайней мере у меня ощущение, что если важен хороший код, стоит как то писать самим что ли. Никто за вас хорошо код не напишет.
Слава отделу продаж PHPShop`a! так продавать такое говно могут только гении!
Поиск ini — шедеврален!
Разгневанным агропроммистам: если вы такие умные — чож строем то не ходите (с).
Думайте головой, а не чем другим. Нахрена козе боян писать чистый и всем понятный
код. Чтоб каждый Вася Пупкин смог чо хошь наменять за 10 минут. А тут каждое изменение
требует немалых сил понять — о чем речь. То есть создатели плавно сажают на иглу…
Купив продукт, купи и поддержку :-). А с точки зрения конечного покупателя и не программиста
все ведь красиво и хорошо.
А если вы за чистоту объектного кода и вам за державу обидно… дуйте на конкурс программистов.
Там вас все ждут.
Нет, вы ошибаетесь, этот код не сложен в понимании, он сложен в отладке для самих разработчиков. Понять «планарный» код — это любой адекватный программист сможет, просто под него что-то менять — это очень противное занятие :) Так как код неоптимален, содержит кучу потенциальных и явных багов.

ЗЫЖ с точки зрения конечного покупателя безопасность шопинга в его магазине должна быть важна! а когда пароли в открытом виде хранятся, в запросы параметры просто в строку клеются…
Нет это вы не правы. Если на поддержке этого кода сидит выделенный человек — то он все уже наизусть помнит. Да и запросы типовые… То есть более чем на 80% у него будет уже готовое решение проблемы.

А вот человеку со стороны вклиниться в такой код будет достаточно сложно.

Про пароли согласен… Тут если есть дырки надо пришибать… А вот читаемость кода и ООП при наличии исходняков… думаю вопрос интересный. Могут и специально навести тень на плетень. Если продукт комерческий и его продали более 1000 штук — думаю что проще и выгоднее написать именно через ООП и красиво… Но этого не делают. И я думаю что это специально.
Этот человек может завтра уйти, и не будет у них такого человека. Разобраться в таком коде для мелких изменения — проблем нет, а вот для суппорта, коим занимается этот человек… Или у них сотрудники вечные?

Это не делают, так как нафиг? Если и это берут. Если людям которые берут пофиг, как запросы формируются и что пароли в открытом виде хранятся.

Ну а если не хотят, чтобы код был читабельным и кто-то мог исправлять, то есть кранчеры пхпшные, которые и переменные «попортят».
Люди которые покупают и те кто осуществляют поддержку в этом случае обычно разные люди.
Даже в этой теме некоторые указывают, что их попросили поменять что-то в готовом купленном и установленном магазине.
То есть сначала покупается и ставится по умолчанию. и потом уже через недельки 2 от начала работы приходит понимание того, что нужно что-то поменять :-)
И как тут уже уйдешь? деньги уплачены, магазин работает… Нет батенька. Тут вас уже поймали
и посадили на иглу… И вас еще тепленького можно протрясти на денежку за все ваши хотелки и
пыхтелки :-)
-цитата-
Этот человек может завтра уйти, и не будет у них такого человека. Разобраться в таком коде для мелких изменения — проблем нет, а вот для суппорта, коим занимается этот человек… Или у них сотрудники вечные?
-конец цитаты-
если есть работа, за которую платят деньги, то и человек найдется. Как по вашему живут многочисленные «программисты 1С» которые приходят и обслуживают по нескольку организаций?
По вашему выходит — ушел 1 программист и все? Предприятие закрывают нафиг?
не обязательно специально… наберется некое количество ошибок и претензий- перепишут… или новую версию, скорее всего, выпустят…
а не могли бы вы пояснить все эти ошибки и претензии? А то мне, как начинающему кодеру, будет интересно и полезно узнать, что к чему, чтобы не совершать ошибок.
Недавно копался в osCommerce и наткнулся на классный кусок кода:

//don't know why, but this happens sometimes and new user becomes admin
if ($customers_status == 0 || !$customers_status)
$customers_status = DEFAULT_CUSTOMERS_STATUS_ID;

Порадовало :)
комментарий убойный конечно.

вот так зарегался и опа — ты уже в админах :)
Да, код на самом деле, ужастен.
Но есть но, многие клиенты платят не за красивый код, а за рабочий продукт, и в случаи этого продукта, тому доказательство. Т.е. клиенту нужен не код, а работающий продукт.

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

Те, кому нужен хороший сайт, думаю, не будут покупать коробочное решение.
С PHPShop все ясно. Как и с любой более менее старой системой. Люди очень правилно начали с идеи. Сделать движок для интернет-магазина и поставили ее во главу угла, вместо реализации. Вот так и вышел говнокод. Но с точки зрения бизнеса дело выгорело.

Естественно когда припрет, они его перепишут будет там и ООП и все-все-все. Иначе он просто рухнет под собственной тяжестью.

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

именно по тому, что он программист хороший, и понятия не имеет, как удобно пользователю сделать… уж извиняйте, реальность…
Я вот думаю, что лет через 5-10 адепты «тантрического программирования» будут также обсасывать на наш красивый ООП-код, возмущаясь какое гавно быдляческое мы понаписали :)
Все обсуждают код, напишу как пользователь данной системы в течении уже почти 2 лет.
Мне как руководителю интернет-магазина(который сделан на данном продукте), всё устраивает.
Функции свои выполняет, товар продается, админка проста и удобна для менеджера, функциональность устраивает.
и по сути все не важно какой код внутри.
Но действительно большая головная боль, когда надо что-то подправить или добавить, или берут очень дорого или отказываются.
На каждый товар — всегда найдется свой покупатель.
о чем и речь, маркетинг фарева :)
А безопасность магазина вас не интересует?
Только честно, мне правда интересно мнение с другой стороны.
Интересует конечно.
1. У нас покупатель покупает один раз, не храним базу данных емейлов (даже убрали регистрацию)
2. Кто будет ломать? Конкуренты? Это же инет-магазин. Всегда есть копия базы данных и сайта, восстановить можно быстро и без потерь.
3. Скажите хоть один скрипт с идеальной защитой, это про любой можно найти море плюсов, как и минусов.
Да, в данном продукте есть много недостатков, и не только в коде.
Cuique suum. Дословный перевод: Каждому своё.

Восстановление базы не приводит к восстановлению авторитета, который теряет магазин при взломе…
какого авторитета? кого позвать? это вам не озон))
з.ы. а если о взломе напишут на хабре — магазин только выиграет
Стоимость услуг программиста будет гораздо выше.
Я вот такое видел:

foreach ($_GET as $k => $v)
{
$GLOBALS[$k] = $v;
}

extract($GLOBALS);

В этом случае можно в строке запроса передать _SERVER, и вуаля.
Ага, разработчики PHP наконец перестали курить траву, отключили register_globals, а программситы пока не слезлы, пытаются продлиьт удовольствие костылями.
Благодаря этому взломали www.phpbb.com несколько месяцев назад.
Опять заказуха, ну сколько можно писать пакости.

Предистория этой статьи: мне как разрабу phpshop позвонил клиент с просьбой реально изменить кучу логики, ответ был дан, что такое стоит дорого (я бы сказал относительно). Я предложил заказать изменения на стороне, имхо умных людей много и вам с радостью его допишут.

Этот же Федор, видимо, обратился к автору статьи и довесил, наверное, чтобы про нас написали гадости, ткт я его заках не принял, сославшись на подготовку к выходу ново й версии (не до заказных сейчас нам модулей).

На все ваши выпадки могу продискутировать.
Самое главное, продукт PHPShop пишется уже более 5 лет. Есть старые куски кода, есть совершенно новые.

Итак иммеем:

1. Стандартное подклшоючение к базе + загрузка модуля авторизации
2. парсинг конфига, кто возразит, что самый удобный способ парсирования это через INI (конечно в .htaccess он прикрыт от глаз)
3. Многоступенчатый парсинг настроек, дело в том, что этот файл подгружается из разных каталогов и точно указать путь конфига 1 строкой нельзя, если напишите способ лучше, проставлю пиво.
4. Вставить злой код никак нельзя, есть проверка всех входящих перемнных, которая вам просто не даст вставить никакую команду через посты:

Примерный код такой:
$com=array(«union»,«select»,«insert»,«update»,«delete»);
foreach($com as $v)
if(@preg_match("/".$v."/i", $search)){
$search=eregi_replace($v,"!!!$v!!!",$search);
Далее конец выполнения и злая месага о недопустимых переменных.

Согласен, наш скрпит часто проверяли на дырки, послдений раз был журнал Хакер, но они взяли почему то нашу бесплтаную PHPshop CMS Free с относительным старым кодом, раздербанили и выдали за распаковку компмерчекого скрипта магазина.
После общения с автором статьи, конечно, были исправлены некорые возможные уязвимости в магазине, ткт он их сам просто не видел.

5. Нравится нам глобалсы, см пункт выше, нельзя никакую перемнную злую передать и нарушить безопасность. ТО, что пишут «умные» книги про небезопасные глобалсы — фуфло.

Про замечание, что код весь перемешан аля PHP + HTML — такой код есть только в админке (ткт там AJax и замечу он появился уже 4 года назад, когда даже в Битриксе его не было). В пользовательской части у нас свой шаблонизатор, в php коде все пропуксается через него TPL (HTML), давая пользователю менять все что угодно в шаблонах.

В админке ясный перец, что намного удобнее совмещать код, всеравно туда пользователь лезть не будет и нужно заботиться о скорости выполнения скрипта.

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

Иными словами, как псиал любимый журнал F5 гавнгожурналистов, продаваемых свои посты развилось уже очень много.
Если есть возражения, я тут :)

Чем PHPshop отличается от конкурентов еще:
1. Тесной связью с 1С
2. Установка скрпита из под винды на фтп
3. Установка магазина из под SSH за 5 секунд
4. Установка пакета все в одном для виртуального магазина на виндовоз
5. Синхронизация внутренней версии с активной на сервере, как в русном режиме так и в атомате
6. Ордер заказов на раброчем столе
7. Автоматичекое обновление скрипта из под PHP
8. Автоматическое обновление из под виндовоза
Раз уж вы здесь, расскажите, что такое «стол базы записей»?
Угу, и зачем глушить все ошибки «собаками»?
Слушай, разраб, та статья в хакере была скомунижжена с хабра. Её написал я. Если вы пишите продукт уже 5 лет, то почему тот баг был устранен через 4.5?

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

В интернете более 500 магазинов работает на PHPShop-е, если информация о том, как получить ключи к бекдору, ну или сами ключики, попадут в сеть, очень много владельцев этого @прекрасного продукта попадут под жестокий удар. А у самой компании, производящей этот продукт, будет навсегда испорчена репутация, карма и сломан бизнес.

С другой стороны, это реклама. Об этом движке узнаю сотни тысяч пользователей %) А плохой рекламы вроде как не быват (хотя, мне почему-то кажется, что это не тот случай)

if (разработчик и его коллеги не против) {
обязательно напишу пост на хабре
} else {
пусть разработчики от лица компании хотя бы в комменте попросят этого не делать
}

Лишнего знать не нужно конечно, а вам напомню есть такая статья 183 и статья 272, ваш пост как раз под нее и попадет.

Магазинов то намного больше, защита от всяких бекдоров и т.д ставиться очень просто. прописыванием паролей в .htaccess

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

Во-вторых, ни в одном из ваших обновлений бекдор так и не был убран, ключ не изменен за все время.

В-третьих, каждая из этих 500 компаний подаст на вас в суд за то, что вы продали им продукт ненадлежащего качества, причем знали об этом заранее. Если они понесут убытки, за это будет отвечать именно ваша компания. Любой суд для вас будет проигрышным.

А в-четвертых, вы так и не попросили от лица компании не публиковать суть ошибки вашего программного обеспечения.

Думайте.
ЗЫ: у вас есть 15 минут, пока я пишу пост %)
Вы меня уже напугали… а можно в личку что вы там нашли?
den@phpshop.ru
От лица компании прошу не публиковать пост на время разбирательсва и согласований. Может я что-то и сам не знаю?
Зачем в почту, Den#14, вы и так понимаете, о чем я говорю.
>den@phpshop.ru
Вы руководитель отдела разработки?? O_O ппц, имхо, это fail.
Нет бекдора в ком. версиях

А в бесплатных есть?
В PHPShop CMS Free даже нет функции сообщить пароль тех. поддержки.
То, что вы называете бекдор есть в нуленной версии, кою скорее всего и смотрел автор. Версия от 2007 года действительно хромает в безопасности. Тот кто нулил ее свои бекдоры еще повставлял, к дыркам, которые были исходно.
Многоступенчатый парсинг настроек, дело в том, что этот файл подгружается из разных каталогов и точно указать путь конфига 1 строкой нельзя, если напишите способ лучше, проставлю пиво.
Ну анализатор-то конфига всегда в одном и том же месте лежит относительно самого конфига?
$config = parse_ini_file(dirname(__FILE__) . "/путь отсюда до конфига");
Благодарствую код заменен на:
Вы обещали человеку пиво :)
Да пиво с меня, блог глючит, не вставляет комменты, наверное это тоже PHPShop программировал, хотя у нас ошибок то нет, просто кому то код не нравится. Мы на олимпиаде по php :)
Вам самому не стыдно?
3. $_SERVER['DOCUMENT_ROOT']
Пиво слать на homm86 на гуглопочте.
А дальше? Если что-то ставится в корень — это решает проблему. А если не только в корень, то DOCUMENT_ROOT мало поможет.
DocumentRoot будет иметь актуальное значение только если скрипт запускается из указанной в конфиге веб-сервера директории применительно к конкретному сайту, что на деле бывает далеко не всегда. Этим, на самом деле, грешат довольно много программистов, которые неахти как шарят в хостинге и настройке веб-серверов, хотя бы даже одного Apache.
Куда лучше брать за базовый путь что-нибудь вроде dirname(__FILE__).
Вам сначала надо научиться программировать, а уже потом продавать.
$com=array("union","select","insert","update","delete");
foreach($com as $v)
if(@preg_match("/".$v."/i", $search)){
$search=eregi_replace($v,"!!!$v!!!",$search);
Скажите, что вы вот этим кодом хотели сказать? Просто заменить все встречающиеся слова из массива без учёта регистра на такое же слово, только окружённое восклицательными знаками? И для этого вам нужно было вызывать preg_match как минимум 5 раз? И ещё возможно до 5 раз eregi_replace? Это коммерческий код?

$search = preg_replace("/(union|select|insert|update|delete)/i", "!!!\\1!!!", $search);

Вообще же, правильным решением является использование placeholders, и не заниматься такой ерундой.

Согласен с автором топика в его утверждении, что это кошмар.
сколько работаю с базой, столько и использую placeholders
ну если уж заниматься такой ерундой, хватит одного быстрого str_replace
Не хватит. В условиях задачи стоит case-insensitive match.
дискуссия становится все менее прикладной

адекватный программист не станет писать SeLeCt, так что не 4 слова менять, а 8.
См. начало обсуждения — речь не о прикладных программистах, а о защите от sql-injection. Что, если хакер напишет SeLeCt, защита от инъекций пропустит? Потому предполагается, что должен быть полностью регистронезависимый поиск.

Повторюсь, заниматься подобным — глупо, есть более эффективные методики защиты от инъекций.
Ваш код «защиты переменных» с фильтрацией слов типа SELECT — это вырвиглазный кошмар любого разработчика, я такого ужаса давно не видел. А что, если мой адрес email содержит слово select@mail.ru, а? А если я в комметарии к статье хочу написать SQL_запрос? Ваша долбаная система его порежет что ли?

Уж как я не люблю хабрахабр и его парсер, но рядом с этим, парсер просто милый шутник.

По поводу фильтрации — прочитайте пожалуйста в википедии про prepared statements или active object. Повторюсь, проблема SQL-инъекций решена лет 20 назад (и XSS кстати избежать не так сложно при грамотном подходе). Не знали? Идите учите матчасть.

Ваш код бесполезно тестировать, исправлять там что-то. Написанный в таком стиле код — одно большое решето, в нем всегда будут уязвимости. У вас есть защита от XSS? Есть защита от CSRF (если вы знаете конечно что это такое)?

> Про замечание, что код весь перемешан аля PHP + HTML — такой код есть только в админке (ткт там AJax и замечу он появился уже 4 года назад, когда даже в Битриксе его не было).

Может сначала стоило освоить шаблонизатор, а потом браться за аякс?

Вообще, по уровню написания коммента, ощущение что писал какой-то школьник, уж не обижайтесь.

> Смотрел много исходников, чужой код всегда потемки. мы код делаем, чтобы он был простой и можно легко было его править.

Кстати, если вам интересно, откуда у людей на Хабре ненависть к вашему магазину — дело в том, что нам иногда приходится что-то делать с таким кодом, и поверьте, то что тут написано это мягкие слова по сравнению с тем что произносится. В таком вырвиглазном кодже что-то править — это издевательство над собой какое-то. Сегодня ты читаешь всякие книги про джанго, MVC, а завтра видишь Джумлу — это как возвращение в суровую реальность.

> Если насувать гиблый ООП

Гиблый не ООП а тот кто не умеет им пользваоться, там где надо.

> 5. Нравится нам глобалсы,

Руки бы вам поотрывать. Бегай по всем файлам, ищи кто там где ей что присваивает.

И еще. Вы упомянули производительность. Вы оптимизируете запросы к БД? Используете lazy connect? Используете кеширование в памяти? Выставляете заголовки last-Modified/Expires, жмете контент, хотя бы статический, gzip'ом? Если нет, грош цена вашей экономии на шаблонизаторе.

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

p.s. Заминусуйте плиз этого человека кто сколько может, заранее спасибо.
> password='".base64_encode($password_new)."',

а эту шутку как прокомментируете?
Стол — это имя таблицы, у каждого разраба есть свой юмор. Если посмотреть, иногда в комментах и анегдоты про то как этот моудоь писался вставляются.

Глушить собаками, тк если в .htaccess сотавить репорт репортнг 0, то многие умные хостеры выдают ошибку севрера 500 :)
Этож не 5PHP, тут try — catch не вставишь.
Скрипт то для 4 пыха написан.
Что-то на юмор слабо похоже. Скорее, на автоматизированный перевод, совмещенный с копипастом.
А зачем ставить error_reporting в ноль? ага… дайте дагодаюсь… любите глобалсы?
Официальное требование включенные глобалсы, хотя все новые модули пишутся уже без них. Скоро полностью откажемся от них (во всяком случае такое желание присутствует)
И ошибки не стоит глушить, раз уж перерабатывайте.
Для обработки можете set_error_handler хотя-бы под php4 использовать. А вообще, если рефакторите, то сразу под php5. Скоро вы хостеров с php4 уже не найдете…
И поверьте ООП не такой уж и «гиблый», как вы выразились…
> Глушить собаками, тк если в .htaccess сотавить репорт репортнг 0, то многие умные хостеры выдают ошибку севрера 500 :)

есть такая конструкция языка: «if»
и ещё много полезностей типа «isset», «empty», «defined» и т.п.
качественный код не то что ворнингов, но и нотисов не должен давать
а «собаки» — очень тормозны, сами разработчики PHP не рекомендуют их использовать, только в критических ситуациях

хотя к вам лично претензий никаких нет
грустно от того, что никто не готов вкладывать деньги в качество
а теперь конечно продукт не будет переделываться, ибо тут ошибка «в ДНК»
ну да пройдёт время и естественный отбор сделает своё дело
if(file(«myfile»)){

}
при несущ. файле выдаст ошибку, тут или ставить
@
или try
или проверять перед открытием существования файла.

Согласитесь, что @ удобнее
Мне нравится try, но пока не думаем все переписывать под 5
Есть ещё функции is_file, file_exists, почему бы не использовать их?

@ не удобнее, а медленнее.
Напротив, сударь.

Обращение к файлу требует выделения памяти, а собака просто гасит вывод сообщения. А если у вас обращение к файлу в цикле? Метки то на файл он сбросит только после конца отработки.

Попробуйте с замером времени эти 2 функции.
а вы пробовали замеры использования "@"?
я пробовал

в зависимости от нагрузки и задач одна собака в среднем равна одной файловой операции, что ОЧЕНЬ дорого.
при использовании is_readable файловая операция будет полюбому.
но даже если ошибки не было, то @ всё равно протормозит!
file_exists('nonexistentfile') => ~0.06
@file('nonexistentfile') => ~0.5

Разница — 1 порядок. Лучше избегать выбрасывания варнингов, чем подавлять их.
Тут только проверить файл, есть он или нет. Наличие трай кэтча в языке не должно вас подвинуть отказаться от проверки таких ситуаций. Правильно — это проверить, а то так можно весь код в трай кэтчах засадить :)
да уж конечно удобнее, особенно дебажить потом:
@file('/path/to/file');
и пофигу, является ли объект файлом, существует ли он, доступен ли на чтение…

«Скрипт» как вы свой магаз, кстати, сами назвали падает молча, внедренец роет коды ищет собаку и материт вас последними словами.
Это проще вам, а не тому, кто ваш скрипт будет внедрять.
Так что такие статьи будут не раз появляться в инете при таком подходе, не удивляйтесь…
есть file_exists

хотя я например предпочитаю сразу is_readable

@ надо просто запретить себе
Это вы нотисы собираетесь отлавливать через try… catch? Сильно сомневаюсь.
к глобалсам прицепились хотя бы по причине использования
mod_security с минимальным набором правил вместо вот этй байды

> $com=array(«union»,«select»,«insert»,«update»,«delete»);
> foreach($com as $v)
> if(@preg_match("/".$v."/i", $search)){
> $search=eregi_replace($v,"!!!$v!!!",$search);

отработает быстрее, и более эфективно

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

ЗЫЖ а чего реплэйса нет? :)
mod_security не панацея, особенно для настолько кривых скриптов
mod_security оправдан в принципе, для случаев когда надо запустить недоверенный код, который потенциально написан криворукими товарищиами, нормальному приложению он не нужен имхо. Это такой же костыль, как фаерволл и антивирус на ПК.

Хотя благодаря вот таким уязимостям в нашем-любимом-браузере: dsec.ru/about/articles/web_xss/ и уязвимостям с выполением скриптов в Adobe PDF, применение модуля может быть и оправданно, так как разработчик веб-приложения никак не должен, а вынужден исправлять ошибки индусских лапшакодеров.
А что удивительного, пока кто-то покупает кто-то будет делать. И не важно каким местом. Вон Битрикс, ни чего, со стыда еще не умерли и продаются вполне себе нормально. А про его код на хабре уже писали… очень похоже, что нормальных систем для создания магазина просто нет. Наверное это фикция…

Или у кого-то есть нормальные примеры таких систем?
Пока нет исходников все скрипты хороши :)
Самый лучший магазин тот, которого еще не написали… может вы, мой друг, и будите этим человеком, кто напишет это чудо.
Конкретно сейчас мы обсуждаем ваше творение, и оно поражает.
> очень похоже, что нормальных систем для создания магазина просто нет

Попробуйте LFS :)
Я старался писать красивый код, может быть кому-то покажется не таким ужасным simp.la
мне при виде названия вашего движка всегда хочется сказать: «We call it “simp.la” coz it's simpla' than nothing» :)
Первое впечатление более-менее благоприятное. Подробно не смотрел.
Битрикс они вроде-бы уже переписалив духе времени, стыдно стало :)
для подобного рода готовых решений — главное не грамотная разработка, а грамотный пеар.
нужно отдать должное авторам сего софта — продавать дичайщую хуиту — это надо уметь.
if($ReturnProductData!="false") ...

false строкой — это круто!
Глянул цмсину, все в том же духе…

stripslashes(stripslashes(addslashes($str)))

function __file_lines($__file)
{
 if(!is_file($__file)) {
  return false;
 } elseif(!filesize($__file)) {
  return array();
 } elseif($__lines=file($__file)) {
  return $__lines;
 } else {
  while(!$__lines=file($__file)) sleep(1);
 }
 return $__lines;
}
Я, чтобы его дома поставить, дамп БД, наверное, полчаса ручками допиливал. Он поставился. Но не работает. И сдается мне, что это не мои руки в этом виноваты.
У меня тоже были проблемы с установкой — решились удалением параметров кодировки при создании таблиц
Ой, простите. Спросонья не разобрал, что я работал с другим движком. Снимаю свои претензии.
Было у меня время холиварить с призывниками закрытого ПО. Они утверждали, что это самое безопасное ПО, и его пишут мастера своего дела. Я как всегда настаиваю на OpenSource. Так как код прозрычный, и опытные могут усовершенствовать код в лучшую сторону.

Вот сейчас и убеждаюсь в миллионый раз, что я прав. Не все продукты, если платные, качественные…
да, я согласен, код не особо красивый
но оглянитесь вокруг — почти ничто не совершенно
вот, например, если я возьму в банке кредит — мне важно, чтобы меня просто обслуживали нормально, и все работало как я хотел
а что у них там внутри твориться и как их сотрудники между собой связаны — мне глубоко пофигу
так и тут — клиенты их покупают их продукт для того, чтобы запустить магазин, а не чтобы на код смотреть
хотя вы правы — те, кто потом будет это переделывать, сильно удивиться
как, например, я пришел бы в тот же банк за очередным кредитом и увидел бы, как сотрудники себя ведут
Представляю, как вы удивитесь, когда узнаете, что во время оформления вашего кредита в банке на вас открыли еще пару кредитных линий для незаконных эмигрантов :) То же самое бывает, когда код внутри работает плохо, а внешне все вроде бы хорошо
нормальный банк этого не сделает, потому что есть договор и есть репутация банка, в случае чего у банка будут проблемы, а это никому не нужно
скажите, а где можно почитать хоть одну историю наподобие той, что вы описали? ни разу не слышал такого
и скажите мне, ГДЕ в договоре о продаже PHPShop есть пункт о том, что код там обязательно должен соотв. каким-то стандартам программинга и быть ООП?
Не в стандартах и ООП дело. Качество кода отражает уровень разработчиков, которые допускают простейшие ошибки при проектировании системы. Ну, например, как вы отнесетесь к информации о том, что все пароли от магазина храняться в базе не хешем, типа md5, а обратимым алгоритмом base64. Т.е. если кто-то получает доступ к вашей базе, то он знает все ваши пароли. Мало того, есть даже специальные функции в скрипте, позволяющие пары пароль/логин извлечь из базы и просмотреть в браузере. Похоже на описанную мною выше ситуацию?
о_О base64?? сорри, не знал… и хоть md5 тоже вскрывается в принципе, base64 — это полный финиш
думаю, разработчики это сделали для того, чтобы высылать текущий пароль пользователю, если он его забыл, хотя правильнее было бы генерить новый и высылать его
Вот это жосткий код.
И самое печальное, — люди покупают.
В то время как есть намного лучшие решения.
хех… лучшие решения… кроме битрикса (с оговорками про его тяжеловесность и в общем то совсем не специализацию в качестве ИМ) не знаю нормальных ИМ
у битрикса тоже не всё в порядке с кодом
А существуют ли вообще CMS на PHP, у которых всё в порядке с кодом? По-моему для любой популярной CMS на хабре существует как минимум несколько постов, в которых ругаются на говнокод.
Последние годы Joomla стала ощутимо лучше. Но идеальной никогда не станет: мешает Mambo-наследие.
Люди, которые приходят в ужас от существующих систем, берутся писать свои на базе хороших фреймворков (которые в свою очередь требуют соблюдения каких-то стилей, стандартов и т.п., что даёт шанс на качество). Если энтузиазма хватает на больше чем полгода, то в итоге появляются неплохие проекты.
Как пример: МаксСайт CMS исполнился год — и вот чем он лучше вордпресса.
Другой пример: движок соцсетей LiveStreet. Тоже с качеством кода всё в порядке.
Так что, пожалуй, существуют.
Респект маркетингу — такой говно успешно продавать за 12k$ :)
Ну в общем-то не секрет, что успешность продукта слабо связана с теми технологиями, которые были использованы при его создании. Например, знакомство с кодом MediaWiki повергло в шок. WordPress озадачил дырами в системе безопасности. Разработчики JForum банально не знают HTML. Ну и т.п.

Конечный пользователь выбирает продукт совсем не по качеству кода, а по функциональности или новизне. Ну а нам потом разгребаться.
Вы придираетесь :)

Код довольно хорошего качества. Вы ведь заметили что у него есть конфиги и он разбит на файлы!!!
Поверьте. Не во всяком проекте встретишь такую роскошь ;)

Я сочувствую вам, если вам приходится работать с кодом ещё более низкого качества.
Мдааа. Сограждане! Хабряне! Примеры платного говнокода мы все знаем. Скажите же, а есть хоть один образец платного PHP-скрипта, где код — конфетка.

А еще — поеживаюсь при мысли о коде, распространяемом в зашифрованном виде (ioncube и иже), как такое вообще можно покупать?
А давайте сделаем тему, где все платные CMS опубликуют кучки своего кода, чтобы не было потом таких вот разговоров. Нам за свой код, например, не стыдно!

Я на 100% уверен что будет много критики, но это потому что идеала нет, так же как на вкус и цвет… ;)

Но люди в одном месте смогут сравнить ЧТО они покупают…
Думаю будет интересно, особенно программерам!
«кучки» :))
Оговорка по Фрейду походу… ;)
Где можно (хотя бы выборочно, хотя бы на примере каких-то модулей) ознакомиться с вашим кодом?
Напишите мне на dn[@]sbuilder.ru, я Вам вышлю.
Написал. Честно предупредил, что интересуюсь из любопытства, с целью расширения кругозора, с тем, чтобы, возможно, запостить на хабре отзыв…
Ответа так и не получил.
Я Вам отправил модули в тот же день.
Сейчас продублирую. Просьба подтвердить если получите или нет.
Извините, гугл пометил их как спам. Сейчас получил через веб-интерфейс.

Вы просили обстоятельных комментариев, а не придирок. Я попытаюсь, как сумею.

  • Именование — дело индивидуальное. В плюсах хорошее комментирование и документирование кода.
  • ООП, судя по всему, используется не в процедурном стиле, а более-менее действительно ООП.
  • А вот куски html в конструкторе как-то напрягают. Жёстко прописаны имена картинок и их размеры. Пусть даже это для пагинации и пути настраиваемые.
  • Работа с деревьями неплоха, только перемещение\копирование ноды получается ресурсоёмким. Но надо так понимать, делается из админки, следовательно, не так часто.
  • Модуль новостей — с наскоку не зная всей архитектуры не очень разобрался, но из общих впечатлений: работает кэширование. Функций шаблонизатора — их разбросано ровным слоем по коду. Как и запросы, которые хоть и через библиотеку, но строятся на местах. Т.е. при написании любого модуля много муторной работы, которую на себя должна бы взять одна-другая библиотека, а то и ядро…
  • Обработка ошибок, глобальный роутинг и инициализация, а также прочее ядро, естественно, в паре классов и одном модуле отсутствуют. Так что не могу судить


Итого, общее впечатление после нескольких минут изучения: код довольно тщательный (и заявленные на сайте системные требования подтверждают ;), но поддерживать и расширять его можно только хорошо изучив всю систему. Даже не так. Система не делает довольно много вспомогательной работы, которую я бы хотел видеть для написания своих модулей.
Принято. По больше части даже спорить не с чем. Не совсем согласен в плане нескольких моментов, но думаю основной цели мы достигли: если CMS платная и код закрыт, это вовсе не означает что разработчики лепят внутри что попало и как попало, типа зенд все стерпит. Согласны? ;)

Вот если бы разработчики CMS смогли договориться о каких-то стандартных функциях и обработчиках, возможно некие стандарты в наименовании переменных и констант, общие объекты и библиотеки и т.д. Чтобы программисту не нужно было разбираться в полностью новом коде при переходе с CMS на CMS, то работа программистов стала бы намного проще. Но думаю, это дела не ближайших дней, хотя тема интересная!
вовсе не означает что разработчики лепят внутри что попало и как попало, типа зенд все стерпит. Согласны? ;)
Угу. Я, правда, этого и не утверждал.

Чтобы программисту не нужно было разбираться в полностью новом коде при переходе с CMS на CMS
Есть ещё фреймворки и cms, написанные на них. Правда и самих фреймворков хватает. :)

Не совсем согласен в плане нескольких моментов
Я тоже не называл себя истиной в последней инстанции. :)
Народ нету кармы совсем иначе оформил бы отдельным постом.
Вот мой 3-х дневный опыт установки, использования и общения с саппортом.
Итак задача была найти cms интернет магазин с выгрузкой из 1с.
Набрел на эту подделку.
Первое впечатления вроде приличный сайт, цены не заоблачные.
насторожило что не работает функция «Создание персональной демо-версии» типо должна была создаться на их сервере демка.Пишеет постоянно, типо что попробуйте через несоклько минут.
Общая демо версия на сайте при клике на кнопку «экспорт из 1с» говорило что в демо версии функция недоступна.
НУ да ладно подумал я. Скачаю триал версию.Скачал.Дальше начались пляски с бубном.
Уточню, что ставил все на стандартный выделенный сервер под CENTOS 5.3.
При установке в авторежиме выяснилось что эта поделка не может распознать версию ZendOptimazer и требует (ВНИМАНИЕ!!!!!) выключенный Registr Globals.
Спросил у саппорта, что мне с этим делать.Ответили, что ничего не знают и что без RG работать не будет.
Отдельно о саппорте.На ответ уходит в среднем от 10 минут до несокльких часов, причем вне зависимости от вопроса.Я общался по аське с человеком по имени Андрей(UIN: 571894757) если что.
Упустив детали скажу что на запуск триал версии этой фиговины потратил не меньши 3 часов.
В итоге когда заработало выяснилось что для интеграции с 1с нужно качать исчо какую то программу.
Всем конечно побоку что у меня не винда.Да и не в этом дело вовсе.
Интеграция с 1с присходит у них на уровне обмена csv фалов.
Что для того чтоб его обработать я должен ставить какой то доп софт??
Сама по себе админка нереально глючная, причем на вопросы о глюках саппорт не отвечает принципиально.
Из мелочей которые заметил по ходу
-отсутствие визуально редактора при добалении новостей.
-нерельныйе глюки админки в FF
-Все предустановленные бесплатные шаблоны либо разъезжались либо кукожиться в моем браузере
В итоге снес эту поделку нафиг.Мое личное мнение она даже даром не нужна.
Просто обидно что потратил столько времени впустую.

Articles