我在目录中有几个图像,它位于服务器的公共面向部分之外(在public_html目录之外)。我希望能够用php文件读取图像内容,然后将结果输出到html。
例如,我有一个名为getimg.php的php文件,其中包含以下源代码:
header('Content-type: image/jpeg');
$dir = '/home/server/images/';
$file_name = addslashes($_GET['file']);
readfile('' . $dir . '' . $file_name . '.jpg');
getimg.php读取images目录中jpg图像的内容,然后在我想向用户显示图像时使用以下代码引用:
<img src="getimg.php?file=name_of_image_file">
getimg.php文件还会进行一些验证检查,以确保用户已登录,实际拥有他们试图查看的图像等(为简单起见,上面未显示)。此方法旨在控制对图像文件的访问。但是,这不是问题所在。
问题在于:上述方法/代码仅适用于Chrome浏览器。图像未在IE,FF,Safari或Opera中正确显示。任何想法为什么这不起作用或如何正确地做到这一点?
备注:
我试图避免使用mysql 存储图像由于大 图像数量。能够利用文件系统是非常可取的。
解决方案必须是跨浏览器 友好。
实际上,图像可以是jpg, png,或gif文件。为了 简单,仅限上述代码 处理jpg图像。
我怀疑它是否相关,但我是 不使用jQuery。不,我不会 改变我的整个网站以使用jQuery。任何“使用jQuery”帖子都会自动收到downvote 。我不讨厌jquery ..这对我的网站来说不是正确的解决方案。
更新
问题不在于代码本身。我将我的php.ini文件设置为自动包含登录验证脚本。由于我没有登录所有浏览器,因此图像未显示。愚蠢的错误,但可以理解和修复。上面的代码应该可以正常工作。它也已更新为使用readfile()而不是file_get_contents()。我将把这篇文章留给那些正在浏览网页寻找控制谁可以使用php访问图像的方法。
答案 0 :(得分:2)
使用readfile函数。
答案 1 :(得分:1)
试试这个..
if($fileExt == 'jpg'){
$im = imagecreatefromjpeg($filePath);
if ($im !== false) {
header('Content-Type: image/jpeg');
imagejpeg($im);
}
}
if($fileExt == 'png'){
$im = imagecreatefrompng($filePath);
if ($im !== false) {
header('Content-Type: image/png');
imagepng($im);
}
}
如果图像是gif,还有imagecreatefromgif()
答案 2 :(得分:0)
我已经使用了您之前概述的方法,但确实有效。它在Chrome中运行的事实表明它是一个浏览器问题。三点建议:
使用Firefox Live Headers扩展或curl -I
可以确切了解请求getimg.php时PHP正在发送的标头。可能存在Content-Encoding或gzip压缩问题。您可能还希望发送标题,以便浏览器缓存图像 - 默认情况下,PHP将发送标头以防止此情况发生。
使用RewriteRule以便您可以使用src =“file_name.jpg”即。
RewriteRule ^(。+)。jpg $ getimage.php?file = $ 1.jpg
使用jQuery。 jQuery总是有效。