Хроники пьяного панка. Часть II Предстоит учиться мне…

Следующая глава из ████████кого дневника, изменения те же, приятного чтения

Приехал я в славный город П. за день до сессии с 1500 р в кармане, узнал, что в универ мне к 9.45 в воскресенье на Высшую Математику и твердо решил пойти на концерт, но перед этим заехал к ████ и ██████, решил оставить вещи и … на концерт не пошел, ибо у ████ была бутыль водки, а я купил вторую и понеслась. В общем скопировал много нового на хард и нажрался в полное говно, умудрившись практически сразу пропить около 300 р. Проснулся на следующий день вовремя, но с диким перегаром и поняв, что к ебаной матери опоздаю в гребаный универ вызвал такси (-50 р.) Не опоздал, сел сзади, чтоб не дыхнуть на препода, чел, который сидел рядом подмигнул и молча предложил орбит без сахара в качестве средства от перегара…. Высшая математика в целом оказалась мутной и непонятной, особенно если полкурса за неделю, голопам по европам на голых жопах =). Следующим предметом было Прикладное ПО, на которых сразу же началась практика в экселе, преподша молодая, умная и понимающая женщина. Так бы в принципе и не чего рассказывать было бы, днем учеба, вечером полторашка-вторая пива, бичпакет и спать, да пару раз мытье головы в обосранной кошкой ванне ████████ (завел себе придурок, бля, кису, тык она ему всю квартиру засрала), если бы не одно НО.
В четверг на универовском расписании висела листовка, приглашающая всех на акцию против призыва к Дому правительства (как оказалось не далеко от универа), я ессно положил хой на пару (кстати зря, бля ща вот мучаюсь с одним гемором в контрольной) и поперса на акцию. Пришел аж за полчаса до оной, стою, скаутю ментов потихому (т.к. неизвестно, была ли акция санкционированна), менты обнаружились в абсолютно гражданской машине, это услилило мои подозрения о несанкционированности акции, но я все ж стою и жду. На остановку подходит парнек с черным флагом, я к нему тихо подхожу так и говорю, что мол товарисч палево ментообразное. Он сказал спасибо, отошли мы подальше от ментов, за остановку, познакомились. Оказалось, что зовут его ████, учится на истфаке, анархо-коммунист и что акция санкционированна. Потом подошли другие ребята, уже из Молодежной Правозащитной Группы, развернули растяжку — «Долой призывное рабство», парень ихний встал в фуражке и с плакатом «Меняю диплом на сапоги и лопату», МПГ начало раздавать листовки и собирать подписи под каким-то обращением к хер-знает-кому. А мой новый знакомый развернул плакатик «Опять призыв» и разложил у его основания останки кукол, обильно политых кетчупом =) и стал привлекать внимание своим черным флагом. И все бы опять тем бы и кончилось, если б он не пригласил меня на следующую акцию, организованную уже контркультурным журналом ИNАЧЕ и направленную на высмеивание выборов. Журнал сей возглавляет товарисч Штепа и товарисч ███████ (острологи, маги и хозяева мистического █████████ ████). Надеясь познакомиться с оными товарисчами я ессно отправился и на это мероприятие….
Но за день до этого узнал я, что у ████████ есть тарен, который он и дал мне на пробу, когда я поехал мыть голову в его засранной кошкой ванне…. Тарен с водкой, которая опять появилась в честь выходного ████ дали неожиданный фефект в виде ползающих по стенке выключателей, последующего полного отруба сознания и абсолютной невозможности встать на первую пару. Когда добрался в универ все еще видел звездочки, летящие от прикуренной сигареты, и никак не мог воткнуть какая все-таки пара и какой день недели, насчастье встретил одногруппников. Весь день мучался пост-тареновым сушняком. Под конец учебы позвонил ████ и сказал где и во сколько будет акция, и я, опять-таки положив хой на пару отправился на пл. Кирова.
Долго искал ебучую площадь в ПТЗ, потом еще минут 15 поскаутил в поисках ментов и других опасных объектов, которые собсно не были обнаружены (если не считать уже имеющихся агитаторов за Ебаную Россию, Жизнь и т.д.), потом исчо минут 15 искал товарисчей анархистов, наконец мы встретились. Акция была весьма клевая — одного чела переодели в костюм инопланитянина, второй товарисч взял плакат с его изображением, а мне доверили нести плакат с надписью «НАШ НОМЕР В ИЗБИРАТЕЛЬНОМ БЕЛЛЮТЕНЕ №0», остальные раздавали листовки с программой нашего кандидата-инопланетянина.
1. Каждому пенсионеру — 6 соток на Луне
2. Студентам скидки на межгалактические перелеты
3. Всем жителям Карелии — ВНЕЗЕМНОЕ СЧАСТЬЕ.
Народ, находящийся близ площади, начал потихоньку охуевать от такого действа, подходили, спрашивали, за что агитируем, мы серьезно отвечали, что за инопланетянина =) Большинство народа отнеслось позитиффно, даже агитаторы других партий, фоткались, листовки разобрали в момент. Меня правда весьма ощутимо трясло, в следующий раз буду пить валерьянку на случай всякий, ответственность все ж, бля… Потом ████ придумал креатиффный ход, мы одолжили у теток, которые катают на лошадях народ их орудия производства, т.е. лошадей (кстати, тетки с удовольствием пошли на встречу и лошадей дали нахаляву, только сказали, чтоб флагами особо не махали — лошади бояцца). Народ от вида парня с черным флагом и инопланетянина на лошади охуел исчо больше и популярность нашего кандидата выросла до ебени матери.
Потом нас задолбало стоять на Кирова и мы двинулись по улице в сторону управления ФСБ и МВД =) При этом попутно агитировали за инопланетянина, орали абсурдные речевки, типа «МОРОЖЕНОГО!», «БОЛЬШЕ СВЕТА!», «УЛЫБАЙТЕСЬ!». Где-то на середине улицы к нам приебались менты, ████████ остался с ними разбираться, а мы сделав наглые морды пошли дальше, через некоторое время ████████ нас догнал и сказал, что пора сворачиваться. Свернулись быстро, начали расходиться, организаторы пошли дальше, а я с зауниверовскими панками — за универ =) И только мы свернули за угол, как к нам подъехал ментовский козел, откудыва вышли менты и начали понтоваться, попросили предъявить документы
И ТУТ СЛУЧИЛОСЬ. МЕНТ ОТКРЫЛ МОЙ ПАСПОРТ И УВИДЕЛ СЛОВО «КОНДОПОГА»
Сразу ессно посыпались дурацкие вопросы, типа что я тут делаю, не устраиваю ли я вторую Кондопогу. Пришлось показать справку с универа =) У второго нашего чела на куртке была надпись FUCK THE POLICE, что тоже ессно вызвало шум и возмущение (матерное) ментов. В общем нас 8 человек погрузили сначала в 2 машины, легковуху и козел, потом менты поняли, что в козел я никак не влезаю, и как ████████ отправили в отдел на пойманной неподалеку Вневедомственной Охране, так что до отдела я добрался с комфортом и под охраной 2 внушительных дяденег, которые наверное могли бы стать голубой мечтой любого гомосека =)) мазохиста =)) Правда дядьки были весьма вежливые, спросили что я делал с «этими парнями» ф смысле с панками, пришлось наврать историю из серии мимо шел, они рассказали в свою очередь, как охраняли 4 магазин в Кондопоге =) Собсно в ментовке ничего страшного не происходило, документы записали, сфоткали, ничего не спрашивали, откатали отпечадки пальцефф и отпустили в течении 3 часов, как и положено по закону. Херово только что по началу не отпускали курить. А мы сидели, болтали, стебались над ментами, вплоть до того, что начальник отдела наорал на опера «Что, бля за нефорскую тусу тут развел». В общем, отпустили нас с относительным миром в результате, сессия кончилась благополучно и я уехал домой.

Темы

Еще одна заметка от склероза:
Вот ссылка на архив с темами
В архиве и мобильная, и модифицированная основная, со всеми свистелками и перделками.

Кому для чего вдруг надо, просите ключик в комментах на LJR (ну я там чаще бываю, не забудьте регнуться — анонам почта не приходит)

Все сходится. У дедушки Зю. Кто-нибудь заметил?

И даже хрен с ним, что Хотынецкий район (хотя тоже говоряще, намек на Хатынь)
И хрен с ним, что Рак (хотя всегда так и стоит).
Но Мымрино! Мымрино!!

Воистину, Хаос шельму метит!

Цитаты из одного хорошего товарища

Мир основанный на финансовом удовлетворении себя, проводит черту между духовностью и нужно, где нужно — это моя работа (ведь каждый занимается своим делом, по другому просто не выжить)

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

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

мы порождаем хаос, контролировать который для власти уже всё сложнее и сложнее. Власть ведь не плохая) И народ тоже ни в чём не виноват) Просто мы так построили своё настоящее в прошлом, и думать по-другому не можем в силу скованности сознания, технологии здесь не причём.

Разумному закон не нужен, у духовности нет границ и документов

Новости времен апокалипсиса… На своем сайте.

Когда-то, впрочем, не так давно, [info]r_l@ljr сделал офигенный проект — новостные постапокалиптчиеские заголовки. В виде простого скрипта PHP.

Идея крутая, и мне показалось, что неплохо бы ее использовать в дизайне своего сайта. В результате я пошел и спросил у [info]r_l@ljr исходники, а дизайнеры внедрили этот прикол в тему оформления.

Заметка, скорее от склероза, и чтоб не пролюбить… Но мало ли кому понадобится.

При заходе на любую страницу сайта http://tolik-punkoff.com, в его шапке вы можете увидеть сгенерированный «заголовок новости»:


см. ссылку.
см. ссылку

Как эта штука сделана в моей теме и версии WordPress:

Понадобится оригинальный архив (ссылка в конце заметки)

В нем 3 файла:
news_data — файл с массивами фраз для генерации заголовка
global.php — файл скрипта, отображающего заголовок. Новый заголовок генерируется автоматически, через заданное время.
globalf5.php — заголовок генерируется один раз, надо нажать F5, т.е. обновить страницу, чтобы получить новый.

Внимание: в файле news_data пропущена запятая, даже в нескольких местах, так что если сами будете делать, поправьте. На локальном web-сервере, должно быть видно где.

Внедряем скрипт в тему WordPress

1. Закачиваем в директорию темы, например, your-site.org/wp-content/themes/beach/, конкретика зависит от вашего хостера, исправленный файл news_data.
2. Создаем скрипт news.php следующего содержания:

<?php
	$where=array();
	$subject=array();
	$action=array();
	$object=array();
	$parts=array();

	include(__DIR__.'/news_data');

	foreach ($parts as $part) 
	{ 
		$news[$part]=${$part}[mt_rand(0, count(${$part})-1)]; 
	}
	$obs=implode(' ', $news)."&nbsp;";
?>

В конце заметки ссылка на PasteBin

3. Далее находим файл заголовка темы (в редакторе темы WordPress), скорее всего это будет header.php:

В самом начале подключаем скрипт news.php:

<?php
/**
* @package Beach
*/
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
include(__DIR__.'/news.php');

...

Команды ini_set используются для отладки, если что-то пошло не так, скорее всего, вам вывалится сообщение об ошибке. Не буду на этом останавливаться, т.к. подробное описание есть в любом учебнике по PHP, выкиньте эти команды, когда все заработает. include(__DIR__.'/news.php'); подключает ранее созданный скрипт.

4.Внедряем скрипт в header.php, в «шапку» страницы:

...

<h2 id="site-description"><?php bloginfo( 'description' ); ?></h2>
<h3 id="apoknews"><?php echo $obs; ?></h3>
</hgroup>

...

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

5. Подправляем CSS. Файл: style.css

В начале файла дописываем:

#apoknews {
	color: RGB(255, 215, 0);
	background-color: RGB(0, 0, 0);
	text-align:left;
	border: 3px solid #ffd700;
	padding-left: 7px;
}

Ссылки

Код скрипта данных
Код скрипта отображения (news.php)
Фрагмент кода скрипта формирования заголовка header.php.
CSS

Скачать

1. Оригинальный архив
2. Готовый архив.

Форма обратной связи для WordPress, без плагина. Защита от спама и полевые испытания ASCII-каптчи

Или еще раз возвращаясь к напечатанному. Сегодня поговорим о защите от спама.
В первоначально описанном способе копия был баг (промотайте в конец), из-за которого можно было легко и непринужденно загадить ящик получателя спамом, да еще и в автоматическом режиме. Отправить картинки, вирусы, или загадить чужой ящик не получится, но вот закидать «Войной и миром» ящик владельца сайта вполне таки да.
Чтобы уменьшить такую вероятность, добавим в скрипт отправки почты каптчу. Поскольку скрипт, отправляющий почту (mail.php) к компонентам WordPress не относится, то каптчу придется изобретать свою. Лично мне это оказалось даже хорошо, т.к. совсем недавно я писал о создании ASCII-каптчи, копия, и мне прямо-таки жгло показать ее работу в реальном проекте, а не только в учебных примерах. Посему ее и используем для защиты от спама.

Постановка задачи

Переписать скрипт mail.php так, чтобы он смог использовать ASCII-каптчу.

Краткое описание процесса

1. Пользователь в форме обратной связи, вводит сообщение.

2. По нажатию кнопки «Отправить» сообщение передается скрипту mail.php
3. Если сообщение было отправлено из формы, то скрипт генерирует каптчу, HTML-страницу, содержащую параметры сообщения (имя, текст, электронный адрес пользователя), ASCII-изображение каптчи, поле для ввода кода, элементы управления (кнопки) с помощью которых пользователь может ввести код, обновить код подтверждения, отправить код и сообщение.
4. Скрипт также должен обработать возможные ошибки. Если они есть, пользователю выводится соответствующее сообщение и страница с формой ввода сообщения открывается вновь.
5. Если каптча введена неверно, пользователю демонстрируется сообщение об ошибке ввода каптчи, и дается возможность повторить ввод каптчи. Информация в сообщении сохраняется.
6. Если код введен верно и другие ошибки отсутствуют, сообщение передается на заранее указанный в скрипте e-mail.
Далее подробное описание скрипта

А ТЕПЕРЬ, ВНИМАНИЕ, ВОПРОС
Обход этой каптчи:

Реализация не совсем промышленная. Мне хочется, чтобы вы подумали, над тем, как данный способ защиты обойти. Можете воспользоваться своим методом и попытаться заспамить мне почтовый ящик. Кто заспамит — получит минус два вопроса на зачете.
Можно спамить просто так, но желательно, с описанием способа. Я знаю 5.

Комментарии на lj.rossia.org будут открыты для всех, можно анонимно предлагать, как способы обхода, так и способы защиты. Стирать не буду ничего, кроме флуда, спама и личных оскорблений.

Для самых ленивых, кто не удосужился все прочесть. Инструкция по установке.

Форма обратной связи для WordPress, без плагина здесь или здесь

Все делается так же, с той лишь разницей, что обновленный архив скачиваете по ссылке ниже, и не забываете закачать captcha.php в директорию темы, вместе с mail.php.

Ссылки

Смотреть код скрипта на PasteBin
Скачать все одним архивом
Тесты и куски кода

Заметка в PDF

Перфокарты!

Прикиньте, братик обнаружил кучу старых нулевых перфокарт! Их там еще до жопы, это то, что он вынес и вскоре мне отправит.




По клику в полном размере.

К сожалению, не смог нагуглить технические характеристики: сколько влезает байт на одну такую. В целом от 80 до 150, кто дополнит пост — тому печенька.

Компьютер, который с ними работал, еще не откопали 🙁

Ну это же и правда, почти «Steins Gate», ребята!

Возможность отсылки в процессе.

Маленькая заметка о редиректе средствами PHP.

Редтрект в PHP осуществляется с помощью функции header(), и в ее использовании есть небольшая проблема. Она должна быть вызвана ДО любого вывода текста, т.е. до вывода любых тегов, текста, и т.д.
Можно не бояться за то, что текст, выведенный после функции header() пользователь вообще не увидит. Увидит, если установить нужный параметр — время до редиректа, например, так вот:

header( 'Refresh: 5; url=http://natribu.org' );

Цифра 5 указывает на время в секундах, которое пройдет перед тем, как пользователь будет перенаправлен на далее указанный адрес (в данном случае http://natribu.org, хехе).

Следующий код вызовет ошибку:

<?php
	echo "Вы будете посланы нахуй через 5 секунд";
	header( 'Refresh: 5; url=http://natribu.org' );
?>

Warning: Cannot modify header information — headers already sent by […]

Смотреть скриншот

А следующий код сработает правильно:

<?php
	header( 'Refresh: 5; url=http://natribu.org' );
	echo "Вы будете посланы нахуй через 5 секунд";	
?>

Через 5 секунд:

Две и более кнопки submit в форме HTML. Обработка на PHP.

Случилась тут небольшая задачка, как обработать две и более кнопок submit в HTML-форме, причем желательно без помощи JS и иных ухищрений, т.е. есть, например, такая форма:

Надо выяснить (на сервере), какую кнопку нажал пользователь.

На самом деле (ну если никто не поизвращался над браузером, т.е. клиентом) в отправленном серверу запросе POST будут только параметры нажатой кнопки. Если задать каждой кнопке уникальное имя, то можно будет отследить, какая кнопка была нажата, и, соответственно, обработать это.

Создадим тестовую форму multibutton.html:

<html>
	<head>
		<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
		<title>Multibutton 'Send' Test</title>
	</head>
	<body>
		<center>
			<form action='multibutton.go.php' method='POST'>
				<b>Press a button</b></br>
				<input type='text' name='testtext' value='Test Text'></br>
				<input type='submit' name='button1' value='Button #1'>
				<input type='submit' name='button2' value='Button #2'>
				<input type='submit' name='button3' value='Button #3'>
			</form>
		</center>
	</body>
</html>

На PasteBin

И напишем скрипт-обработчик multibutton.go.php:

<?php
$buttonmessage="<center><b>Perssed button:</br>#";
				
		//Проверка кнопок
		if (isset($_POST['button1']))
		{
			$buttonmessage.="1";
		}
		
		if (isset($_POST['button2']))
		{
			$buttonmessage.="2";
		}
		
		if (isset($_POST['button3']))
		{
			$buttonmessage.="3";
		}
				
		echo $buttonmessage."</br>";
		echo "Test text value: '".$_POST['testtext']."'</b></br></br>";
		echo "<b>----- Output $_POST array: ----</b></br><code><pre>";
		print_r ($_POST); echo "</br></pre></code>";
		echo "<b>-------------------------------</b></center>";
?>

Если в массиве $_POST будет найден элемент button1 — обрабатываем нажатие кнопки #1 (if (isset($_POST['button1']))), аналогично поступаем с другими кнопками. Текстовое поле — исключительно для теста, можно вписывать любое значение, оно будет показано пользователю.
Для наглядности выводится содержимое массива $_POST:

print_r ($_POST);

Код на PasteBin

Получим следующее:
Нажата кнопка #1:


Нажата кнопка #2:

Нажата кнопка #3:

Можно объединить создание формы и вывод результата в единый скрипт: см. код на PasteBin

Источник

Две и более submit кнопки в форме

Скачать пример

«Хроники пьяного панка. Часть I Город-ге(мор)рой.»

От редактора:
Панкарь решил обнародовать свой старый дневник, говорит, чтоб не пропало, ибо у него какую-то дрянь в организме обнаружили.
Материалы датируются 2005-2009 г.г., опубликованы с разрешения автора, моя редактура минимальная — вырезаны в стиле SCP имена, фамилии и клички. Предоставляем слово автору:

Когда произошли события я находился в… естественно в компьютерном клубе в интенете на форуме, откудаво об етном и узнал, весть со скоростью черт-знает-чего разнеслась по интенету и попала на скиновские сайты и ессно форум наполнился вагоном провокаторов, да и у народа накипело…. Собсно активные события начались с сообщения, что народ планирует «Сделать Чайку и рынок непригодными к дальнейшему использованию». Хачеги не стали особо ничего ждать и на следующую же ночь после драки съебали с рынка. Первая ночь прошла более менее спокойно, из активных действий была только разгромлена палатка с арбузами в районе вокзала, да спизжено неимоверное количество оных, оставленными хачегами на рынке. В этом даже поучаствовал гитарист нашей панк-группы ███████. Арбуз мы с удовольствием сожрали на тусовке. На следующий день я съебал к ██████ на дачу, где мылся в бане, ездил на рыбалку, в общем настроение было буддистски-спокойное. На форуме узнал перед отъездом, что в воскресенье будет сход жителей у рынка. По сотовому было сообщено от одного знакомого мента, что в город едет ОМОН, а в воскресенье позвонил Агент ████ и спросил, не знаю ли я чего-нить интересного. Я ессно подорвался в город, надеясь и узнать что-нить, и нарезать видео на клип, а возможно и исполнить тайную мечту — попасть на телеканал НТВ. Как выяснилось позже — попал, но не на телеканал… Приехал, к тому времени сход уже закончился, старшие разошлись по домам, а более молодые и более подогретые пивом решили пойти разносить Чайку. Когда я приехал, то увидел как кидают камни в 4 магазин, позвонил своим, они уже были практически в эпицентре событий, я ессно пошел к Чайке. Ее уже громили, оттудаво потихоньку выносили пиво, если честно говорить, наша тусовка тоже, бля, постаралась, вынесли ящик Охоты Крепкой. Расположился я с ребятами у часов напротив Чайки и стал смотреть «кино» и пить пиво (трофейное), потом подпил, пошли с ███████ во дворы песни орать, сходили, посмотрели как громят Фламинго и вернулись к Чайке, и тут на толпу пошли отряды ОМОНА, меня где-то за банком они настигли, я получил немного «демократизаторов» и эти суки спиздели у меня неделю назад купленный NOKIA 3310 вместе с симкартой, посему номер у меня изменился… Я — на оставшуюся трубу и ██████ звонить, товарисч пришел, забрал меня, мы к какой-то бабе пошли на хату, но не дошли, где-то по дороге еще пива попили, потом пошел ОМОН, мы опять где-то во дворы спрятались, я ██████ на всякий случай трубу отдал, а потом ОМОН нас все-таки настиг, гитариста ████ и ██████ взяли, а я второй раз получил демократизаторов, потом я из-за своего подпития плохо помню…. вписался в тачку к каким-то бандитоподобным личностям, которые, правда поделились со мной водкой, а потом нас опять (уже последний раз) настиг ОМОН, после чего мы, наконец, объезжая кордоны и прочую жопу отправились на ███████.
Итог: потеряные мобильные телефоны (один правда нашел Агент ████), 3000 р (я в Чайке был сисадмином и должен был в понедельник идти делать там комп), у ██████ 5 суток+потерянный коммуникатор (КПК с функцией телефона) стоимостью 20 000 р. =( И просто непередаваааемые очучения. В настоящее время битва за Кондпогу перенеслась в интернет и окончилась флудом великим и первыми местами в рейтингах mail.ru для кондопожского форума…
Далее все было спокойно, относительно…. Дописал гитару и бас на своем диске, апгрейдил между делом комп (1.7 GHz Seleron/512Mb/HDD 80GB/Video 128 Radeon 9600) и занимался пиением пива, но тут пришла…. СЕССИЯ.

Сентябрь 2006 года (прим. ред.)
Агент ████ — польско-украинский журналист, фигурирующий в некоторых записях, как Агент Оранж (дада, намек на этого цвета революции) или Лука Розенбург.

ASCII-каптча, каптча псевдографикой. Часть III. Примеры использования.

Сразу оговорюсь, это учебные примеры. В ближайшее время я вернусь к теме и покажу, как использовать каптчу «на местности», т.е. встроить ее в работающий движок сайта или его часть. А тут пока примеры относительно скорее умозрительные, что называется, из учебника.

Каптча и механизм сессий.

Если кто-то вдруг совсем не знает, что это такое, то в конце заметки есть ссылка на источник, ну или можно в поисковик сходить.

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

Код на PasteBin

Использование cookie для проверки каптчи

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

Код на PasteBin

Тут поясню лишь один момент, установку самих cookie. Делается это встроенной функцией PHP setcookie, полное описание которой вы можете найти в разделе источников в конце заметки.
Мне же понадобились только три параметра:
setcookie($name,$value,$expiredtime);
где:
$name — имя cookie
$value — передаваемое в cookie значение, сохраняемое на компьютере пользователя
$expiredtime — срок действия cookie, после его окончания cookie не будет обрабатываться сервером. Таким образом устанавливается максимальное время, данное пользователю на ввод кода каптчи.

В данном случае:

setcookie('mycaptchamd5',md5($captchacode),time()+300);

т.е. имя cookie 'mycaptchamd5', в качестве значения передается md5-хэш кода каптчи, а время действия устанавливается в 300 секунд (т.е. 5 минут).

Смотреть код или скачать готовый вариант

Код модуля ASCII каптчи на PasteBin
Пример с сессией
Пример с cookie
Цифры псевдографикой. Вариант 1
Цифры псевдографикой. Вариант 2

Скачать все с Mega.nz в одном архиве

Источники

Функция setcookie()
Разработка CAPTCHA своими руками
Копии

Предыдущие части

Часть I
Часть II

ASCII-каптча, каптча псевдографикой. Часть II. В которой генерируется каптча.

Итак, закончили мы на том, что нарисовали все цифры, создали массивы php с псевдографическими изображениями цифр и написали отладочную функцию, которая выводит конкретную цифру. Продолжаем!

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

$pgstring="#$%@!?0"; //символы, из которых будут составлены цифры

Аналогично и для «пустых» символов:

$spstring="- "; //пробельные символы

Тут все зависит от вкуса, цвета и лично ваших глазок. Главное, чтобы в строке с возможными «пустыми» символами и в строке с возможными символами, изображающими цифру, не встретилось одинаковых символов, иначе при определенных условиях, пользователь вполне может получить вот такую вот гадость, вместо каптчи:

###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######
###### ###### ###### ###### ###### ###### ######

Заведем еще две переменные, которые будут хранить выбранные символы для «пробельных» и символов изображения:

$pgchar="";
$spchar="";

Пока просто оставим их пустыми, потом к ним еще вернемся.

Далее подробное описание скрипта с картинками и видео

Итого

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

Код каптчи

Смотреть на PasteBin

Начало здесь
Продолжение

ASCII-каптча, каптча псевдографикой. Часть I.

Сегодня будем рисовать каптчу. Причем не с помощью стандартных библиотек вывода графики (таких мануалов в сети более чем достаточно), а каптчу, отображаемую пользователю в виде псевдографики, т.е. изображения символов каптчи будут созданы из обычных числовых и буквенных символов. Для упрощения задачи примем следующее:

— В качестве символов, из которых будет создаваться изображение, будем использовать латинские буквы, цифры и знаки препинания. Можно, конечно, и китайскими иероглифами пользоваться, но не факт что пользователь сможет каптчу распознать и она у него не «поплывет».
— Сам код каптчи будет состоять только из цифр (ну вот лень мне было заморачиваться с буквами в ASCII-арт).

Плюсы:
+ Скрипт легко встраивается как медведевский будильник, в разные места в любое место, где нужна каптча.
+ Не требует библиотек обработки изображений, дополнительных ранее нарисованных картинок и т.д., соответственно, будет работать даже на самом плохом хостинге, где библиотек типа ImageMagick может вообще не быть
+ Отображается даже в консольном (текстовом) редакторе типа lynx.
+ Почти не тратит трафик (текст же) и ресурсы сервера.

Минусы:

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

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

Я сам не великий ASCII-сенсей, так что использовал достаточно стандартную методу:

1. В любом простом текстовом редакторе (Блокноте, Notepad++, mcedit или редакторе FAR-а) нарисуем поле размером в X символов и Y строк каким-либо одним символом, например *, -, # или любым другим. Должно получиться что-то типа этого (я взял поле размером 6 x 5 символов):

------
------
------
------
------

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

-0000-
00--00
00--00
00--00
-0000-

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

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

Создаем массивы, содержащие псевдографические изображения цифр. Здесь и далее условимся, что в качестве «пустого» символа я использовал *, а в качестве символа для изображения цифры, знак $.
Код и некоторые пояснения
В следующей части создадим генератор кода каптчи и генератор ее ASCII-изображения.

Форма обратной связи для WordPress, возвращаясь к напечатанному.

Или как я избавился от слишком назойливой опеки антиспама на сервере.

Не так давно поднимал вопрос о форме обратной связи для сайта на WordPress [Копия].

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

Ситуация такая: антиспам финского сервера (вполне оправданно, кстати) отправляет в спам письма с доменов .ru (mail.ru и yandex.ru точно), .kz, .by и некоторых не связанных с ГОРФ, типа .tk

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

Находим в скрипте mail.php строчку:

$mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n";

И меняем ее на:

$mes = "Имя: ".$name."\n\nТема: " .$sub."\n\nСообщение: ".$message."\n\n"."E-mail to answer: $email\n\n";

Ниже меняем в строке

$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");

$email на $address. Должно получиться:

$send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$address");

Что этот код делает. Да все просто. Строка с сообщением ($mes) изменяется так, что адрес, который ввел пользователь в контактной форме, добавляется к тексту сообщения как простой текст. Параметры функции php mail изменяются так, что в заголовок письма вместо адреса пользователя, добавляется наш собственный адрес для приема сообщений из контактной формы. В результате мы получим сообщение, отправленное с нашего же адреса. Примерно как на скриншоте ниже:

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

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

Заметка в PDF

C#. Генерация строки из случайных символов.

Задача

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

Решение

Делается это довольно просто. Поручим формирование строки отдельной функции.
Во входных параметрах передадим ей строку, содержащую набор символов, из которых будет сформирована выходная случайная строка (параметр Alphabet) и длину генерируемой строки (параметр Length)

string GenRandomString(string Alphabet, int Length)
{
	...
}

Внутри функции.

//создаем объект Random, генерирующий случайные числа
Random rnd = new Random();
//объект StringBuilder с заранее заданным размером буфера под результирующую строку
StringBuilder sb = new StringBuilder(Length-1);
//переменную для хранения случайной позиции символа из строки Alphabet
int Position = 0;

Далее в цикле генерируем случайную строку:

for (int i = 0; i < Length; i++)
            {
                //получаем случайное число от 0 до последнего
                //символа в строке Alphabet
                Position = rnd.Next(0, Alphabet.Length-1);
                //добавляем выбранный символ в объект
                //StringBuilder
                sb.Append(Alphabet[Position]);                
            }

Возвращаем сгенерированную строку:

return sb.ToString();

Код функции на PasteBin

Пример использования функции

txtReturn.Text = GenRandomString("QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm", 10);

возвращает строку случайных символов длиной 10 знаков, состоящую из заглавных и строчных букв английского алфавита.

Немного об оптимизации