1 用戶點網站的下載二維碼連結時候, 伺服器取得微信產生的二維碼,然後下載到用戶電腦
同樣的代碼測試機沒問題,線上下來圖片打不開,
代碼如下
<code> public function download(){ $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxx"; $tmp = file_get_contents($url); $file_name = "weixin.jpg"; // 输入文件标签 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".strlen($tmp)); Header("Content-Disposition: attachment; filename=" . $file_name); // 输出文件内容 echo $tmp; exit(); }</code>
已經基本確定是環境不同所導致的。
下載圖片這幾行程式碼,對伺服器配置,或安裝的軟體,有什麼要求嗎?
同樣的程式碼,在測試機上,下載的圖片是可以打開的,線上的機器,就打不開了
---------------------分隔線------------------------
經過偵測發現是線上引用的其它類別裡面有空白行輸出,(可能是bom頭,也可能是php程式碼的閉合符?> 後有空行)導致header之前有輸出,圖片打不開,檔案太多,實在是太難找了。
加上以下程式碼後,解決。
<code>//清除之前的输出,确保图片完整。 ob_start(); ob_end_flush(); ob_end_clean();</code>
1 用戶點網站的下載二維碼連結時候, 伺服器取得微信產生的二維碼,然後下載到用戶電腦
同樣的代碼測試機沒問題,線上下來圖片打不開,
代碼如下
<code> public function download(){ $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=xxxxxxxxxx"; $tmp = file_get_contents($url); $file_name = "weixin.jpg"; // 输入文件标签 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".strlen($tmp)); Header("Content-Disposition: attachment; filename=" . $file_name); // 输出文件内容 echo $tmp; exit(); }</code>
已經基本確定是環境不同所導致的。
下載圖片這幾行程式碼,對伺服器配置,或安裝的軟體,有什麼要求嗎?
同樣的程式碼,在測試機上,下載的圖片是可以打開的,線上的機器,就打不開了
---------------------分隔線------------------------
經過偵測發現是線上引用的其它類別裡面有空白行輸出,(可能是bom頭,也可能是php程式碼的閉合符?> 後有空行)導致header之前有輸出,圖片打不開,檔案太多,實在是太難找了。
加上以下程式碼後,解決。
<code>//清除之前的输出,确保图片完整。 ob_start(); ob_end_flush(); ob_end_clean();</code>
我遇見過這個問題。我覺得錯誤是出在file_get_contents
。你的url是https的,file_get_contents
取會卡死的,試著用curl取代file_get_contents
應該可以解決問題。
(curl中有2個ssl的設定能讓程式正常存取https,順帶一提, 這個應該都知道)
<code> Header("Accept-Length: ".strlen($tmp)); 不定义这个试试</code>
strlen
當遇見一個0
的時候會認為已到達字符串結尾,而圖片的中間是可能出現0
的,因此只是獲得了圖片的一部分數據,當然打不開了。
例如
<code>$hex='3332310033323131313131313131313131313131313131313131313131313131313131313131313131' //结果是321,即0后面的都无效。</code>