我正在使用标准LAMP堆栈托管网站的镜像。尝试返回生成的图像时,Content-type标头未正确设置为image / png,而是返回Content-Type:text / html;字符集= UTF-8。这导致浏览器只显示垃圾而不是图像。我有一个试图设置标题的函数,并在代码中添加了一些我自己的调试,但是不知道从这里去哪里。
// Generate image header
function Headers() {
error_log("in Headers function",0);
// In case we are running from the command line with the client version of
// PHP we can't send any headers.
$sapi = php_sapi_name();
error_log("sapi = $sapi",0);
if( $sapi == 'cli' ) return;
// These parameters are set by headers_sent() but they might cause
// an undefined variable error unless they are initilized
$file='';
$lineno='';
if( headers_sent($file,$lineno) ) {
error_log("headers already sent",0);
$file=basename($file);
$t = new ErrMsgText();
$msg = $t->Get(10,$file,$lineno);
die($msg);
}
if ($this->expired) {
error_log("expired",0);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
}
header("Content-type: image/$this->img_format");
header("Custom-header: gnm image/$this->img_format");
error_log("end of Headers function, img_format = $this->img_format",0);
}
使用上面的代码,我得到错误日志,显示我已进入函数,sapi是apache2handler,expired是true,图像格式是png,我在函数的末尾。我还可以正确设置过期块中的所有标题,并添加"自定义标题"按预期设置。唯一未按预期设置的标头是Content-type。
从生成然后流式传输图像的php文件调用此函数。任何和所有帮助追踪这一点是值得赞赏的。
答案 0 :(得分:0)
看起来像我曾经遇到的一个问题。 确保你没有将BOM添加到你的文件中,这会导致标题失败,因为它不会是第一个写入文件的内容。
答案 1 :(得分:0)
确保您对标头的调用是首先回应浏览器的事情。如果在调用标头之前回显了任何内容,则内容类型将自动设置为text/html
。