В этом проекте я загружаю файлы, отправленные администратором, в папку, которая находится за пределами общей папки.
/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" />
но никто не работает. Есть намеки?
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" />
Обычно вы не обращаетесь к каталогам вне веб-корня.
Быстрое решение состоит в том, чтобы добавить alias
в конфиге apache вроде
alias /upload/ /www/userid/upload/
внутри virtualhosts
и использовать
/upload/photo.jpg
Я бы пропустил опции php и folder и использовал бы символические ссылки прямо на сервере. Я предполагаю, что вы используете какую-то форму Linux в качестве вашего сервера. Поэтому, если это не проблема безопасности, просто сделайте в папке загрузки копию общедоступной папки, в которой находятся изображения. Это, однако, заставит все в этой папке появиться в папке загрузки, но это не должно большая часть проблемы, поскольку альтернативой было бы изменение разрешений для папки загрузки и сценарий всего этого таким образом.