我正在使用Apache和Windows,我正在编写一个应用程序,需要显示位于不同服务器上的部件的图像,而不是应用程序目录的路径。移动的图像太多,而其他应用程序使用这些相同的图像。
解决这个问题的最佳方法是什么?
后端是php和mysql - 虽然我不认为这是相关的。
由于
答案 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扩展名等列入黑名单...... 指定工作目录,不能使用反向../../
编辑:
关于您对符号链接的评论,如果您有权访问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