2010-07-05 23 views
1

好的,请原谅那个神秘的主题。在使用动态图像(PHP)时在firefox中的内容类型失败<img src="source.php">

我有一个系统,它动态获取图像数据,并在飞行中做一些修改。

本质,错过了不重要位,这是我的代码:

$File->Filename = "testimage.jpg"; 
$File->Open(); 
$FileData = $File->Read(); 

header('Content-Type: image/jpeg'); 

echo $FileData; 

页面上的唯一输出为$的FileData。好的。当我按原样运行脚本时,Firefox给我一个空白页面,Chrome和IE给我一个“缺失图片”框。

但奇怪的是,当我删除内容类型声明时,我可以看到原始图像数据就好了。我已经用几张图片测试了这个图片,并授予了所有的JPEG类型,但是它显然会加载不同的图片,因为原​​始数据成功更改,并匹配图片本身的原始内容。

任何人都有任何想法,为什么它会失败,现在只显示图像?

回答

0

我会结合phant0m的和Thariama的答案):

header('Content-Length: '.strlen($FileData), true); 
header('Content-Type: image/jpeg'); 
die($FileData); 
+0

仅仅因为它的名字,die()对于“正常”输出和脚本终止来说不是一个好的功能,因为它表示对开发者的异常终止。 print()和exit()是更好的选择。 – Palantir 2010-07-05 09:16:21

+0

@Palantir:我会放弃/退出,以确保脚本退出而不输出任何其他内容。 – 2010-07-05 09:33:17

+0

如果没有其他回显或打印语句,您只需要移除关闭的PHP标记和PHP;) – phant0m 2010-07-05 09:49:38

2

尝试适当设置Content-Length。删除尾部?>以确保在脚本末尾没有空白,并确保在脚本开始时启动它。

4

你需要为了让浏览器正确地处理它(使用正确的类型和长度),以提供更多的信息:

header('Content-Length: '.strlen($FileData),true); // EDIT: inserted the strlen function as suggested by kgb 
header('Content-Type: image/jpeg'); 
+0

true是默认参数,您不需要指定它。 – phant0m 2010-07-05 09:12:19