Убрать бы это говно с хабра не плохо)
А то ПэХэПэ программисты действительно считают что:
«Большинство торрент трекеров написано на PHP, хотя встречаются и такие, которые написаны на C# языке, но для ознакомления мы будем использовать именно PHP.»
=) бугагагашеньки
Торрент трекер в контексте статьи это и есть скрап+аннонсер А всё остальное это сопутствующие рюшки.
Наиболее популярным С++ торрент-_трекером_, поддерживающим миллиарды пиров является xbtt.sourceforge.net/
Друг ты в курсе процентов 90 самых посещаемых, с многомилионными аудиториями, проекты начинали/до_сих_пор работают на связке php+mysql? Многие, при возрастании нагрузок, частично переписывают «узкие» места на тот же C++, но многое и остается, а кто-то вообще не переписывает, оптимизируя код, обвязки, расширяя каналы и т.д.
Хороший язык — это не тот, который «красиииииииииивооооо», а тот, который «целесообразно». И статистика в этом плане не обманывает. Спроси википедию (которая кстати тоже php+mysql если мне память не изменяет).
Ой и вы наверное в курсе что когда-то давно, в старадавние времена катались на лошадях)
Сейчас, тоже кто — то считает что на них целесообразно передвигаться по центру города, угу )
Немного надуманное сравнение, уж извините ) Как быть с тем, что и сейчас и, уверен, через год-два, те-же 80-90% новых проектов под веб (в т.ч. изначально предполагающие высокие нагрузки) будут писаться на PHP?
Как правильно заметил комментатор ниже, PHP — отличный инструмент в умелых руках, просто его «ауру» портит крайне низкий порог вхождения (хотя лично я не считаю что это плохо), рождающий большое количество довольно грубых поделок, некоторые из которых обретают популярность.
Ведь и обычным молотком можно размозжить все пальцы себе, а можно, при должной сноровке и умении, сколотить прекрасный кухонный гарнитур к примеру ;-)
Вы правы что «непрофессионализм» желательно с хабра убрать (система рейтингов/кармы/итд для этого и придумана) но РНР тут не при чём, то что среди РНР-программистов очень много ламеров, вовсе не значит что таковые все.
Возможно я поиграю роль «капитана очевидность» и открою Америку, но на РНР действительно можно писать грамотный (читабельный и масштабированный) код. И тот факт что таковой пишут далеко не все, вовсе не недостаток языка, а лишь факт с которым надо смириться (в других языках тоже ламерья полно, просто среди РНР-шников его чуть больше в силу популярности языка)
В клиенте адрес трекера должен быть такой ваш_сайт/tracker.php, данные будут передаваться туда. Данный трекер предназначен в первую очередь для малых сетей, где нет нужды использовать крупные трекеры вроде торрентпира, и xbtt
Простейший это когда в нём только самый минимум (я такой писал, 670 байт РНР кода было, но он был дырявый, по этому сейчас работает такой-же простой но уже на 2.5кб кода)
Однако он совершенно не имеет никакого смысла ибо есть DHT (трекер в наше время нужен для ограничений, по ратио итд, по этому писать «простейший» уже нет никакого смысла, только в обучающих целях)
Проще и не надо, более того код настолько кривой что лучше бы чего-то посложнее. Даже обилие собак в коде и то зашкаливает, а уж остальное.
Но ладно, по пунктам
— Если это показательный пример, где комментарии?
— Если это пример для реального проекта, почему ошибки сервера (типа «database error») которые должен видеть только программист, выдаются клиенту?
— Нафига такие развратные проверки всего и вся? (info_hash надо проверять сначала на isset потом на strlen, никаких empty ибо стандарт предусматривает фиксированную длинну)
— Почему не проверяется «magic_quotes»
Я могу долго продолжать, но пока остановимся на этом…
Как я уже писал, это лишь те простейшие вещи которые можно делать благодаря php естествено такой код на рабочую машину ставить можно для проверки работоспособности нельзя. Кому надо может поправить различные проверки входящих данных. Как для ознакомления код по моему само-то. А насчет комментариев, вы можете найти описания функций на php.su :)
Вы считаете, что данный материал будут читать люди незнающие абсолютно ничего о php? Я думаю что если человеку что-то нужно для создания того или иного он берет материал и складывает его, в сумме получает нужный продукт, спасибо конечно и за ваши вопросы.
>>— Если это показательный пример, где комментарии?
Комментарии есть, посмотрите между кодом, если кому-то что то будет неясно, я дополню.
>>— Если это пример для реального проекта, почему ошибки сервера (типа «database error») которые должен видеть только программист, выдаются клиенту?
Для реального проекта каждый работает напильником под себя.
>>— Нафига такие развратные проверки всего и вся? (info_hash надо проверять сначала на isset потом на strlen, никаких empty ибо стандарт предусматривает фиксированную длинну)
Для проверки верности данных! Я сам рассматривал что и как передаёт клиент трекеру, поэтому и функции не убрал, вообще люблю извращаться над такими вещами.
>>— Почему не проверяется «magic_quotes» это уже дополнение к теме.
Я считаю:
— Если код всё же «показательный», и его будут читать новички, то он должен быть «максимально крут»
(ибо обучив новичка ставить собак в коде, вы рождаете очередного «быдлокодера»)
— Если код для профи, то в нём должна быть «фишка» (либо уж он должен быть минимален, либо максимален, либо «мега крут»)
Так и не могу понять зачем ЭТО выложено в блоге. (ни демонстрационной, ни пользовательской, ни даже извращенской ценности, сей код не имеет.)
Какая фишка может быть в том, что получил гет/выдрал с базы / отдал || не отдал пиров?
Вам возможно нет никакой пользы, если есть желание напишите подобный пост где будут учтены все ваши потребности, я с удовольствием посмотрю на сие детище.
Писал, получил свою честно заслуженную порцию минусов, и осознал что писатель из меня ничуть не лучше чем из Вас. =)
А «фишка» может быть в любом даже неожиданном месте, почитайте хабр. Кто-то на батниках BMP файлы генерирует, кто-то умудряется в 100 байт кода уложить полнофункциональную программу, кто-то ещё что-то. Короче простора для фантазии куча, вовсе не обязательно чтоб код был идеален, разврат тоже в почёте. Однако приведённый тут трекер, не имеет никакой «фишки». (Ни качественной, ни развратной.)
Если вас не забанил гугл, спросите у него, как с помощью китайского символа можно обойти escape_string, и почему сисьадмины любят правило «запрещено все, кроме разрешенного», а не «разрешим все, запретим немного».
Спасибо за замечание, BitTorrent поправлен, а насчет сниффера мне как то лучше, когда все происходит вживую, хотя для тех, кто хочет почитать может обратиться к вики (http://en.wikipedia.org/wiki/BitTorrent_%28protocol%29)
А вы попробуйте перейти на трекер для отладки, например забыл поставить ";" и что в итоге? В клиенте будет «Трекер отправляет неверные данные» как вы поступите в таком случае? Проще перейти по ссылке сделанной сниффером, в которой существуют гет параметры, такие как info_hash, downloaded и прочее, перейдя по данной ссылке мы получим ошибку.
не минусую и не плюсую. первое — потому что тема близка, второе — потому что особо не за что. Код привели, это вроде правильно, но лучше бы написали статью о концепции, с пояснениями, а код реализации приложили бы.
выучить php — это пустяк, научится его грамотно использовать — это уже опыт. а то придет какой-нить школьник, скопипастит и потом будет гордится, какой у него крутой трекер, а понимать, как он работает не будет… и станет потом одним из многих…
С вами совершенно согласен, но без понятия основ, при возникновении какой либо ошибки он и отладить её не сможет. А насчет более правильного излогания мыслей учту, писать красивые посты пока не очень получается, но развиваемся. :)
1. форматирование. отступы, табуляции (linux, ff3 — все без отступов, читать тяжело)
2. грамотная структура кода. если уж процедурный подход — то тогда разнесите по смыслу: вот тут проверка, вот тут — работа с базой, вот тут — подготовка запросов; выше слоем — вот функция, которая выводит то-то, а вот — которая выводит сё-то.
3. а еще лучше написать и обработать обфускатором. перенеся в блог Ненормальное программирование. Или в Занимательные задачи — сломай себе мозг, восстанови код моего торрент-трекера (кстати через дефис, по-моему, пишется).
А зачем? Кстати говоря ?> рождает проблемы т.к. в некоторых случаях к файлу може добавиться перевод строки (например при заливке по ftp в text-mode). Ну и перевод строки уйдет в вывод, что может родить проблемы с дальнейшей отправкой заголовков.
Интересно, а что будет в следующем посте? Могли бы эти 5 несчастных переменных (ведь пять?) здесь уже описать. Информация абсолютно нулевая. Или это урок «как не надо писать на php»?
Использование $_REQUEST как бы намекает, что программисту «не известно» с какими данными он работает.
if ($require_announce_protocol == 'no_peer_id') — здесь хорошо бы использовать константы const NO_PEER_ID = 'no_peer_id' и сравнивать с ней. Ещё лучше если константа классовая (см. про ООП).
Не сомневаюсь, что всё это работает, но тем не менее реализация ужасна — нечитабельный, трудноподдерживаемый код, как следствие — немасштабируемое приложение.
Думаю, что эта статья имеет другие цели. Он же не готовый скрипт трекера выкладывает ради скрипта трекера. А показывает как с ним работать. И если бы это был ООП код, то пост был бы немного больше. И менее понятен для новичков. А для кого эта статья прежде всего? Именно для новичков.
Ну а код можно было было бы поаккуратней написать, конечно)
Вообще не аргумент. Давайте писать плохой код, если это: «для себя», «для других целей», «временное решение», «на скорую руку», «фсем похуй»? Так и рождаются проекты, которые нереально поддерживать и развивать, так и остаются программисты на уровне *новичков*.
Новичков нужно учить писать код правильно и давать правильные примеры, иначе из «новичков» не вырастут. статья про peer-to-per — вот и нужно было подробности реализации трекера и механизм его работы расписать, код вообще лишний («статья имеет другие цели»). А откомментированный код можно приаттачить или выложить на гуглокоде/гитхабе.
Самое интересное, что Ваш единственный аргумент «для новичков» разбивается в дребезги — для них эта каша тоже непонятна, как раз потому что логика и структура не прослеживаются.
Удивительно — но я угадал о чем топик и что там именно, начав читать.
Насчет PHP — язык клевый, зарабатываю как раз за счет программинга на нем. Хотя только сегодня подписал на защиту диплом клиент-серверного приложения на плюсах с интеграцией с приложением на своем фреймворке PHP.
Итак, почему говнокод — это плохо. Не потому, что код плохой в плане алгоритмов или ООП. Я не дрочу на правильность.
Я дрочу на ПОДДЕРЖКУ. Знаете, почему Джумла — херь и полное, отвратительное говно, а какой-нибудь Livestreet — суперняшный продукт? Потому что МОДИФИЦИРОВАТЬ последний — одно удовольствие.
Я думаю, именно с этим связана нелюбовь к плохому коду. Каждый из нас в свое время ковырял говнокод. Я однажды правил метапоисковик ИНДУСА с переменными на индусском, в одну строчку файл. Это был ппц. С тех пор привожу как пример.
И вот все мы, хорошие программисты, запоминаем ощущения, и ассоциируем говнокод с геммороем. И когда видим нечто подобное снова — ощущение возникает на автомате. А потом уже сознание подыскивает причину гнева — плохой язык, плохой код, молодой автор, жена не дала, и так далее.
Желаю всем новичкам поскорее проходить стадию говнокодинга. Первое и самое главное — осознать, что никакие отмазки типа «ну работает же» не заменят признания, что ты всегда будешь в чем-то хуже лучших программистов, и что текущий код можно улучшить. И второе желаю — побольше читать правильных авторов, Макконнела, Мартина, других мудрых дядей, и применять все прочитанное на практике.
И да, Питон — рулез, а Джанга — лучшая на свете приблуда! Руби отдыхает в сторонке (кстати ИМХО Руби — это как продолжение языка Перл — в итоге на обоих очень легко благодаря всяким штукам с приставкой мета- наговнокодить, не то что на Питоне).
Неа, на весь топик вбросом можно назвать только последний абзац Вашего первого поста, аналогов не нашёл. А «чем я хуже» это аргумент сами знаете из какой области)
Прикольно. 4 абзаца посветил рассуждениям, что не php плох, а руки у людей кривые, а в конце обосрал perl и ruby. Я конечно всё понимаю, но осадочек то остался.
В последнее время я начал понимать, что читаю топики и комментарии на хабре еще до их опубликования, you are not alone. Важен только результат, а способы и инструменты его реализации никого не интересуют. Наверно кроме людей, которые в коде копаются. Главное парадокс в том, что компании которые с хорошим кодом — быстро сворачиваются, а говнокодеры — быстро поднимаются, становятся лидерами в области и не плохо зарабатывают на поддержке — реалии жизни.
Говно-код писать быстрее и проще, это факт. NZeraF во многом прав — пока одни совершенствуют свой код, другие по-быстрому завоевывают ниши.
Это, впрочем, говно-код не оправдывает и не защищает :)
Говнокод на то и говнокод, что в нём даже аффтар ногу сломит, поэтому это нифига не быстрее и не проще — некоторые просто по-другому не умеют.
Ок, давайте с примерами: уверены ли Вы, что твиттер наложен? Дело в том, что можно привести в пример много лидеров, у которых с кодом *интуицивно* всё в порядке (не видел, не проверял, но это кажется естественным). А вот где примеры обратного? Принцип презумпции невиновности — до тех пор пока код не увиден, он не считается говнокодом.
>Данные передаются GET запросом, для просмотра этих данных вы можете установить http-сниффер например HttpAnalyzerStd.
я для этих целей добавлял в список трекеров в торрент-клиенте свой PHP-скрипт на локалхосте и смотрел заголовки. зачем усложнять?
Зачем писать свое если есть чужое. Я когда-то у себя на сайте решал задачу разадчи популярных файлов со своего сервака и писал об этом в блоге: soloro.ru/?p=1979
Пишем простейший торрент трекер на php