如何用标题解决错误('Content-Type:image / jpeg')

时间:2013-08-17 16:09:56

标签: php character-encoding header file-encodings

我在当前的一个项目中遇到了问题。如果有人对此类问题有经验,请分享。虽然我尝试使用以下脚本:

标题('内容类型:image / jpeg');

以下错误显示:

警告:无法修改标题信息 - 第89行/location/controller/Captcha.php中已经发送的标题(/location/test.php:1开始输出)

我使用过 ob_clean();在标题之前(' Content-Type:image / jpeg'); 功能来清理缓冲区。但不是傻逼。 我也检查php文件中的任何输出或换行符,但一无所获。

请问有人给我解决方案吗?

2 个答案:

答案 0 :(得分:1)

基本上,当在php标记之外存在任何空格或新行或在标题函数之前打印的任何内容时,会出现此类问题。但在我的项目问题中,除了test.php文件之外,我的所有php文件都以 ANSI编码保存。 test.php文件以 utf-8编码保存。

虽然captcha.php文件试图访问test.php,它会自动打印一些特殊字符(我不知道为什么)。

当我将编码转换为test.php的ANSI时,我的项目问题就解决了。

感谢弗雷德的回复。

答案 1 :(得分:0)

如果没有看到完整的代码,您可能会在<?php标记,HTML或其他类型的“输出”之外或之上留下空格,甚至可能是byte order mark

<?php

echo "Correct";
// or vvv, but not with echo
// header("Location: http://www.example.com/");

?>

被视为“输出”(标题之前)的示例:

(space)
(space) <?php

echo "Incorrect";
header("Location: http://www.example.com/");

?>

<div align="center">Text</div> <!-- HTML -->
<!-- comment tags also considered as output -->
<?php

echo "Incorrect";
header("Location: http://www.example.com/");

?>

(byte order mark) // aka BOM which is invisible but still present
<?php

echo "Incorrect";
header("Location: http://www.example.com/");

?>

有关header()功能的更多信息,请访问PHP.net网站: