在php中从目录中的文件显示图像

时间:2010-10-26 04:41:14

标签: php html image mime-types imagesource

我在目录中有几个图像,它位于服务器的公共面向部分之外(在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访问图像的方法。

3 个答案:

答案 0 :(得分:2)

答案 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中运行的事实表明它是一个浏览器问题。三点建议:

  1. 使用Firefox Live Headers扩展或curl -I可以确切了解请求getimg.php时PHP正在发送的标头。可能存在Content-Encoding或gzip压缩问题。您可能还希望发送标题,以便浏览器缓存图像 - 默认情况下,PHP将发送标头以防止此情况发生。

  2. 使用RewriteRule以便您可以使用src =“file_name.jpg”即。

    RewriteRule ^(。+)。jpg $ getimage.php?file = $ 1.jpg

  3. 使用jQuery。 jQuery总是有效。