Я хотел бы поделиться методом генерации изображений-инвайтов почти без бд.
К этому изобретению меня натолкнула эта статья и моя любовь к БД.
Итак, давайте сразу к коду!
index.php — веб-морда, здесь — форма.
UserID — идентификатор, чтобы если одновременно кто будет загружать изображения — чтобы не переплутились.
image.php — генерация изображения.
test.php — тестирование изображений.
generator.php — самое интересное — функция генератора изображений.
Ну, вот и все. База данных почти не нужна. Единственное, для чего может потребоваться — для сохранения входной строки генератора. Но можно как-то обойтись и без базы). Инвайт для слова «ИНВАЙТ» и «ХАБР».
Демо: http://app.blastorq.pp.ua/ImgInvite/
GitHub: https://github.com/da411d/ImgInviteGenerator
К этому изобретению меня натолкнула эта статья и моя любовь к БД.
Итак, давайте сразу к коду!
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