php中header头设置无效的原因可能有哪些?

laravel5.1中使用这个扩展:https://packagist.org/package...

使用方法按照这里的介绍来使用:
http://www.jianshu.com/p/8e4a...

我的代码:
//验证码

public function code($id){
      $builder = new CaptchaBuilder;
      $builder->build($width = 100, $height = 40, $font = null);
      //获取验证码的内容
      $phrase = $builder->getPhrase();
      //return $phrase;
      //把内容存入session
      //Session::flash('milkcaptcha', $phrase);
      //session('mycode',$phrase);
     
      //$pic=$builder->inline(); //这里生成图片的是base64编码
      //return "<img src='".$pic."'/ alt='验证码'>"; //这样可以正常输出

      //生成图片
      header("Cache-Control: no-cache, must-revalidate");
      header('Content-Type: image/jpeg'); //浏览器中打开后:Content-Type:text/html; charset=UTF-8 为什么会这样?
      $builder->output();

}

浏览器中的显示效果:
图片描述

补充:
看到文档中有写到,laravel中不能直接这样写header,而是应该response()->header();这样设置。
现在设置header的问题是解决了,但问题是,验证码仍然显示不出来,换了几个验证码的扩展,也自己写了个,在别的页面可以正常生成,但在laravel中就是有问题。
很是奇怪。

阅读 11.8k
2 个回答

header那一段注视掉 。看看您的报错把

常规的header('Content-Type: image/jpeg');在laravel是不起作用的
需要按照laravel的写法设置header,如下

return response($content, 200)
                  ->header('Content-Type', 'text/plain');

我们只需要把变量$content替换成验证码的文件内容。使用$builder->get()获取内容即可。

完整如下

        ////其他代码/////
        
        //header("Cache-Control: no-cache, must-revalidate");
        //header('Content-Type: image/jpeg');
        $output = $builder->get();
        return response($output, 200)
            ->header('Content-Type', 'image/jpeg');

laravel 改变header的写法参考Laravel 的请求返回 Response

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题