我有一个目录位于服务器的公共部分外部(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访问图像。
IE/FF中的图像“不正确显示”究竟如何?究竟发生了什么?除非你告诉我们发生了什么,否则我们无法帮助你。 – kijin 2010-10-26 04:54:36
'addslashes()'不属于那里。它可能会弄乱文件名,这可能会导致你的问题。你应该使用'basename()'或者一些ctype函数来清理文件名。另外,如果文件很大,'file_get_contents()'可能会导致内存不足。删除回声并使用'readfile()'来代替。 – kijin 2010-10-26 04:56:33
对不起,我不恰当地认为那部分是清晰的。在部分,输出显示为好像我输入了错误的网址。换句话说,就像我将src设置为一个不存在的jpg文件,它显示为一个破碎的图像。 – user396404 2010-10-26 04:57:43