1

我在一个目录中有几个图像,该目录位于服务器面向公众的部分之外(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 读取图像目录中 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 访问图像的人。

4

3 回答 3

3

使用 readfile 函数。

http://php.net/manual/en/function.readfile.php

于 2010-10-26T08:33:20.383 回答
2

尝试这个..

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()

于 2010-10-26T07:45:51.027 回答
0

我已经使用了您之前概述的方法,并且确实有效。它在 Chrome 中工作的事实表明这是一个浏览器问题。三个建议:

  1. 使用 Firefox Live Headers 扩展或curl -I查看请求 getimg.php 时 PHP 发送的确切标头。可能存在内容编码或 gzip 压缩问题。您可能还希望发送标头以便浏览器缓存图像 - 默认情况下 PHP 将发送标头以防止这种情况发生。

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

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

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

于 2010-10-26T08:25:36.700 回答