У меня есть несколько изображений в каталоге, который находится за пределами общедоступной части сервера (за пределами каталога 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.