Отображение изображения в php из файла в каталоге - PullRequest
0 голосов
/ 26 октября 2010

У меня есть несколько изображений в каталоге, который находится за пределами общедоступной части сервера (за пределами каталога public_html). Я хочу иметь возможность прочитать содержимое изображения с помощью файла php, а затем вывести результат в HTML.

Например, у меня есть php-файл с именем getimg.php со следующим исходным кодом:

header('Content-type: image/jpeg');

$dir = '/home/server/images/';
$file_name = addslashes($_GET['file']);

readfile('' . $dir . '' . $file_name . '.jpg');

getimg.php читает содержимое изображения jpg в каталоге images, а затем ссылается с помощью следующего кода, когда я хочу показать изображение пользователю:

<img src="getimg.php?file=name_of_image_file">

Файл getimg.php также выполняет некоторые проверки для проверки того, что пользователь вошел в систему, действительно владеет изображением, которое он пытается просмотреть, и т. Д. (Это не показано выше для простоты). Этот подход предназначен для контроля доступа к файлам изображений. Однако дело не в этом.

Вот проблема: описанный выше подход / код работает только в браузере Chrome. Изображения не отображаются должным образом в IE, FF, Safari или Opera. Есть идеи, почему это не работает или как это сделать правильно?

Примечания:

  • Я пытаюсь избежать использования MySQL для хранить изображения из-за большого количество изображений. Возможность использовать файловую систему здесь намного предпочтительнее.

  • Решение должно быть кросс-браузерным удобно.

  • На самом деле изображение может быть JPG, PNG или GIF-файл. Во имя простота, приведенный выше код только обрабатывает изображения jpg.

  • Я сомневаюсь, что это уместно, но Я НЕ используя jQuery. И нет, я не буду изменить весь мой сайт, чтобы использовать jQuery. Любые посты "use jQuery" будут автоматически получать downvote . Я не ненавижу jquery ... это просто не правильное решение для моего сайта.

UPDATE

Проблема была не в самом коде. У меня в файле php.ini установлено автоматическое включение сценария проверки входа. Поскольку я не вошел во все мои браузеры, изображение не отображалось. Глупая ошибка, но понятная и исправленная. Код выше должен работать просто отлично. Также было обновлено использование readfile () вместо file_get_contents (). Я собираюсь оставить этот пост для любого, кто просматривает Интернет, ища способ контролировать, кто имеет доступ к изображению, используя php.

Ответы [ 3 ]

2 голосов
/ 26 октября 2010

Используйте функцию readfile.

http://php.net/manual/en/function.readfile.php

1 голос
/ 26 октября 2010

попробуйте это ..

if($fileExt == 'jpg'){
$im = imagecreatefromjpeg($filePath);
    if ($im !== false) {
       header('Content-Type: image/jpeg');
       imagejpeg($im);
    }
}
if($fileExt == 'png'){
$im = imagecreatefrompng($filePath);
    if ($im !== false) {
       header('Content-Type: image/png');
       imagepng($im);
    }
}

если изображение в формате gif, существует также imagecreatefromgif ()

0 голосов
/ 26 октября 2010

Я использовал подход, который вы обрисовали ранее, и он работает. Тот факт, что он работает в Chrome, говорит о том, что это проблема браузера. Три предложения:

  1. Используйте расширение Firefox Live Headers или curl -I, чтобы точно узнать, какие заголовки отправляет PHP при запросе getimg.php Может возникнуть проблема с кодировкой содержимого или сжатием gzip. Вы также можете отправить заголовки так, чтобы браузер кэшировал изображение - по умолчанию PHP будет отправлять заголовки, чтобы предотвратить это.

  2. Используйте RewriteRule, чтобы вы могли использовать src = "file_name.jpg", т.е..

    RewriteRule ^ (. +). Jpg $ getimage.php? File = $ 1.jpg

  3. Используйте jQuery. JQuery всегда работает.

...