php内容类型标头无法正常工作

时间:2015-09-24 21:57:29

标签: php http-headers content-type

我正在使用标准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文件调用此函数。任何和所有帮助追踪这一点是值得赞赏的。

2 个答案:

答案 0 :(得分:0)

看起来像我曾经遇到的一个问题。 确保你没有将BOM添加到你的文件中,这会导致标题失败,因为它不会是第一个写入文件的内容。

答案 1 :(得分:0)

确保您对标头的调用是首先回应浏览器的事情。如果在调用标头之前回显了任何内容,则内容类型将自动设置为text/html