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

Posted

技术标签:

【中文标题】在 codeigniter 中使用控制器中的 readfile() 显示图像【英文标题】:Display an image using readfile() from controller in codeigniter 【发布时间】:2016-01-11 05:21:53 【问题描述】:

为了测试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

有什么想法吗?

编辑:我确实注意到在我的所有页面上 之前都有一个空行。请参阅此链接顶部的示例,该链接也是一个 codeigniter 站点。查看来源:call2you.co。我想知道这是否可能是原因。知道那条线是从哪里来的,所以我可以删除它吗?

【问题讨论】:

【参考方案1】:

我认为如果您删除 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;

这应该允许一个干净的退出。

【讨论】:

谢谢。不幸的是,移除出口并没有改变任何东西。你的代码也没有。我确实注意到,在我的所有页面上 之前都有一个空行。请参阅此链接顶部的我的意思示例,该链接也是一个 codeigniter 站点。查看源代码:call2you.co。我想知道这是否可能是原因。知道这是从哪里来的吗? 看起来您在代码中的某处输出了一个空行,或者您在打开的 php 标签 ' 谢谢艾哈迈德。这就是问题所在。正如我在下面提到的,我用 ob_end_clean(); 解决了它。就“标头已发送”错误而言,发送 content-type:image/jpeg 是否也阻止它出现在服务器上的错误日志中?因为那并没有向我展示任何东西。 如果您将 display_errors 设置为 on,那么您的错误会发送到浏览器。【参考方案2】:

我在这里回答我自己的问题。问题是在源代码顶部神秘地添加了空行。寻找那条线的来源变得太耗时了,所以我的解决方案是把 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);

谢谢回复的人。

【讨论】:

以上是关于在 codeigniter 中使用控制器中的 readfile() 显示图像的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 中的 Cron 作业

显示从控制器传递的表(视图)中的数据 - Codeigniter

如何使用 CodeIgniter 3 中的外键从表中获取列数据

CodeIgniter:控制器中的全局变量

使用 htaccess 删除子目录中的 codeigniter index.php

将数组从控制器传递到 codeigniter 中的模型