Как стать автором
Обновить

Как создать свой хостинг изображений

В этой статье я расскажу как создать свой собственный хостинг изображений на всеми любимом PHP.
Для начала необходимо разработать схему:
  1. Посетитель сайта заходит на ресурс
  2. Загружает свое изображение
  3. Уже на сервере изображение уменьшается и создается превью.
  4. Посетитель получает ссылку на страницу на которой сможет просмотреть увеличенное изображение.


Разработка Самого движка


Картинки будут храниться прямо на сайте в виде файлов.
Сам движок (если этот код можно так назвать) будет состоять из трех файлов:
  • index.php — скрипт для просмотра изображений, так же содержит форму для их публикации
  • upload.php — Скрипт для публикации изображений. Будет их загружать, так же будет создавать привью
  • template.php — шаблон сайта. В нашем примере он очень утрирован, так как создается лишь для примера.


Для начала создадим Файл-Шаблон (Весьма утрированный):
<html>
<head>
<title>Hosting Image</title>
</head>
<body>
<h1>Image Hosting</h1>
<hr>
<? echo $content ?>
<hr>
<b>Специально для Хабры</b>
</body>
</html>

Затем создадим скрипт загрузки изображений upload.php, код раскомментирован что бы было понятней:
 <?php

$uploaddir = 'uploadimages/'; // это папка, в которую будет загружаться картинка
$blacklist = array(".php", ".phtml", ".php3", ".php4");     //Здесь код на проверку расширения
 foreach ($blacklist as $item) {
  if(preg_match("/$item\$/i", $_FILES['userfile']['name'])) {
   $a=false;
   exit;
   };}; 
   
if (file_exists('counter.txt')) {$counter=file_get_contents('counter.txt');  // Грузим счетчик изображений
$counter++; }; //Увеличиваем значение на 1

$f_counter=fopen('counter.txt', "w");
fwrite($f_counter,$counter);  //Записываем полученное значение
fclose($f_counter);
$apend=$counter.'.jpg'; // это имя, которое будет присвоенно изображению	

$uploadfile = "$uploaddir$apend"; // в переменную $uploadfile будет входить папка и имя изображения
if($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size']<=1024000) { // Здесь мы проверяем размер если он более 1 МБ
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { // Здесь идет процесс загрузки изображения
$size = getimagesize($uploadfile); // с помощью этой функции мы можем получить размер пикселей изображения
if ($size[0] < 601 && $size[1]<5001) { // если размер изображения не более 600 пикселей по ширине и не более 5000 по высоте
echo '<meta http-equiv="refresh" content="0"; url=./?id='.$counter.'">';//Редерикт на страницу с изображением
//Cоздание Превью
if (!isset($q)) $q = 100;
$f=$uploaddir.$apend; //Имя файла из которого создается превью
$src = imagecreatefromjpeg($f); 
$w_src = imagesx($src); 
$h_src = imagesy($src);
$h = 128; // пропорциональная шириной 128 
//Вычисление попорций
$ratio = $h_src/$h; 
$w_dest = round($w_src/$ratio); 
$h_dest = round($h_src/$ratio); 
$dest = imagecreatetruecolor($w_dest,$h_dest); 
       $img_mini = 'uploadimages/'.$counter.'_2.jpg'; 
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src); 
imageJpeg($dest, $img_mini);

//Конец создания превью

}else {echo "Размер пикселей превышает допустимые нормы (ширина не более - 600 пикселей, высота не более 5000)";
unlink($uploadfile); // удаление файла
}
} else {echo "Файл не загружен, верьнитель и попробуйте еще раз";}
}else { echo "Размер файла не должен превышать 1000Кб";}


?>

Ну и на конец последний файл — index.php
<?
if ($_GET['id']>0)
{
//Отображение изображений
$img_url1='uploadimages/'.$_GET['id'].'.jpg'; //URL 1-го 
$img_url2='uploadimages/'.$_GET['id'].'_2.jpg'; //URL  2-го
$content='<center>
<h2>Просмотр Изображения</h2>
<img src="'.$img_url1.'"><br>Cсылка на изображение: <input value="'.$img_url2.'"><br><br>	
<img src="'.$img_url2.'"><br>Cсылка на изображение: <input value="'.$img_url2.'"><br><br>	
</center>';

}else
	{
	$content='<form action="upload.php" method="post" ENCTYPE="multipart/form-data">
	<input name="userfile" type="file" >
	<input type="submit">
	';	//Вывод формы
	};

include('template.php'); //Загружаем шаблон
?>


Вот и весь скрипт.
Посмотреть его работу можно здесь
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.