Доступ и отображение изображений / файлов приглашений, которые находятся за пределами папки приложения - PullRequest
2 голосов
/ 22 июня 2009

Как получить доступ и отобразить изображения, расположенные вне папки приложения? Допустим, у меня есть каталог файлов, в котором хранятся все изображения и файлы других типов, и этот каталог файлов расположен на другом диске, чем папка моего приложения. Для определенных типов файлов (таких как .pdf, .doc, я хочу предложить пользователю загрузить эти файлы).

Насколько я знаю, невозможно указать абсолютный путь в атрибутах <img src, т. Е. img src="D:\\file directory"> не работает. А также Я хочу ограничить доступ только логину пользователя .

Я использую PHP как серверный язык.

Примечание: <img src="file:/// .../> не будет работать в Firefox . Смотрите здесь для комментариев .

Редактировать: так как только аутентифицированный пользователь может получить доступ к этим изображениям, и поскольку у меня есть index.php, который проверяет все входящие запросы, отфильтровывает не аутентифицированных пользователей, я не думаю, что создание псевдонима Apache работа.

Вот пример моего файла конфигурации:

  NameVirtualHost *:80
  <VirtualHost *:80 >
    ServerName pmmenu.businessjob.net
    DocumentRoot "D:\web"
    DirectoryIndex index.html index.php
    <Directory  "D:\web">
       AddDefaultCharset UTF-8
       Order Deny,Allow
       Allow from all
       RewriteEngine on
       RewriteBase /
       RewriteRule ^$ index.html [QSA]
       RewriteRule ^([^.]+)$ $1.html [QSA]
       RewriteCond %{REQUEST_FILENAME} !-f

       # no, so we redirect to our front web controller
       RewriteRule ^(.*)$ index.php [QSA,L]
    </Directory>
  </VirtualHost>

Ответы [ 4 ]

6 голосов
/ 28 сентября 2009

Я думаю, что вам не хватает основной концепции здесь. Весь HTML интерпретируется на стороне клиента. Каждое изображение загружается отдельно браузером вашего посетителя. Поскольку ваши посетители могут получить доступ только к тем файлам, которые являются общедоступными, «file: /// что-то» не будет работать для них, потому что это запрашивает у их браузера доступ к локальной (их) файловой системе, которая будет либо заблокирована, либо не найдет запрошенный изображение, поскольку оно не хранится на их диске.

Таким образом, вам нужно будет опубликовать эти фотографии и сделать их доступными через http, чтобы ваши посетители могли их увидеть. Вы можете сделать это, создав поддомен или виртуальный каталог.

Поскольку вы хотите, чтобы их могли видеть только аутентифицированные пользователи, вы также можете создать php-файл, который проверяет, аутентифицирован ли пользователь, например, как это:

if(user_is_authenticated()){
    $pathToFile = "d:\images\myimage.jpg";
    $handle = @fopen($pathToFile, "rb");
    $contents = @fread($handle, filesize($pathToFile));
    @fclose($handle);
    //sent appropriate header
    header('Content-type: image/jpeg');
    echo $contents;
}

Но вы должны знать, что этот сценарий всегда будет читать все изображение и впоследствии печатать его, что является огромным расходом.

1 голос
/ 28 сентября 2009

Всегда плохая идея обслуживать файлы из php. Если вы можете установить nginx до Apache, используйте http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/en/

В противном случае используйте модуль apache: http://john.guen.in/past/2007/4/17/send_files_faster_with_xsendfile/

Другое решение - создать отдельные символические ссылки (в качестве бонуса вы сможете давать ссылки с ограниченным сроком действия, очищая символические ссылки в cron).

1 голос
/ 22 июня 2009

попробуйте создать виртуальный каталог с папкой, в которой хранятся изображения, и используйте ее как ссылку на папку. Если используется IIS (виртуальный каталог), если apache (виртуальный хост). В google

есть множество учебных пособий.
0 голосов
/ 28 сентября 2009

В настоящее время я не могу проверить ни одну из этих теорий, но я почти уверен, что вы можете связать img src со скриптом php, который либо:

  • Использует GD для создания динамической версии изображения или
  • загружает его в браузер так же, как вы принудительно загружаете файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...