Ссылка php на файл изображения за пределами веб-каталога по умолчанию
Вот структура каталогов
/domain.com
/public_html
/functions
/image
/mobile
/www
папка/domain.com/public_html/www имеет файл index.php
веб-каталог по умолчанию -/user/public_html/www
в индексном файле есть include, который включает в себя функции с
включают "../функции/function.inc"
это работает без проблем
когда я хочу ссылку на картинку в папке с изображениями, я не получаю никаких результатов
например
<img src="../image/graphic/logo.gif" alt="alt text"/>
Кто-нибудь знает, почему ссылка на изображение не работает и как правильно установить ссылку на файл изображения?
Я попробовал <img src="<?php echo $_SERVER['PHP_SELF']; ?>../image/graphic/logo.gif" alt="alt text"/>
но это дает мне тот же результат
когда я создаю ссылку вокруг изображения, чтобы перейти к свойствам, я получаю это как путь
http://domain.com/image/pc/tattoo_small/small_2008_10_22_001.JPG
путь должен быть
http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG
когда я пытаюсь перейти непосредственно к этому URL-адресу
http://domain.com/public_html/image/pc/tattoo_small/small_2008_10_22_001.JPG
Я получаю 404 файл не найдена ошибка
потому что веб-каталог по умолчанию
/domain.com/public_html/www
Я пытался
http://domain.com/../image/pc/tattoo_small/small_2008_10_22_001.JPG
чтобы попасть в папку с изображениями, но это не помогает.
Есть ли какие-либо идеи или невозможно связать html с графическими файлами вне веб-каталога по умолчанию?
спасибо за прочтение этого момента
Спасибо за ответы до сих пор.
Я попытаюсь решить мою проблему с одним из рекомендуемых решений и сообщить о своем рабочем решении здесь.
Я хотел, чтобы папка с изображениями находилась на том же уровне, что и папка www и mobile, потому что некоторые изображения, используемые для версии pc (www) и мобильной версии, одинаковы.
Конечно, проще просто получить папку с изображениями в www и в мобильной папке, и я думаю, что это то, что я собираюсь делать.
Благодарю всех вас за совет. Основная причина, по которой я не собираюсь работать с script, заключается в том, что script будет трудным решением для легкой проблемы, а также потому, что я действительно не вижу, как вы можете обернуть изображение в классе css и как обеспечить текст alt для изображения.
Ответы
Ответ 1
Невозможно напрямую обращаться к файлам за пределами webroot; это встроенное ограничение безопасности, которое существует по уважительной причине.
Однако для использования этих изображений можно использовать PHP- script. Таким образом вы можете вызвать изображение, например:
/image.php?file=myfile.jpg
и используйте file_get_contents(), чтобы получить содержимое файла и распечатать его в своем браузере. Вы также должны отправить заголовки клиенту, в этом случае используя PHP header(). Краткий пример:
<?php
$file = basename(urldecode($_GET['file']));
$fileDir = '/path/to/files/';
if (file_exists($fileDir . $file))
{
// Note: You should probably do some more checks
// on the filetype, size, etc.
$contents = file_get_contents($fileDir . $file);
// Note: You should probably implement some kind
// of check on filetype
header('Content-type: image/jpeg');
echo $contents;
}
?>
Использование script для этого имеет ряд преимуществ:
- Вы можете отслеживать загрузки и реализовывать счетчик, например
- Вы можете ограничить файлы аутентифицированными пользователями
- ... и т.д.
Ответ 2
Если вы используете Apache в качестве сервера, вы можете настроить его на псевдоним каталога в httpd.conf...
<IfModule mod_alias.c>
Alias /images/ "/User/Public_html/Image/"
<Directory "/User/Public_html/Image">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</IfModule>
IIRC, папка с псевдонимом не должна находиться внутри веб-сайта.
Ответ 3
Вы не можете обслуживать страницу, находящуюся за пределами веб-каталога, потому что путь не работает, т.е. http://mydomain.com/../page.html просто ссылается на недоступное место.
Если вы действительно хотите обслуживать (статические) файлы, находящиеся за пределами webroot, вы можете написать небольшой PHP script, чтобы прочитать их и вывести их. Таким образом, вы перенаправляете запросы на PHP скрипт, а PHP будет читать соответствующий файл с диска и возвращать его обратно.
Ответ 4
Создайте символическую ссылку внутри веб-корня, которая указывает на нужный каталог.
cd public_html
ln -s ../images
Apache нуждается в директиве конфигурации Options +FollowSymlinks
для этой работы (вы можете поместить ее в .htaccess
в свой веб-корень).
Написание PHP script, который обслуживает файлы из внешнего корня веб-сайта, поражает цель веб-root. Вам нужно будет проверить пути очень осторожно, чтобы не подвергать весь диск интернету.
Ответ 5
Невозможно напрямую связать файл с сайтом, недоступным для веб-сервера.
Однако вы можете написать PHP script, в котором будут прокси-изображения для вас
<img src="my_php_proxy.php">
потому что PHP может отправлять данные изображения, а также HTML. Этот "образ" PHP не ограничивается той же папкой, что и веб-доступный материал, он может обращаться к любому читаемому файлу на сервере. См. http://www.electrictoolbox.com/image-headers-php/ для получения дополнительной информации
Ответ 6
Вы можете либо сделать ссылку на каталог изображений внутри public___html, переместить каталог изображений в public_html, либо, если у вас есть особая симпатия к свернутым решениям, вы можете написать script, который читает файл изображения и выводит его для пользователя (конечно, если вы не сделаете белый список всех изображений, у вас может возникнуть потенциальная проблема безопасности в ваших руках).