【问题标题】:Display an image using readfile() from controller in codeigniter在 codeigniter 中使用控制器中的 readfile() 显示图像
【发布时间】: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。我想知道这是否可能是原因。知道那条线是从哪里来的,所以我可以删除它吗?

【问题讨论】:

    标签: php codeigniter


    【解决方案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);
    

    谢谢回复的人。

    【讨论】:

      猜你喜欢
      • 2018-10-31
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多