如何访问Web应用程序外部目录上的图像

时间:2009-09-02 01:15:39

标签: apache image web-applications

我正在使用Apache和Windows,我正在编写一个应用程序,需要显示位于不同服务器上的部件的图像,而不是应用程序目录的路径。移动的图像太多,而其他应用程序使用这些相同的图像。

解决这个问题的最佳方法是什么?

后端是php和mysql - 虽然我不认为这是相关的。

由于

4 个答案:

答案 0 :(得分:2)

如果您的文件存储在www root之外。 那么,你需要有足够的权限来访问这些文件。

然后,您可以执行以下操作:

<?php

$imageFileName = $_GET['image'];
$path = '/var/data/somewhere/';

$fullpath = $path . $imageFileName;

if (!is_file($fullpath))
{
   die('Image doesn't exist);
} else {
   $size = filesize($fullpath);
   $content = file_get_contents($fullpath);
   header("Content-type: image/jpeg");
   echo $content;
}

好吧,不要在生产环境中使用此代码,因为它不安全。

您可以使用getimagesize()检查它是否是图像。 将phps扩展名等列入黑名单...... 指定工作目录,不能使用反向../../

file_get_contents()

编辑:

关于您对符号链接的评论,如果您有权访问apache.conf文件,则可以指定alias指向webroot之外的另一个目录。

答案 1 :(得分:0)

你看过符号链接吗?

ln -s LocalName FullPathOfRealFileLocation

答案 2 :(得分:0)

由于图像在服务器上,为什么不直接在代码中引用它们?

<img src="http://myotherserver.com/images/picture.jpg"

答案 3 :(得分:0)

我使用Apache时发现的最佳答案。我是,使用Apache Alias功能,允许访问内部目录。

正如以上BGY的答案所示。

我在http.conf中添加了以下内容:

Alias /fabimages p:/IMDATA/IMAGES
<Directory p:/IMDATA/IMAGES>
    Order allow,deny
    Allow from all
</Directory> 

在我的代码中,我将.src属性设置为我需要的图像:

var fabimage = document.getElementById("fabImageTag");
fabimage.src="/fabimages/"+imageName; // and it picks up the image from p:/IMDATA/IMAGES