2009-09-02 39 views
3

我正在使用Apache和Windows,并且正在编写一个应用程序,该应用程序需要显示位于不同服务器上的部分的图像,而不是应用目录。有太多图片需要移动,其他应用程序使用这些图片。如何访问Web应用程序之外的目录中的图像

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

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

谢谢

+0

我忘了提一大点,即我需要从Javascript访问目录。 – sdfor 2009-12-11 17:12:48

回答

2

如果您的文件存储在www根以外。 然后,您需要有足够的权限才能访问这些文件。

然后,你可以这样做:

<?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; 
} 

那么,在生产environement不要使用此代码,因为它并不安全。

您可以使用getimagesize()来检查它是否为图像。 黑名单的PHPS扩展,等等 指定一个工作目录,对不能够使用落后../../

file_get_contents()

编辑:

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

0

你看过符号链接吗?

ln -s LocalName FullPathOfRealFileLocation 
+0

是的,我试过了。这在任何unix/linux变体中都可以很好地工作。窗口快捷方式不能用于路径名称的中间。 ie images/shortcutToAnotherFolder/image.jpg在windows中不起作用。 – sdfor 2009-09-02 03:15:48

0

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

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

感谢您的想法。另一台服务器无法通过互联网访问它在计费服务器上 – sdfor 2009-09-02 19:41:24

0

如果您使用Apache,我发现了最好的答案。我是,使用Apache别名功能,以允许访问内部目录。

正如上述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 
相关问题