В этой статье я расскажу как создать свой собственный хостинг изображений на всеми любимом PHP.
Для начала необходимо разработать схему:
Картинки будут храниться прямо на сайте в виде файлов.
Сам движок (если этот код можно так назвать) будет состоять из трех файлов:
Для начала создадим Файл-Шаблон (Весьма утрированный):
Затем создадим скрипт загрузки изображений upload.php, код раскомментирован что бы было понятней:
Ну и на конец последний файл — index.php
Вот и весь скрипт.
Посмотреть его работу можно здесь
Для начала необходимо разработать схему:
- Посетитель сайта заходит на ресурс
- Загружает свое изображение
- Уже на сервере изображение уменьшается и создается превью.
- Посетитель получает ссылку на страницу на которой сможет просмотреть увеличенное изображение.
Разработка Самого движка
Картинки будут храниться прямо на сайте в виде файлов.
Сам движок (если этот код можно так назвать) будет состоять из трех файлов:
- 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'); //Загружаем шаблон
?>
Вот и весь скрипт.
Посмотреть его работу можно здесь