2010-10-26 51 views
0

我有一个目录位于服务器的公共部分外部(public_html目录之外)的几个图像。我希望能够用php文件读取图像内容,然后将结果输出到html。在php中从一个目录中的文件中显示一个图像

例如,我有称为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 ..这只是我的网站的正确解决方案。

UPDATE

的问题是不是与代码本身。我有我的php.ini文件设置为自动包含登录验证脚本。由于我没有登录我的所有浏览器,图像未显示。愚蠢的错误,但可以理解和修复。上面的代码应该工作得很好。它也被更新为使用readfile()而不是file_get_contents()。我将把这篇文章留给任何浏览网页的人寻找一种方法来控制谁可以使用php访问图像。

+0

IE/FF中的图像“不正确显示”究竟如何?究竟发生了什么?除非你告诉我们发生了什么,否则我们无法帮助你。 – kijin 2010-10-26 04:54:36

+1

'addslashes()'不属于那里。它可能会弄乱文件名,这可能会导致你的问题。你应该使用'basename()'或者一些ctype函数来清理文件名。另外,如果文件很大,'file_get_contents()'可能会导致内存不足。删除回声并使用'readfile()'来代替。 – kijin 2010-10-26 04:56:33

+0

对不起,我不恰当地认为那部分是清晰的。在部分,输出显示为好像我输入了错误的网址。换句话说,就像我将src设置为一个不存在的jpg文件,它显示为一个破碎的图像。 – user396404 2010-10-26 04:57:43

回答

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

0

我用你前面提到的方法和它的工作。它在Chrome中运行的事实表明这是一个浏览器问题。三点建议:

  1. 使用Firefox的活头扩展或curl -I看到什么headers是要求getimg.php当PHP被发送。可能存在内容编码或gzip压缩问题。您可能还希望发送标题,以便浏览器缓存图像 - 默认情况下,PHP会发送标题以防止发生此情况。

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

    重写规则^(+)。JPG $ getimage.php?文件= $ 1.JPG

  3. 使用jQuery。 jQuery始终有效。

+1

哈哈..#3使用得不错,我不能投票。 – user396404 2010-10-26 09:12:55