О web-разработке
и даже немного больше...

Как показать изображение через скрипт?

Рассмотрим ситуацию, когда необходимо организовать отдачу изображений с сервера пользователю скажем «интеллектуально», об этом подробнее. Так сложилось, что привычным образом файлы изображений мы храним на сервере, в какой либо публичной директории, а на самих веб-страницах мы передаем изображения по прямым ссылкам. Т.е. мы берем ссылку на изображение, вбиваем её в браузер, получаем изображение по прямой ссылке.
Проблема в том, что для некоторых проектов не допустимо, к примеру, получения доступа к изображениям не авторизованным пользователям, либо нет возможности разграничить права доступа к файлу по ссылке. Так же не редки случаи, когда в зависимости от запроса необходимо выполнить какие-либо манипуляции с файлом или базой данных на сервере, либо как-то ещё, придерживаясь требуемых задач по проекту.
Допустим, если я авторизовался на сайте, у меня есть какая-либо ссылка, по открытию которой я получаю файл изображения — ссылка работает, я делаю выход из системы авторизации — то ссылка не работает соответственно.
Благодаря возможности использования скриптов в качестве обработчиков запроса мы можем гибко манипулировать данными, отдаваемые пользователю. Как известно протокол HTTP для своего должного функционирования обмена данными использует заголовки запросов и ответов. В этих заголовках так же наряду с другими параметрами передаются данные о типе данных передаваемые браузеру. Посылая необходимые заголовки ответа, мы можем из скрипта вернуть данные в удобоваримом формате.
Теперь о самой логике. Непосредственно сами файлы после загрузки на сервер мы можем хранить в отдельной закрытой директории, либо в базе данных в бинарном виде. Отдавать файлы можно посредством скрипта, в своем роде это напоминает концепцию единой точки входа, передавая ему параметр, указывающий на конкретный файл. В этом файле скрипте можно сделать всё что угодно, как говорилось ранее, проверить авторизацию пользователя, записать информацию о запросе, сделать временной интервал, в течении которого можно получать конкретный файл, и т.д.
Пример. Предположим, у нас есть файл обычный файл – изображения, который лежит на сервере, путь к нему таков:
./images/my_image.jpeg

Доступ к директории /images для браузеров закрывается соответственно, сделать это можно привычно через .htaccess. Получать изображения мы будем через скрипт, прозовем его getimage.php.

<?php
# Обязательный параметр id, ключ файла
if (!isset($_GET['id'])) die;

# Здесь можно разместить код
# для проверки и авторизации т.д.

# Данные файла (на практике можно хранить в базе)
$arFiles = array(
	'my_file' => array(
		'path' => './images/my_image.jpeg',
		'type' => 'image/jpeg'
	);
);

# Проверяем наличие нужного ключа в массиве
if (array_key_exists($_GET['id'],$arFiles)){

	# отдаем файл
	header("Content-type: ".$arFiles[$_GET['id']]['type']);
	readfile($arFiles[$_GET['id']]['path']);

} else { # файла нет
	header("HTTP/1.0 404 Not Found");
	die;
}
?>

Запрос файла мы можем произвести в браузере таким образом:
getimage.php?id=my_file

Произойдет следующее, в массиве $arFiles будет произведен поиск элемента с ключем my_file, в случае успеха в качестве ответа посылается изображение, в противном случае последует заголовок 404 Not Found.

Опубликован: 24.08.2014 г.

См. также:

Редакторы кода для PHP
Как просмотреть время загрузки страницы в PHP?
Генерация QR-кода в PHP
Загрузка файлов на сервер посредством Ajax
Импорт записей из Excel в WordPress
Парсинг XML в PHP
Установка IonCube на XAMPP
Создание PDF файлов в PHP

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта