Я хотел бы поделиться методом генерации изображений-инвайтов почти без бд.
К этому изобретению меня натолкнула эта статья и моя любовь к БД.
index.php — веб-морда, здесь — форма.
<? header('Content-Type: text/html; charset=utf-8'); ?> <fieldset> <legend>Get key</legend> TEXT: <input type="text" id="inp" size="50" onkeyup="document.getElementById('img').src='image.php?in='+this.value"> <br> <br> IMG: <img src="image.php?in=" id="img" onclick="window.open(this.src)" width="200" height="200"> <br> Клікни по картинці шоб скачати її. </fieldset> <fieldset> <legend>Test key</legend> <form method="post" enctype="multipart/form-data" action="test.php"> TEXT: <input type="text" name="KOD" value="<?php if(isset($_POST['KOD'])){echo $_POST['KOD'];} ?>" size="50"> <br> FILE: <input type="hidden" name="UserID" value="<?php $ip = $_SERVER['REMOTE_ADDR']; $ua = $_SERVER['HTTP_USER_AGENT']; $d = getdate(); $UserID = sha1($ip.$ua.$d["mday"].'Secret'); $UserID = base64_encode($UserID); $UserID = rtrim($UserID,"="); echo $UserID; ?>"> <input type="file" name="uploadfile"> <br> <button type="submit">SUBMIT</button> </form> </fieldset>
UserID — идентификатор, чтобы если одновременно кто будет загружать изображения — чтобы не переплутились.
image.php — генерация изображения.
<? include('generator.php');//Подключаем генератор header('Content-Disposition: attachment; filename="image.png"');//Чтобы изображене скачивалось сразу header ("Content-type: image/png");//Тип изображения imagepng(gen($_GET['in']));//Отдаем изображение ?>
test.php — тестирование изображений.
<?php error_reporting(0); include('generator.php'); $UserID = rtrim(base64_encode(sha1($_POST['UserID'])), '=');//Модифицируем ID чтобы было не так просто if (copy($_FILES['uploadfile']['tmp_name'], './files/image1_'.$UserID.'.png')){//Тестируем файл imagepng(gen($_POST['KOD']), './files/image2_'.$UserID.'.png'); if (file_get_contents('./files/image2_'.$UserID.'.png') == file_get_contents('./files/image1_'.$UserID.'.png')){echo 'True';}else{echo 'False';} }else{//или выводим ошыбку. echo "ERROR ".$_FILES['uploadfile']['error']; } ?>
generator.php — самое интересное — функция генератора изображений.
<?php function gen($input, $secret='0JAg0YLRiyDQu9GO0LHQvtC30L3QsNGC0LXQu9GM0L3Ri9C5KSDQlNCw0Lkg0LzQvdC1INC40L3QstCw0LnRgiDQvdCwINGF0LDQsdGALCDQsD8p'){//Здесь секретный ключ. $hesh=sha1($input.$secret).sha1($input.sha1($input.$secret).$secret).sha1($input.sha1($input.$secret).sha1($input.sha1($input.$secret).$secret).$secret); //Генерируем строку $numbers = $hesh; //Тепер генерируем цыфры for($i=0;$i<count(['a', 'b', 'c', 'd', 'e', 'f']);$i++){ $numbers = str_replace(['a', 'b', 'c', 'd', 'e', 'f', '0'][$i], ['2', '3', '4', '5', '6', '7', '8'][$i], $numbers);//Заменяем буквы на цыфры } $im = imagecreatetruecolor(200, 200);//Делаем картинку $color = imagecolorallocate($im, $numbers[0]*28, $numbers[1]*28, $numbers[2]*28); imagefilledrectangle($im, 0, 0, 200, 200, $color);xn--%20-5cdzk3ajhfdhe2f7h for($i=0; $i < round((strlen($numbers)/4), 0); $i++) { $k = round((strlen($numbers)/10), 0);//Коефициент увеличения. Опредилил методом перебора $x = $numbers[$i*4]*$k;//X $y = $numbers[$i*4+1]*$k;//Y $w = 5 + $numbers[$i*4+2]*$k;//Ширина $h = 5 + $numbers[$i*4+3]*$k;//Высота $color = imagecolorallocatealpha($im, $numbers[$i*4+1]*40, $numbers[$i*4+2]*40, $numbers[$i*4+3]*40, 70);//Цвет фигуры imagefilledrectangle($im, $x, $y, $x+$w, $y+$h, $color);//Рисуем прямоугольник } return $im;//Отдаем картинку imagedestroy($im); }
Ну, вот и все. База данных почти не нужна. Единственное, для чего может потребоваться — для сохранения входной строки генератора. Но можно как-то обойтись и без базы). Инвайт для слова «ИНВАЙТ» и «ХАБР».
Демо: http://app.blastorq.pp.ua/ImgInvite/
GitHub: https://github.com/da411d/ImgInviteGenerator
ссылка на оригинал статьи http://habrahabr.ru/post/275117/
Добавить комментарий