В этом уроке мы научимся загружать изображение в базу данных MySql с использованием PHP. Хотя идея звучит сложной, но является достаточно простой в реализации и имеет множество практических применений. Изображение можно вызвать с базы данных с помощью всего одного PHP запроса. У вас, наверное, уже созрел вопрос – «Как изображения вставляются в базу данных?». Сейчас мы будем в этом разбираться.
Ну что начнем изучать!
Создаем три PHP файла:
-readdir.php – записываем изображение в базу данных
- image.php – сценарий отображения изображения
- view.php — пример файла, который покажет вам, как называются изображения
Создаем базу данных для изображений
Во-первых, для начала нам нужно создать базу данных, куда будут записываться изображения, назовем ее base64imgdb.
Во-вторых, создать таблицу с двумя строками:
CREATE TABLE `images` ( `imgid` INT NOT NULL AUTO_INCREMENT , `sixfourdata` LONGTEXT NOT NULL , PRIMARY KEY ( `imgid` ) );
Создание READDIR.PHP
Для начала работы, нам нужно создать соединение с базой данных:
<?php $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); ?>
Далее нам нужно открыть каталог, где ". /" — это каталог где находится файл readdir.php:
$path = "./"; $dir_handle = opendir($path) or die("Unable to open directory $path");
Это самая трудная часть сценария: сортировка типов изображений, чтение данных с использованием fopen, превращая его в использование base64_encode, а затем вставить его в таблицу.
<?php while ($file = readdir($dir_handle)) { $filetyp = substr($file, -3); if ($filetyp == ‘gif’ OR $filetyp == ‘jpg’) { $handle = fopen($path . "/" . $file,’r’); $file_content = fread($handle,filesize($path . "/" . $file)); fclose($handle); $encoded = chunk_split(base64_encode($file_content)); $sql = "INSERT INTO images SET sixfourdata=’$encoded’"; mysql_query($sql); } } ?>
Это последняя и окончательная часть readdir.php: закрытие каталога и завершение процесса:
<?php closedir($dir_handle); echo("complete"); mysql_close($dbcnx); ?>
Создание image.php
Этот файл принимает запросы, декодирует данные и представляет себя в качестве изображения. Во-первых, мы должны подключиться к базе данных еще раз:
<?php $dbcnx=mysql_connect("localhost","username","password"); mysql_select_db("base64imgdb"); ?>
Теперь мы создадим строки, которые осуществляют запрос типа image.php?img=x
<?php $img = $_REQUEST["img"]; ?>
После этого, нам необходимо подключиться к таблице в базе данных, получить данные, и установить их в переменные:
<?php $result = mysql_query("SELECT * FROM images WHERE imgid=" . $img .""); if (!$result) { echo("<b>Не удалось подключиться к базе данных: " . mysql_error() . "</b>"); exit(); } while ($row = mysql_fetch_array($result)) { $imgid = $row["imgid"]; $encodeddata = $row["sixfourdata"]; } ?>
Это наиболее запутанная часть файла:
<?php mysql_close($dbcnx); echo base64_decode($encodeddata); ?>
Ну и наконец, вывод изображения.
<img src=’image.php?img=1′ border="0" alt="">
Файлы которые мы использовали для создания скрипта.!
readdir.php:
<?php $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); $path = "./"; $dir_handle = opendir($path) or die("Unable to open directory $path"); while ($file = readdir($dir_handle)) { $filetyp = substr($file, -3); if ($filetyp == ‘gif’ OR $filetyp == ‘jpg’) { $handle = fopen($file,’r’); $file_content = fread($handle,filesize($file)); fclose($handle); $encoded = chunk_split(base64_encode($file_content)); $sql = "INSERT INTO images SET sixfourdata=’$encoded’"; mysql_query($sql); } } closedir($dir_handle); echo("complete"); mysql_close($dbcnx); ?>
image.php
<?php $dbcnx = mysql_connect("localhost", "username", "password"); mysql_select_db("base64imgdb"); $img = $_REQUEST["img"]; $result = mysql_query("SELECT * FROM images WHERE imgid=" . $img . ""); if (!$result) { echo("<b> Не удалось подключиться к базе данных: " . mysql_error() . "</b>"); exit(); } while ($row = mysql_fetch_array($result) ) { $imgid = $row["imgid"]; $encodeddata = $row["sixfourdata"]; } mysql_close($dbcnx); echo base64_decode($encodeddata); ?>
И view.php
<html> <body> … <img src=’image.php?img=1′ border="0" alt=""> … </body> </html>
Вот и все!