今天写了一个PHP生成图片,想用浏览器查看,但是每次打开都是一串乱码,看样子是图片源二进制数据,然后查看了下响应头是text/html,那我明明设置了image/jpegheader("Content-type", "image/jpeg");

这说明TP默认设置了text/html,查了官方文档,啥也没说,去网上查,才知道TP有个Response类,默认所有控制器输出text/html,官方文档啥也没说,只好自己去翻Response这个类了ThinkPHP6\vendor\topthink\framework\src\think\Response.php

基类Response被这几个类继承,我试了下File类,但是这个File是输出文件,浏览器直接下载了$file = new File('123.jpg');

$response = $file->mimeType('image/jpeg');

throw new HttpResponseException($response);

在看看基类Response/**

* 创建Response对象

* @access public

* @param mixed $data 输出数据

* @param string $type 输出类型

* @param int $code 状态码

* @return Response

*/

public static function create($data = '', string $type = 'html', int $code = 200): Response

{

$class = false !== strpos($type, '\\') ? $type : '\\think\\response\\' . ucfirst(strtolower($type));

return Container::getInstance()->invokeClass($class, [$data, $code]);

}

这里是自动找response目录下的响应类,但我只想设置一个响应头来显示我的图片,文档翻遍了没找到方法,然后看了看目录下的Html类,那我们可以自己写一个自定义类来输出自己想要的响应格式/**

* Html Response

*/

class Html extends Response

{

/**

* 输出type

* @var string

*/

protected $contentType = 'text/html';

public function __construct(Cookie $cookie, $data = '', int $code = 200)

{

$this->init($data, $code);

$this->cookie = $cookie;

}

}

于是我在response目录写了一个Jpeg类/**

* Html Response

*/

class Jpeg extends Response

{

/**

* 输出type

* @var string

*/

protected $contentType = 'image/jpeg';

public function __construct(Cookie $cookie, $data = '', int $code = 200)

{

$this->init($data, $code);

$this->cookie = $cookie;

}

}

可以输出图片了$response = Response::create('', 'Jpeg');

$image->blob('JPEG');

throw new HttpResponseException($response);

也许有办法不用这么麻烦,但是TP官方文档啥也没有写,一下子也找不到其他方法,导致我的header()函数都没用了,这里引用ThinkPHP论坛网友的一句话框架的定义就是在于更快速、便捷地开发应用

如果我使用了某款框架还是需要自己去注意条条款款,然后定义或修正许多形式上的规范,那还用框架干嘛呢

本末倒置,鸡蛋里面挑骨头

php 无法输出图像,ThinkPHP里无法输出图片 设置响应头相关推荐

  1. php输出图片没有,ThinkPHP里无法输出图片 设置响应头

    今天写了一个PHP生成图片,想用浏览器查看,但是每次打开都是一串乱码,看样子是图片源二进制数据,然后查看了下响应头是text/html,那我明明设置了image/jpeg header("C ...

  2. m_Orchestrate learning system---二十四、thinkphp里面的ajax如何使用

    m_Orchestrate learning system---二十四.thinkphp里面的ajax如何使用 一.总结 一句话总结:其实ajax非常简单:前台要做的事情就是发送ajax请求过来,后台 ...

  3. 【问题解决】微软OneNote使用笔记,Ditto解决OneNote复制粘贴文本输出图片问题

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 白嫖用onenote和onedrive有段时间了,简单粗暴好用,没得说. 先总结(BB ...

  4. python中的matplotlib怎么改变标题大小和图例的字体大小和线的线型与颜色和输出图片大小呢?

    1 怎么改变图例里面的字体大小 所谓图例就是图右上角的表明图里线的分类名称,一般情况下,大家会直接plt.legend(),但()里面不能用fontsize,所以我们在legend里面加一句话如下: ...

  5. ThinkPHP 3.2.3图片处理

    1.Thinkphp图像处理 在TP框架中,我们经常用到图片上传,我最近写了很多关于图片上传的文章,thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成等文章,今天写一下关于图 ...

  6. ashx返回图片_ashx输出文字,执行JavaScript,输出图片等

    原文发布时间为:2009-09-30 -- 来源于本人的百度文章 [由搬家工具导入] 一提到Ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webserv ...

  7. 用 PHP 和 MySQL 保存和输出图片

    用 PHP 和 MySQL 保存和输出图片 在我们设计和制作网站的过程中,有时把图片保存到数据库中要比存成文件的形式更加方便.和MySQL这对黄金组合可以很容易的实现上述功能.在本文中,我们将会向读者 ...

  8. java BASE64流 输出图片。

    java BASE64流 输出图片. 亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net ...

  9. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

最新文章

  1. Android图像开源视图:SmartImageView
  2. ROS探索总结(二)——ROS总体框架
  3. 如何缩短visual studio行号的距离
  4. Core Location :⽤用于地理定位
  5. C#重绘TabControl控件的源码(转)
  6. hdu 3333 Turing Tree 求区间内不同数的和——线段树解法
  7. mysql md5全库比较_关于mysql搭建亿级cmd5数据库,毫秒级查询(完整过程)
  8. 运维监控之——云原生运维监控报警架构(prometheus+grafana+netdata+Thanos+Alertmanager+Consul)
  9. 球员题(查询+添加+排序)
  10. C语言常量 变量与作用域
  11. Origin画图技巧之设置框图默认设置
  12. android开机动画切换
  13. 功率型热敏电阻(NTC)的主要参数及深入介绍
  14. 学习Linux系统清理/var/log/journal/垃圾日志教程
  15. 2020-04-12
  16. HashMap源码阅读笔记
  17. symfony框架Twig模板语言的使用
  18. 用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(1)——硬件平台搭建篇
  19. 观察者模式ApplicationListener异步处理事件
  20. RPA之家转载视频教程2

热门文章

  1. 新增磁盘并把新磁盘虚拟化成逻辑卷,把文件系统/home挂载到这个新逻辑卷
  2. PageSpeed Insights
  3. ios开发常识(1)开发语言和参考资料
  4. hashtable、hashmap、ConcurrentHashMap、treemap的区别
  5. 关于Android 构建
  6. SQL Server 高可用性(三)共享磁盘
  7. IPV6在WINXP、WIN2003、WIN7下的网络配置
  8. 文件目录表(FDT)及其结构
  9. linux进程及作业管理实验,Linux 进程及作业管理(示例代码)
  10. 233网校java_java辅导:使用java模拟登陆考试大