@Talany

Вывести картинку через php, возможно?

Доброго времени суток!
Первый раз сталкиваюсь на практике, и еще не знаю толкового решения.
Есть папка IMG в которой картинки которые должны отображаться только в web через php, и папка закрыта htaccess deny from all
Как правильно отображать данные картинки? Через htaccess разрешить ip сервака или средствами php както подлезть? Можно еще через бд, но это дурной путь на мой взляд.
Заранее благодарю!
  • Вопрос задан
  • 326 просмотров
Решения вопроса 2
Compolomus
@Compolomus
Комполом-быдлокодер
Пишите парсер папки и по имени отдавайте картинку

Пример
$img = $_GET['img'];
// Тут проверки и прочее
$image = imagecreatefromstring('/dir/' . $img);
// Тут можно наложить водяной знак или уменьшить, превью типо
header('Content-Type: image/png');

imagepng($image);


Создайте скрипт с этим содержимым и отдавайте ссылкой
/script.php?img=123.png
/script.php?img=456.jpg
Это чисто пример без проверок и прочего, можете ещё всего там добавить по желанию
Ответ написан
Ninazu
@Ninazu
Мне кажется задача изначально неправильная. Но если костыль нужен, то так

Создаём файл который будет принимать адресс картинки, брать ее с диска, и отдавать с соответсующими заголовками

<?php
// ... формируем путь к картинке $fileLocation

//Расширение картинки тоже узнать нужно будет, если оно может быть разным
header("Content-Type: image/png");
//Неплохо добавить заголовок с кэшем, чтоб браузер не тянул этот ужас еще раз
header("Cache-Control: max-age=86400"); 
header("Pragma: cache"); 
header("Expires: ". date(DATE_RFC2822, time() + 86400)); 

$fileHeader = fopen($fileLocation, 'r', false);
$response = "";  //тут можно отдать картинку заглушку, если картинка не найдена по запросу.

if ($fileHeader) {
	$response = stream_get_contents($fileHeader);
	fclose($fileHeader);
}

exit($response);


P.S. Не забыв, что до заголовков не должно быть никакого вывода, а то они не сработают
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Maksimoff
скрипты имеют доступ и к закрытой директории, так что айпишник разрешать не надо. а выводить через заголовок, как уже написали
header("Content-Type: image/png"); // mime-type пикчи в заголовке
// можно добавить другие заголовки, если необходимо 
readfile($image); // $image - строка с путем к файлу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы