站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

解決ThinkPHP里無(wú)法輸出圖片問(wèn)題(關(guān)于設(shè)置響應(yīng)頭)

下面由thinkphp教程欄目給大家介紹ThinkPHP里無(wú)法輸出圖片,設(shè)置響應(yīng)頭方法,希望對(duì)需要的朋友有所幫助!

解決ThinkPHP里無(wú)法輸出圖片問(wèn)題(關(guān)于設(shè)置響應(yīng)頭)

今天寫(xiě)了一個(gè)PHP生成圖片,想用瀏覽器查看,但是每次打開(kāi)都是一串亂碼,看樣子是圖片源二進(jìn)制數(shù)據(jù),然后查看了下響應(yīng)頭是text/html,那我明明設(shè)置了image/jpeg

header("Content-type", "image/jpeg");

這說(shuō)明TP默認(rèn)設(shè)置了text/html,查了官方文檔,啥也沒(méi)說(shuō),去網(wǎng)上查,才知道TP有個(gè)Response類(lèi),默認(rèn)所有控制器輸出text/html,官方文檔啥也沒(méi)說(shuō),只好自己去翻Response這個(gè)類(lèi)了

ThinkPHP6vendortopthinkframeworksrcthinkResponse.php

解決ThinkPHP里無(wú)法輸出圖片問(wèn)題(關(guān)于設(shè)置響應(yīng)頭)

基類(lèi)Response被這幾個(gè)類(lèi)繼承,我試了下File類(lèi),但是這個(gè)File是輸出文件,瀏覽器直接下載了

$file = new File('123.jpg'); $response = $file->mimeType('image/jpeg');  throw new HttpResponseException($response);

在看看基類(lèi)Response

 /**      * 創(chuàng)建Response對(duì)象      * @access public      * @param  mixed  $data 輸出數(shù)據(jù)      * @param  string $type 輸出類(lèi)型      * @param  int    $code 狀態(tài)碼      * @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]);     }

這里是自動(dòng)找response目錄下的響應(yīng)類(lèi),但我只想設(shè)置一個(gè)響應(yīng)頭來(lái)顯示我的圖片,文檔翻遍了沒(méi)找到方法,然后看了看目錄下的Html類(lèi),那我們可以自己寫(xiě)一個(gè)自定義類(lèi)來(lái)輸出自己想要的響應(yīng)格式

/**  * 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目錄寫(xiě)了一個(gè)Jpeg類(lèi)

/**  * 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官方文檔啥也沒(méi)有寫(xiě),一下子也找不到其他方法,導(dǎo)致我的header()函數(shù)都沒(méi)用了,這里引用ThinkPHP論壇網(wǎng)友的一句話(huà)

框架的定義就是在于更快速、便捷地開(kāi)發(fā)應(yīng)用
如果我使用了某款框架還是需要自己去注意條條款款,然后定義或修正許多形式上的規(guī)范,那還用框架干嘛呢
本末倒置,雞蛋里面挑骨頭

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
人妻少妇精品无码专区漫画| 国产色精品vr一区区三区| 99re在线这里只有精品免费| 亚洲av综合日韩| 精品国产自在现线看| 中文字幕在线亚洲精品| 久久夜色精品国产噜噜噜亚洲AV| 久久精品一区二区影院| 国产精品亚洲综合网站| 99视频全部免费精品全部四虎 | 又紧又大又爽精品一区二区 | 久久精品人人做人人爱爱| 久久久久亚洲精品美女| 精品福利一区二区三区免费视频| 国产精品亚洲成在人线| 国产精品无码永久免费888| 午夜精品久久久久久影视777| 日韩毛片人妻久久蜜桃传媒| 免费观看四虎精品国产永久| 国产成人精品免费视频软件| 精品人妻潮喷久久久又裸又黄| 国产精品麻豆欧美日韩WW| 精品人妻av区乱码| 99re热久久精品这里都是精品| 亚洲AV无码国产精品色午友在线| 久久青青草原精品国产不卡| 日本精品视频在线观看| 亚洲日韩在线观看免费视频| 欧洲精品在线观看| 欧美日韩精品一区二区在线观看| 久久久国产精品四虎| 国产精品视频全国免费观看| 99久久成人国产精品免费 | 无码精品不卡一区二区三区 | 亚洲AV无码乱码精品国产| 日韩av片无码一区二区三区不卡| 国内精品自线在拍2020不卡 | 嫩草影院精品视频在线观看| 精品国产一区二区三区不卡| 久久青青草原精品国产| 99精品在线观看视频|