1 使用者點網站的下載二維碼連結時候, 伺服器擷取產生的二維碼,然後下載到使用者電腦
同樣的代碼測試機沒問題,線上下來圖片打不開,
代碼如下
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(); }
已經基本確定是環境不同導致的。
下載圖片這幾行代碼,對伺服器配置,或安裝的軟體,有什麼要求嗎?
同樣的代碼,在測試機上,下載的圖片是可以開啟的,線上的機器,就打不開了
---------------------分隔線------------------------
經過檢測發現是線上引用的其它類裡面有空白行輸出,(可能是bom頭,也可能是php代碼的閉合符 ?> 後有空行)導致header之前有輸出,圖片打不開,檔案太多,實在是太難找了。
加上以下代碼後,解決。
//清除之前的輸出,確保圖片完整。 ob_start(); ob_end_flush(); ob_end_clean();
回複內容:
1 使用者點網站的下載二維碼連結時候, 伺服器擷取產生的二維碼,然後下載到使用者電腦
同樣的代碼測試機沒問題,線上下來圖片打不開,
代碼如下
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(); }
已經基本確定是環境不同導致的。
下載圖片這幾行代碼,對伺服器配置,或安裝的軟體,有什麼要求嗎?
同樣的代碼,在測試機上,下載的圖片是可以開啟的,線上的機器,就打不開了
---------------------分隔線------------------------
經過檢測發現是線上引用的其它類裡面有空白行輸出,(可能是bom頭,也可能是php代碼的閉合符 ?> 後有空行)導致header之前有輸出,圖片打不開,檔案太多,實在是太難找了。
加上以下代碼後,解決。
//清除之前的輸出,確保圖片完整。 ob_start(); ob_end_flush(); ob_end_clean();
我遇見過這個問題。我覺得錯誤是出在file_get_contents上。你的url是https的, file_get_contents取會卡死的,嘗試用curl代替file_get_contents應該可以解決問題。
(curl中有2個ssl的設定能讓程式正常訪問https,順帶一提, 這個應該都知道)
Header("Accept-Length: ".strlen($tmp)); 不定義這個試試
strlen
當遇見一個0的時候會認為已到達字串結尾,而圖片的中間是可能出現0的,因此只是獲得了圖片的一部分資料,當然打不開了。
比如
$hex='3332310033323131313131313131313131313131313131313131313131313131313131313131313131'//結果是321,即0後面的都無效。