Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Авг
Как yменьшить картинку с помощью php
// — Настройки
define(’WIDTH’,200); // Ширина иконки
define(’HEIGHT’,200); // Высота иконки
define(’R’,255);define(’G’,255);define(’B’,255); // RGB для фонового цвета под иконкой
// — Поехали
$imageInfo = getimagesize( $file );
switch( $imageInfo[2] ){
case 1: $image = imagecreatefromgif( $file ); break;
case 2: $image = imagecreatefromjpeg( $file ); break;
case 3: $image = imagecreatefrompng( $file ); break;
default: exit();
}
//— Создание иконки фотки
$result = imagecreatetruecolor(WIDTH,HEIGHT);
$bg = imagecolorallocate( $result, R, G, B );
imagefilledrectangle( $result, 0, 0, WIDTH-1, HEIGHT-1, $bg );
//— Вычисляем соотношение сторон для иконки
$ratio1 = $imageInfo[0]/WIDTH;
$ratio2 = $imageInfo[1]/HEIGHT;
$ratio = $ratio1<$ratio2?$ratio1:$ratio2; // выбираем наименьшее соотношение
// if ( $ratio<1 ) $ratio=1; // Оставить иконки меньших размеров WIDTH и HEIGHT не трогать
$width = $imageInfo[0]/$ratio;
$height = $imageInfo[1]/$ratio;
imagecopyresampled( $result, $image, 0, 0, ($imageInfo[0]-WIDTH*$ratio)/2, ($imageInfo[1]-HEIGHT*$ratio)/2, WIDTH, HEIGHT, $ratio*WIDTH, $ratio*HEIGHT);
//— Отправляем (возвращаем) иконку
header(’Content-type: image/jpeg’);
imagejpeg($result);
Алгоритм используется для подготовки эскизов (иконок) изображений.
Причем данная версия для того хороша, когда все фотки каких-попало форматов. И все аккуратненько подгоняются под размер WIDTHхHEIGHT. То, что не влазит, обрезается.
Если обрезание (обрезание исходной картинки имеется ввиду) не нужно, т.е. чтобы эскиз со своими “какими-попало” пропорциями просто вписался в прямоугольник WIDTHхHEIGHT.
Достаточно заменить одну строчку:
…..
imagecopyresampled( $result, $image, 0, 0, ($imageInfo[0]-WIDTH*$ratio)/2, ($imageInfo[1]-HEIGHT*$ratio)/2, WIDTH, HEIGHT, $ratio*WIDTH, $ratio*HEIGHT);
…..
// вот на эту:
imagecopyresampled( $result, $image, (WIDTH-$width)/2, (HEIGHT-$height)/2, 0, 0, $width, $height, $imageInfo[0], $imageInfo[1]);
8th
Проверка существования файла на сервере. php
Необходимо проверить, доступна-ли фотография по заданному пользователю адресу.
Andkorol:
Можно попробовать использовать функцию get_headers()
Примерно так:
$file = ‘http://www.domain.com/somefile.jpg’;
$file_headers = @get_headers($file);
if($file_headers[0] == ‘HTTP/1.1 404 Not Found’) {
$exists = false;
}
else {
$exists = true;
}
25th
Июл
Как обработать данные с форм в php?
Johnatan:
if ($_GET[‘fid’] == 1) header(’Location: http://www.example.com/’);
или
switch ($_GET[‘fid’]) {
case 1:
header(’Location: http://www.example.com/’);
break;case 2:
header(’Location: http://www.example2.com/’);
break;default:
header(’Location: http://www.default.com/’);
}
14th
Июл
Вывести набор случайных строк из бд? php
Johnatan
$amount = 10; // сколько строк выбирать из базы
$rows = mysql_result(mysql_query(’SELECT COUNT(*) FROM `sb_eng`’), 0);
$fquery = array();
while (count($fquery) < $amount) {
$fquery[] = '(SELECT * FROM `sb_eng` LIMIT '.rand(, $rows).', 1)';
}
$query = implode(' UNION ', $fquery);
$res = mysql_query($query)У тебя будет чистый набор рандомных строк из таблицы. Быстро и эффективно. Плюс не забываем про замечательную функцию mysql_fetch_assoc
6th
Июл
Оптимизация PHP-скрипта: Что быстрее function или include?
По поводу оптимизации и скорости работы include в сети много материала, а вот по function практически ничего, поэтому возник достаточно простой вопрос: что быстрее выполняется function или include и идентичным содержанием?
2nd
Июл
Защита от спама в форумах phpBB2. САРТСНА
Все, так или иначе, сталкивались с капчей. САРТСНА (Completely Automated Public Turing test to tell Computers and Humans Apart) – полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей). Представляет собой компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером. В этой статье я хочу рассказать о двух методах защиты форума на базе движка phpBB2 от спамеров и их ботов…
Защита от спама в форумах phpBB2. САРТСНА
by Arigaro http://www.programmersforum.ru/member.php?u=19542
Технология САРТСНА была создана в 2000 году учеными из университета Карнеги-Меллона, и сегодня используется в Интернете практически повсеместно. Основная идея теста САРТСНА: предложить пользователю такую задачу, которую легко решает человек, но которую крайне трудно решить компьютеру. Как правило, это задачи на распознавание зрительных образов. Наиболее часто эта технология используется в различных Интернет-сервисах, в частности – хранилищах файловых архивов и форумах.
Уязвимости защиты САРТСНА
При недостаточной степени защиты скриптов спамбот может пройти тест САРТСНА и без распознавания картинок. В этом случае он либо подменяет идентификатор сессии, либо парсит информацию, содержащуюся на WEB странице и определяет то, что изображено на картинке. Если количество вариантов ответов невелико, спамбот может «угадать» ответ. Как правило, используется несколько параллельных потоков, благодаря чему скорость перебора зависит от полосы доступного канала. Кроме того, возможно и накопление базы вопросов и ответов, и рано или поздно вся она будет у него.
Существуют программы, распознающие конкретные реализации САРТСНА, к примеру PWNtcha. Да и никто не мешает спамеру подключать модули программ распознавания текста, тот же FineReader. Различают «сильную» (сильно размытая и не контрастная картинка) и «слабую» САРТСНА. Что же делать и как защититься от спамботов?
Методы защиты
Первое, что нужно сделать, чтобы прекратить автоматическую регистрацию ботов и массовый спам в темах – это закрыть возможность писать сообщение гостям, поставить картинку (капчу) на форму регистрации и установить активацию учетной записи по E-Mail. Рассмотрим подробнее…
1. Изменение картинки при регистрации на форумах phpBB2
В ходе эксплуатации форума быстро выясняется, что штатных методов для защиты не достаточно. Боты умеют регистрироваться, читать почту и, более того, спокойно распознают картинку, предоставляемую движком форума phpBB2. Если же изменить картинку на более сложную, то можно остановить подавляющее большинство автоматически регистрируемых ботов.
Для этого нужно проделать следующее. В папке <includes> форума изменить файл usercp_confirm.php:
. Удалить всю часть файла после строчки:
// output six seperate original pngs … first way is preferable!
или же строчки (в разных версия форума могут встречаться несколько отличные друг от друга комментарии)
// Thanks to DavidMJ for emulating zlib within the code
. и до конца файла. Вместо удаленной части вставить следующее:
// Изменение картинки в форме регистрации
// Автор мода: Arigato, 2006
list($usec, $sec) = explode(’ ‘, microtime());
mt_srand($sec * $usec);
$font = getcwd() . “/includes/font.ttf”;
$img = ImageCreate (320, 50);
$color = array();
$color[] = ImageColorAllocate ($img, 0, 0, 0);
$color[] = ImageColorAllocate ($img, 255, 0, 0);
$color[] = ImageColorAllocate ($img, 0, 255, 0);
$color[] = ImageColorAllocate ($img, 255, 255, 0);
$color[] = ImageColorAllocate ($img, 255, 0, 255);
$color[] = ImageColorAllocate ($img, 0, 255, 255);
$color[] = ImageColorAllocate ($img, 255, 255, 255);
$sx = ImageSX ($img) – 1;
$sy = ImageSY ($img) – 1;
$sc = count ($color) – 1;
// Фоновый шум:
for ($i = 0; $i < 1024; $i++)
{
$x = mt_rand (0, $sx);
$y = mt_rand (0, $sy);
$c = $color[mt_rand(1,$sc)];
ImageSetPixel ($img, $x, $y, $c);
}
// Вывод кода:
$xpos = mt_rand (8, 32);
$height = $sy – mt_rand (0, $sy / 4);
for ($i = 0; $i < strlen($code); $i++)
{
$angle = mt_rand (0, 30) – 15;
$size = mt_rand (0, + 32;
$ypos = $sy – mt_rand (8, $sy – $height – 8);
$c = $color[mt_rand(1,$sc)];
$rect = ImageTTFtext ($img, $size, $angle, $xpos, $ypos, $c, $font, $code[$i]);
$width = $rect[2] – $rect[0];
$height = $rect[1] – $rect[7];
$xpos += $width + mt_rand (4, 48);
}
// Передний шум:
for ($i = 0; $i < 256; $i++)
{
$x = mt_rand (0, $sx);
$y = mt_rand (0, $sy);
$c = $color[mt_rand(0,$sc)];
ImageSetPixel ($img, $x, $y, $c);
}
for ($i = 0; $i < mt_rand (2, 8); $i++)
{
$x1 = mt_rand (0, $sx);
$y1 = mt_rand (0, $sy);
$x2 = mt_rand (0, $sx);
$y2 = mt_rand (0, $sy);
$c = $color[mt_rand(0,$sc)];
ImageLine ($img, $x1, $y1, $x2, $y2, $c);
}
header (”Content-type: image/png”);
header (”Cache-control: no-cache, no-store”);
ImagePng ($img);
ImageDestroy ($img);
?>
Кроме этого нужно поместить в папку includes файл со шрифтом font.ttf, архив с которым можно скачать ниже. При желании можно использовать любой другой TrueType шрифт [1], содержащий латинские буквы и цифры. Как показал опыт применения данного метода на многих форумах, автоматическая регистрация ботов после такой модификации прекращается полностью (см. рисунок):
2. Разрешить отправлять личные сообщения только пользователям с 20 и более сообщениями
на форуме phpBB2 (защита от спама в личку). Да, сегодня уже и такой вид спама имеет место. Хотя он еще не получил большого распространения, о защите уже пора задуматься. Итак, что нужно делать…
Открыть файл privmsg.php и найти строчку:
if ( $mode == ‘newpm’ )
Добавить выше следующий код:
// НАЧАЛО: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
// Автор мода: Arigato, 2007
if ( $mode == ‘post’ || $mode == ‘reply’ || $mode == ‘quote’ )
{
$mod_mes_count = 20;
if ( $userdata[‘user_posts’] < $mod_mes_count )
{
message_die(GENERAL_MESSAGE, “<b>$userdata[username]</b>, у Вас на форуме <b>$userdata[user_posts]</b> сообщений<br />
Отправлять личные сообщения Вы сможете, когда наберете <b>$mod_mes_count</b> или более сообщений на форуме”);
}
}
// КОНЕЦ: отправка личных сообщений только для пользователей с 20 сообщениями на форуме
Переменная $mod_mes_count определяет количество сообщений на форуме, после которого пользователю разрешается отправлять ЛС. Читать ЛС может любой пользователь. Предупреждение о запрете отправки ЛС выводится по-русски, многоязычность не поддерживается.
Заключение
Мы уже выяснили, как убрать основную уязвимость – фиксированный шрифт и фиксированное положение символов. Но, как всегда добавим «ложку дегтя». Дело в том, что сегодня получили распространение сервисы по типу CaptchaExchange Server. Эти сервисы направлены на «обход» картинок САРТСНА, путем ручного «человеческого» распознавания символов. Принцип работы основан на системе баллов, которые пользователь может заработать, распознавая в свободное время картинки для других пользователей. Набранные баллы пользователь может потратить позже, в любое удобное время, запустив программу автоматического скачивания файлов с файлообменного сервера или для регистраций. К сожалению и второй, рассмотренный нами, метод не дает 100% гарантию, но основная цель будет достигнута – это снижение нагрузки на сервис и относительное спокойствие пользователей.
Ресурсы
. Вариант шрифта для замены на форуме
http://www.programmersforum.ru/attachment.php?attachmentid=5029&d=1217234938
или http://programmersclub.ru/pro/pro4.zip
Статья из четвертого выпуска журнала “ПРОграммист”.
Скачать этот номер можно по ссылке.
Ознакомиться со всеми номерами журнала.
Обсудить на форуме — Защита от спама в форумах phpBB2. САРТСНА
7th
Июн
IE и закрывающийся тег LI
Столкнулся со следующей проблемой
...
echo '<li id="'.$field.'">'.$title.'</li>';
echo <div>...</div>
...
так вот в 1 строке </li> не обрабатывается, т.е. див рисуется прямо в <li> а потом в конце автоматически создается </li>
И еще, если в реквесте в ИЕ есть переменные типа ¬_redirect то в ие почемуто заменяется $not на какой то спец символ.
Решение было найдено быстро.
Все, решено – косяк в том что IE не позволяет никаких структур в <UL> кроме <LI> ну или по крайней мере <DIV>
25th
Май
Разработка ресурса для журнала. Часть 1
С выходом третьего номера журнала [ПРОграммист] у него появился собственный сайт. Разработке этого ресурса и посвящен цикл статей.
Для начала оговорим, что мы решили разбить статью на две части, т.к это не поместиться в объеме одной статьи. Первая часть будет о написании ленты новостей, гостевой книги и вообще всего интерфейса пользователя, а вторая будет посвящена написанию панели администратора.
Первую часть будет вести Егор Горохов aka Revival1002, вторую — Алексей Шульга aka Levsha100, мы будем помогать друг другу в этом нелегком труде. Итак, начнем.
1. Дизайн
Для начала был нарисован PSD шаблон сайта в графическом редакторе Photoshop. Оттуда же мы потом и «выдирали» картинки для сайта. В результате у нас получилось это (см. рисунок 1):
Плюс такого дизайна в том, что можно оченьбыстро сделать редизайн. Для этого достаточносменить фоновую картинку и немного подкорректировать таблицы стилей CSS.
2. Верстка
Для создания закругленных углов использовалось свойство border-radius. К сожалению, пока что свойство работает не во всех браузерах, например в IE 6…8 оно игнорируется. Конечно существуют и альтернативные способы создания круглых углов, но они зачастую требуют до 9 (!) картинок блока (4 угла, 4 стороны и центр). Так как мы «очень ленивые», да и острые углы не очень портят дизайн, мы использовали простейшее решение, с надеждой на то, что вскоре все браузеры будут поддерживать данное свойство…
Для полупрозрачности главного div не было найдено (возможно мы плохо «гуглили») кроссбраузерного решения, поэтому мы пошли на хитрость, создав однопиксельный полупрозрачный png, и поставили его на фон. Но и этот способ, как оказалось имеет свои минусы. Например*, ненавистный всеми дизайнерами/верстальщиками IE6 его игнорирует.
* Комментарий автора.
Кстати, я уже давно не видел людей использующих IE6. Все мои знакомые, даже если они мало понимают в компьютерах (например девушки) используют браузеры типа Opera и Mozilla Firefox. Поэтому причин продолжать верстать под MSIE6 я уже не вижу.
Ознакомится с CSS можно по адресу:
http://procoder.info/style.css
3. Написание скриптов
Для начала, вынесем все наиболее часто используемые переменные в отдельный файл “config.php”, и потом будем его «инклудить» во все скрипты. Мы поместили туда логин\пароль от БД, путь к сайту и т.п. В дальнейшем, если мы захотим изменить что-либо, то это займет всего- лишь несколько секунд, и не потребуется вносить изменения во множество скриптов.
Итак, при заходе на сайт пользователь должен видеть: ленту новостей, журналы доступные для скачивания, гостевую книгу. Реализция происходит практически одинаково. Покажу на примере гостевой книги (см. листинг 1):
<?php require_once "config.php"; // Подключение файла конфигурации // Функция обрабатывает строку, и заменяет все bb-коды на html function bbcodes($str) { $bbcode = array( "/\[b\](.*?)\[\/b\]/is" =] "<strong>$1</strong>", "/\[u\](.*?)\[\/u\]/is" =] "<u>$1</u>", "/\[url\=(.*?)\](.*?)\[\/url\]/is" =] "<a href='$1'>$2</a>", "/\[color\=(.*?)\](.*?)\[\/color\]/is" =] "<font color='$1'>$2</font>", "/\[i\](.*?)\[\/i\]/is" =] "<i>$1</i>]", "/\[quote\](.*?)\[\/quote\]/is" =] "<div class=\"quote\">$1</div>", "/\[img\](.*?)\[\/img\]/is" =] "<img src=\"$1\">" ); $str = preg_replace(array_keys($bbcode), array_values($bbcode), $str); return $str; } // Функция взята из мануалов по PHP // Подключение к БД $db = mysql_connect($db_server, $db_user, $db_pass); mysql_select_db($db_name); // Выбираем из таблицы table_gb последние 30 записей и сортируем их по id $db_query=mysql_query("SELECT * FROM `table_gb` ORDER BY `id` DESC LIMIT 0 , 30", $db); while ($res = mysql_fetch_array($db_query)) // Вывод записей { echo "<div class=\"guest_comment\"><b>".$res['name']."- ".$res['date']."</b><br>"; echo bbcodes(wordwrap("<pre>".$res['text']."</pre>", 75)); echo "</div><br>"; } ?> // Тут находится форма, для добавления записей в БД, которая передает скрипту gb.php данные
А теперь скрипт добавляющий записи в БД (см.листинг 2):
<?php require_once "config.php"; $db = mysql_connect($db_server, $db_user, $db_pass); mysql_select_db($db_name); // Получаем данные и убираем из них спец-символы, // для защиты от XSS-атак $name = htmlspecialchars($_POST['name']); $text = htmlspecialchars($_POST['text']); $date_array = getdate(time()); $date = $date_array['mday'].".".$date_array['mon'].".".$date_array['year']; if (($text=='') or ($text=='Введите текст')) { echo "<script>alert('Запись не добавлена.');</script>"; echo '<meta http-equiv="Refresh" content="0; URL='."$index_path".'">'; } else { if (($name=='Ваше имя') or ($name=='')) {$name='Аноним';} // Добавляем запись в БД $db_query = mysql_query("INSERT INTO `table_db` ( `id` , `name` , `text` , `date` ) VALUES ('', '$name', '$text', '$date');", $db); mysql_close($db); echo "<script]alert('Запись добавлена');</script>"; echo '<meta http-equiv="Refresh" content="0; URL='."$index_path".'">'; } ?>
Аналогичным образом выводятся записи для новостей, журналов для закачки и другая информация (см. рисунок 2):
Подведем предварительные итоги…
Что есть и что планируется? Пока сделано очень мало, и нововведения** будут появляться практически каждый день. Совсем скоро будет система регистрации, что позволит комментировать статьи, новости и выставлять им оценки. У каждого пользователя будет личный кабинет. Создавать отдельный форум для сайта не планируется, так как это совместный проект Клуба ПРОграммистов www.programmersclub.ru и форум уже есть. Существующие алгоритмы тоже будут улучшены. Все предложения оставляйте либо на форуме, либо отправляйте на электронный ящик редакции.
Это статья из третьего номера журнала “ПРОграммист”.
Скачать его можно по ссылке.
Ознакомиться со всеми номерами журнала.
Обсудить на форуме — Разработка ресурса для журнала. Часть 1
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)