<?php
/*
*хранение изображений в базе данных
*взято из книги "Головоломки на PHP для хакера"
*автор:
http://softtime.ru
*25.08.07
*
//структура таблицы
CREATE TABLE image (
id_image int(11) NOT NULL auto_increment,
name tinytext NOT NULL,
content longblob NOT NULL,
PRIMARY KEY (id_image)
) TYPE=MyISAM;
*/
?>
<form enctype='multipart/form-data' method=post>
<input type="file" name="image"><br>
<input type=submit value='Загрузить'>
</form>
<?php
// Число изображений на странице
$pnumber = 3;
// Устанавливаем соединение с базой данных
// Сетевой адрес MySQL-сервера
$dblocation = "localhost";
// Имя базы данных
$dbname = "book";
// Пользователь
$dbuser = "root";
// Его пароль
$dbpasswd = "";
// Устанавливаем соединение с базой данных
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) exit ("К сожалению, не доступен сервер MySQL : ".mysql_error());
// Выбираем базу данных
if (!@mysql_select_db($dbname,$dbcnx)) exit("К сожалению, не доступна база данных : ".mysql_error());
// Обработчик HTML-формы
if(!empty($_FILES))
{
// Проверяем является ли переданный файл картинкой
if(substr($_FILES['image']['type'],0,5) == 'image')
{
// Читаем содержимое файла
$content = file_get_contents($_FILES['image']['tmp_name']);
// Уничтожаем файл во временной директории
unlink($_FILES['image']['tmp_name']);
// Экранируем спец-символы в бинарном содержимом файла
$content = mysql_real_escape_string($content);
// Формируем запрос на добавление файла в таблицу
$query = "INSERT INTO image VALUES(NULL, '".$_FILES['image']['name']."', '$content')";
if(mysql_query($query))
{
// Осуществляем автоматическую перезагрузку страницы
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit(mysql_error());
}
}
?>
Для вывода файла можно воспользоваться таким скриптом:
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Провряем передан ли параметр id_image
// и является ли он целым числом, чтобы
// предотвратить SQL-инъекцию
if(!preg_match("|^[\d]+$|",$_GET['id_image']))
{
exit("Недопустимый формат URL-запроса");
}
// Извлекаем файл из базы данных
$query = "SELECT * FROM image
WHERE id_image = $_GET[id_image]";
$img = mysql_query($query);
if(!$img) exit(mysql_error());
$image = mysql_fetch_array($img);
// Отсылаем заголовки на загрузку файла
header("Content-type: image/*");
// Отправляем файл пользователю
echo $image['content'];
?>