7 декабря 2012
37757
загрузка картинки на сервер

Загрузка картинки на сервер PHP

PHP
Демонстрация » Скачать »

Загрузка фотографий, картинок на сайт является актуальным решением для каждого проекта. Существует множество разновидностей скриптов, который каждый по своему имеет функциональную способность по организации обращений между выводом и загрузкой картинок на сервер. Кстати, имеется еще очень интересная drag drop загрузка, реализация которой проходит методом перемещения объекта в область для загрузки файлов.

 

Мне частенько приходилось сталкиваться с подобным вопросом и хотелось бы поделиться своим мнением, а так же скриптом, который возможно сможет пригодиться и Вам. Для начала я бы хотел ознакомить Вас с содержимым данного скрипта, который написан исключительно только на php и имеет работу с базой данных mysql. По своему желанию, Вы конечно можете и переделать его под другую базу данных, допустим под oracle.

Функциональность скрипта, можно будет изменить и немного по другому, допустим добавлять не одну, а загружать две картинки на сервер, добавить возможности удаления, редактирования, перемещения, обрезки и множества других полезных инструментов онлайн-изменения.

 

В общем, все зависит от Вашего личного желания, изменить скрипт под свои потребности, в зависимости от реализации его в применении. Теперь непосредственно перейдем к самому коду.

 

Подключаемся сначала к базе данных.

 

Файл bd.php

 

<?
$db = mysql_connect ("localhost", "Логин", "Пароль");
mysql_select_db ("База данных", $db);
if (!$db) echo mysql_error();
?>

 

Выводим структуру таблицы 3_images

 

--
-- Структура таблицы `3_images`
--

CREATE TABLE IF NOT EXISTS `3_images` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `img` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;

 

 

Файл index.php

 

Данный код позволяет перейти на форму добавления картинки, а также вывести полный список миниатюр картинок.

 

<?php
echo"<a href='add_images_form.php' class='add_images'>
<div class='add_images_text'>ДОБАВИТЬ КАРТИНКУ</div>
</a><br><br>";
include ("bd.php"); //подключение к базе данных

$sql = mysql_query("SELECT id, img FROM 3_images"); 
// Выбор из базы данных полей id и img

if (!$sql)
{
exit();
}
if (mysql_num_rows($sql) > 0)
{

@$row=mysql_fetch_array($sql);

$i=1;

do
{
echo "<table><tr><td valign='top'>";
echo $i++;
echo "<td>";
echo "<img src='img/$row[img]' class='img'/>";
echo "</td></tr></table><br>";
}
while (@$row = mysql_fetch_array($sql));
}
else
{
echo "<label class='label'>В базе данных нет 
добавленных картинок!</label>";
exit();
}
?>

 

Файл add_images_form.php

 

Форма загрузки картинки с именем и идентификатором name='myfile'

 

<form name='form' enctype='multipart/form-data' 
method='post' action='add_images.php'>
<p>
<label class='label'>Выберите картинку</label>
<br>
<input type='file' name='myfile' id='myfile' 
class='input'/>
</p>
<br>
<p>
<table>
<tr>
<td>
<input type='image' 
src='images/add_images_save.png' 
title='Сохранить'> /
</td>
<td>
<a href='index.php' class='add_images'>
<div class='add_images_text'>НАЗАД</div></a>
</td>
</tr>
</table>
</p>
</form>

 

Файл add_images.php

Обработчик загрузки картинок на сервер. В коде указывается максимальная ширина миниатюр, директория для загрузки картинок, а также заносится в базу данных директория данной загруженной картинки. Так же существует такие параметры, которые могут участвовать для выведения информации о загруженных картинках:

 

$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];

 

Полностью весь код файла add_images.php:

 

<?php

include ("bd.php"); //подключение к базе данных

if (isset($_POST['img']))

// Если поле выбора картинки не пустое - 
закачиваем её на сервер
$maxwidth = "600"; // максимальная ширина 
картинок на превью
$foto_dir = "img/"; // Директория для фотографий 
товаров
$foto_name = $fotos_dir.time()."_".basename
($_FILES['myfile']['name']); // Полное имя 
файла вместе с путем
$foto_light_name = time()."_".basename
($_FILES['myfile']['name']); 
// Имя файла исключая путь
$foto_tag = "<img src=\"$foto_name\" 
border=\"0\">"; // Готовый тэг для вставки 
картинки на страницу
$foto_tag_preview = "<img src=\"$foto_name\" 
border=\"0\" width=\"$maxwidth\">"; 
// Тот же тэг, но для превью

// Текст ошибок
$error_by_mysql = "<label class=\"label\">
Ошибка при добавлении данных в базу</span>";
$error_by_file = "<label class=\"label\">Невозможно 
загрузить файл в директорию. Возможно её не 
существует</span>";


// Начало
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];

// Если ошибок не было
if($error_flag == 0)
{
$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = getcwd()."/img/" . time()."_".basename
($_FILES["myfile"]["name"]);
if ($_FILES['myfile']['tmp_name'])
{

//Если не удалось загрузить файл

if (!move_uploaded_file($_FILES['myfile']
['tmp_name'], $upfile))
{
echo "$error_by_file";
exit;
}

}
else
{
echo 'Проблема: возможна атака через загрузку файла. ';
echo $_FILES['myfile']['name'];
exit;
}

$q = "INSERT INTO 3_images (img) VALUES 
('$foto_name')";
$query = mysql_query($q);

// Данные успешно внесены в базу данных, 
выводим сообщение
if ($query == 'true') {
echo "
<div class='text'>
<p>Картинка успешно добавлена на сервер!</p>
<br><br>
<table>
<tr>
<td>
<a href='add_images_form.php' 
class='add_images'><div class='add_images_text'>
ДОБАВИТЬ ЕЩЕ КАРТИНКУ</div></a>
</td>
<td>
<a href='index.php' class='add_images'>
<div class='add_images_text'>НА ГЛАВНУЮ</div></a>
</td>
</tr>
</table>
</div>
";
}

// В противном случае, выводим ошибку при 
добавлении в базу данных
else {
echo "$error_by_mysql";
}
}
elseif ($myfile_size == 0) {
echo "<br><label class='label'>
Картинка не выбрана!<br><br>
Вернитесь и выберите картинку!</label><br><br>
<a href='add_images_form.php' class='add_images'>
<div class='add_images_text'>ВЫБРАТЬ КАРТИНКУ</div>
</a>";
}
}
?>

 

Файл style.php

 

Кроме файла bd.php, везде подключаем файл стилей.

 

<link rel="stylesheet" type="text/css" href="style.css"/>

 

Немного css:

 

a.add_images {
background: url(images/add_images_link.png); 
/* Путь к файлу с исходным рисунком  */
display: block; /*  Рисунок как блочный элемент */
width: 250px; /* Ширина рисунка */
height: 50px; /*  Высота рисунка */
text-decoration: none;
}
a.add_images:hover {
background: url(images/add_images_hover.png);
/* Путь к файлу с заменяемым рисунком  */
}

.add_images_text
{
color: red;
font-weight: bold;
font-size: 14px;
padding-left: 30px;
padding-top: 15px;
}

.input
{
border: 1px solid red;
}

.label
{
color: red;
}

.img
{
width: 150px;
}

 

Итог:

 

Подводя итог, могу сказать, что данный скрипт прост в понимании и легко настраиваемый под потребности любой загрузки на сервер, можно применить как для загрузки картинок, так и прайс-листов, либо чего-нибудь другого, допустим файлов doc или excel.

 

Благодарю Вас за внимание, всем удачи в реализации!