要测试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。我想知道这是否可能是原因。知道那条线来自哪里,我可以删除它吗?
答案 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);
谢谢你的回复。