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

header("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/jpegheader("Co ...

  2. css图片在盒子里居中,让图片在div盒子中水平垂直居中

    //调整多张图片,让图片水平垂直居中 function adjustImg(){ let imgDiv = document.getElementsByClassName("img" ...

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

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

  4. python常见面试题:m1={‘a‘:1,‘b‘:2,‘c‘:1} 将同样的value的key集合在list里,输出{1:[‘a‘,‘c‘],2:[‘b‘]}

    字典遍历 我们要对字典里面的内容遍历判断的话,一般会用到items的方法,把字典转化成list of tuple 面试题: m1={'a':1,'b':2,'c':1} # 将同样的value的key ...

  5. ThinkPHP 3 的输出

    一.ThinkPHP 3 的输出 (重点)a.通过 echo 等PHP原生的输出方式在页面中输出b.通过display方法输出想分配变量可以使用assign方法c.修改左右定界符休要修改配置文件中的配 ...

  6. ,CFormView::Create()里,_AfxCheckDialogTemplate输出Cannot find dialog template with IDD 0x00AB

    调用多语言资源DLL之后,CFormView::Create()里,_AfxCheckDialogTemplate输出Cannot find dialog template with IDD 0x00 ...

  7. Pycharm的相关配置:改字体样式和大小、更改图片背景、更改控制台输出的字体颜色

    文章目录 Pycharm的相关配置:改字体样式和大小.更改图片背景.更改控制台输出的字体颜色 一.pycharm更改字体样式和大小 二.pycharm更改图片背景 三.pycharm更改控制台输出的字 ...

  8. php图片输出代码怎么写,将数据以图片的形式输出的PHP代码

    <?php echo " "; echo ""; ?> logo.jpg文件和应该是这样写 去见你想见的人吧.趁阳光正好,趁微风不噪,趁繁花还未开至 ...

  9. 图片上传、后端输出下载图片(微信小程序无师自通四)

    微信小程序图片上传并显示 前端上传: 小汽车保养里程碑微信小程序中,需要上传汽车零件的照片,车辆的照片.小程序使用wx.chooseMedia() 和wx.uploadFile() 函数上传小程序前端 ...

最新文章

  1. Python 3 尴尬了这么久,终于有救了
  2. C 判断 —— if...else 语句(bool变量、float变量、指针变量与“零值”进行比较)(else 到底与哪个 if 配对呢? if 语句后面的分号?)
  3. Android之图片缓存管理
  4. P5322-[BJOI2019]排兵布阵【背包】
  5. Java 代码复用 —— 泛型
  6. python牛顿法寻找极值_python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例...
  7. python椭圆曲线加密_如何理解椭圆曲线加密并对其进行编码
  8. PowerShell加密SQL Server的密码技术
  9. 【资产管理】2020年海外头部资管机构经营特点及启示
  10. 【毕业设计】大数据 电影数据分析与可视化系统 - python Django 大数据 可视化
  11. c语言恶搞小程序自动关机,C语言的自动关机程序及捉弄人的小程序.doc
  12. 配置Tomcat性能优化
  13. 腾讯地图个性化图层创建及发布
  14. Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)
  15. 数据结构之图最短路径
  16. MATLAB导入数据importdata功能
  17. mac下idea选中多个相同内容的快捷键
  18. Mac系统快速切换不同JDK
  19. 洛谷P1346 电车
  20. 为什么腾讯会议导致手机电脑发烫

热门文章

  1. mysql不支持union_Mysql中Union的子句不支持order by
  2. 计算机的三个基本功能,操作系统的三个作用是什么
  3. matlab求系统根轨迹代码_要想正确画出根轨迹,先搞清楚这8大法则再说!
  4. pythonsklearn多元回归回归_用sklearn进行多元线性回归
  5. js input点击事件_Vue.js的旅程,简单的todo实例「602」
  6. win10下安装SQLServer2000
  7. 省掉bean自定义spring mvc注解注入json值
  8. 从测试角度对测试驱动开发的思考【转】
  9. [异常记录] Error: Could not find header file for MYSQL
  10. 第一章 docker 镜像,容器,仓库基本命令(二)