Php 访问和显示位于应用程序文件夹外的图像/提示文件下载

Php 访问和显示位于应用程序文件夹外的图像/提示文件下载,php,html,apache,Php,Html,Apache,如何访问和显示位于应用程序文件夹外的图像?假设我有一个存储所有图像和其他文件类型的文件目录,这个文件目录位于与我的应用程序文件夹不同的驱动器上。对于某些文件类型(例如.pdf、.doc),我想提示用户下载这些文件 据我所知,无法将绝对路径放入属性中,即img src=“D:\\file directory”>不起作用。而且我只想限制登录用户的访问权限 我使用PHP作为服务器端语言 注意:。请看这里 Edit:因为只有经过身份验证的用户才能访问这些图像,而且我有一个index.php来检查所有传入

如何访问和显示位于应用程序文件夹外的图像?假设我有一个存储所有图像和其他文件类型的文件目录,这个文件目录位于与我的应用程序文件夹不同的驱动器上。对于某些文件类型(例如.pdf、.doc),我想提示用户下载这些文件

据我所知,无法将绝对路径放入
属性中,即
img src=“D:\\file directory”>
不起作用。而且我只想限制登录用户的访问权限

我使用PHP作为服务器端语言

注意:
。请看这里

Edit:因为只有经过身份验证的用户才能访问这些图像,而且我有一个index.php来检查所有传入的请求,过滤掉未经身份验证的用户,所以我认为创建Apache别名是行不通的。

下面是我的conf文件的一个示例:

  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>
NameVirtualHost*:80
ServerName pmmenu.businessjob.net
DocumentRoot“D:\web”
DirectoryIndex.html index.php
AddDefaultCharset UTF-8
命令拒绝,允许
通融
重新启动发动机
重写基/
重写规则^$index.html[QSA]
重写规则^([^.]+)$$1.html[QSA]
重写cond%{REQUEST_FILENAME}-F
#不,所以我们重定向到前端web控制器
重写规则^(.*)$index.php[QSA,L]

尝试创建包含图像的文件夹的虚拟目录,并将其用作链接到该文件夹的工具。如果使用IIS(虚拟目录),如果使用apache(虚拟主机)。谷歌上有很多教程

目前我无法测试这些理论中的任何一个,但我非常确定您可以将img src链接到一个php脚本,该脚本可以:

  • 使用GD生成图像的动态版本,或
  • 以与强制下载文件相同的方式将其下载到浏览器

我认为您在这里缺少一个基本概念。所有HTML都是客户端解释的。每幅图片都由访问者的浏览器单独下载。因为您的访问者只能访问那些公共文件,”file:///something“对他们不起作用,因为这要求他们的浏览器访问本地(他们的)文件系统,该文件系统将被阻止或找不到请求的映像,因为它未存储在他们的磁盘上

因此,您必须发布这些图片,并通过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;
}

但是您必须知道,这个脚本总是读取整个图像并随后打印,这是一个巨大的开销。

从php提供文件总是一个坏主意。如果您可以在apache使用之前安装nginx

否则,请使用apache模块:


另一个解决方案是创建单独的符号链接(作为奖励,您将能够提供有日期限制的链接,清除cron中的符号链接)。

您能澄清一下吗?图像是否存储在浏览器可以访问的文件系统中?(即本地驱动器、Windows文件和打印共享等)应用程序位于C:,而图像位于D。因此,浏览器应该可以访问图像。使用gd或下载到浏览器。。。有url或代码吗?谢谢。另请看这个问题:Access仍然是经过身份验证的,但是有一个新的头,php可以用来将文件“传递”到web服务器。