Как отобразить изображение, находящееся за пределами общей папки

В этом проекте я загружаю файлы, отправленные администратором, в папку, которая находится за пределами общей папки.

/web/ (the public folder)
/upload/ (uploading image to this which is at the same level as the public folder)

Теперь, хотя я могу выложить с помощью абсолютного URL (/www/userid/upload/), Я не могу отобразить одно и то же изображение, используя относительный или абсолютный URL.

я пытался <img src="/www/userid/upload/photo.jpg" /> так же как <img src="../upload/photo.jpg" /> но никто не работает. Есть намеки?

2

Решение

direct путь не будет работать, потому что вы не можете получить контент из-за пределов корневой папки. Вы можете сделать это другим способом, прочитать файл изображения в php-скрипте из каталога dir сервера и использовать файл, используя header

скрипт file.php

<?php
$mime_type = mime_content_type("/image_path/{$_GET['file']}");
header('Content-Type: '.$mime_type);

readfile("/image_path/{$_GET['file']}");
?><img src="file.php?file=photo.jpg" />
4

Другие решения

Обычно вы не обращаетесь к каталогам вне веб-корня.

Быстрое решение состоит в том, чтобы добавить alias в конфиге apache вроде

alias /upload/ /www/userid/upload/

внутри virtualhosts

и использовать

/upload/photo.jpg
2

Я бы пропустил опции php и folder и использовал бы символические ссылки прямо на сервере. Я предполагаю, что вы используете какую-то форму Linux в качестве вашего сервера. Поэтому, если это не проблема безопасности, просто сделайте в папке загрузки копию общедоступной папки, в которой находятся изображения. Это, однако, заставит все в этой папке появиться в папке загрузки, но это не должно большая часть проблемы, поскольку альтернативой было бы изменение разрешений для папки загрузки и сценарий всего этого таким образом.

0
По вопросам рекламы [email protected]