У меня есть веб-приложение на PHP с использованием сервера apache, linux. По какой-то причине я сохраняю документы и изображения вне веб-корня. Как я могу показать эти изображения при входе пользователя в систему.
PHP по умолчанию уже может обращаться к файлам за пределами корня веб-сайта, если только не ограничен директивой open_basedir
(или безопасным режимом, но надеюсь, что вы не в этой клетке).
Обычно рекомендуется вставлять в конфигурацию VirtualHost ограничение open_basedir
. Вы можете указать несколько каталогов, разделенных :
на Linux и ;
на окнах.
php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir
Для доступа к этим файлам используется либо абсолютный путь, либо путь относительно позиции файла PHP. (Таким образом, вам придется …/ достичь уровней выше).
Также убедитесь, что каталоги, в которые вы хотите записать, назначены пользователю веб-сервера и имеют разрешение на запись.
В противном случае у вас есть второй вариант:
Внутри вашего каталога www создайте файл «image.php» с похожим контентом:
<?php header('Content-Type: image/png'); readfile("../img/" . $_GET['img']); ?>
И назовите свои изображения с помощью
<img src="image.php?img=myimage.png" />
Имейте в виду, что ваш PHP-файл не должен быть таким простым 🙂 Как вы можете захотеть обратиться к нескольким форматам изображений (и предоставить для них правильный заголовок), проверить путь / включения вредоносных файлов (вы не хотите использовать $ _GET без проверки / дезинфекции ввода), дополнительное кэширование и т. Д. И т. Д. И т. Д.
Но это должно дать вам представление о том, как вы можете настроить свою проблему.
Проще всего это будет выводить изображение с правильными заголовками,
помните, что вам нужно установить заголовок (), прежде чем вымывать что-либо из выходного буфера
=> нет эха или печати перед
$ file = '../../somedirectory/image.jpg'; заголовка ( 'Content-Type: изображение / JPEG'); header ('Content-Length:' .filesize ($ file)); echo file_get_contents ($ file);