使用来自codeigniter中的控制器的readfile()显示图像

时间:2015-10-13 12:41:34

标签: php codeigniter

要测试readfile(),我将以下代码放在主index.php文件的最顶部,并正确显示图像。但是,当我将完全相同的代码放在我的控制器中时,它只显示一个损坏的图像。

我尝试用"$this->output->set_header('Content-Type: image/jpeg');"替换标题行,但只是乱码。如何从控制器中显示它,就像它从索引文件中显示一样?我很难过。

代码:

$file = '/home/www/noname.com/public/captcha/1444721011.7843.jpg';
 header('Content-Type: image/jpeg');
readfile($file);
exit;

我试过把" header_remove();"在代码之前的控制器中。结果仍然只是一个破碎的图像(尽管标题看起来相同)。像这样:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 2166
Content-Type: image/jpeg
Date: Tue, 13 Oct 2015 12:27:43 GMT
Keep-Alive: timeout=5, max=100
Server: Apache

有什么想法吗?

编辑:我注意到在我的所有页面上都有一个空行<!DOCTYPE html> 。请参阅此链接顶部的示例,该链接也是一个codeigniter站点。 view-source:call2you.co。我想知道这是否可能是原因。知道那条线来自哪里,我可以删除它吗?

2 个答案:

答案 0 :(得分:0)

我认为如果您删除exit调用,您的示例应该在控制器中正常工作。

如果你真的想中止脚本执行,那么你的方法应如下所示:

public function display_image () {
    $file = '/home/www/noname.com/public/captcha/1444721011.7843.jpg';
    $contents = file_get_contents($file);
    $this->output
            ->set_status_header(200)
            ->set_content_type('image/jpeg')
            ->set_output($contents)
            ->_display();
    exit;
}

哪个应该允许干净的退出。

答案 1 :(得分:0)

我在这里回答了我自己的问题。问题是在源代码的顶部神秘地添加了空行。找到该行的来源变得非常耗时,所以我的解决方案就是放入ob_end_clean();在标题之前。所以:

     $file = '/home/www/noname.com/public/captcha/1444721011.7843.jpg';
     ob_end_clean();
     $this->output->set_header('Content-Type: image/jpeg');
     readfile($file);

谢谢你的回复。