日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/15 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php输出图片没有,ThinkPHP里无法输出图片 设置响应头 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天寫了一個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里无法输出图片 设置响应头的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。