linux - php處理圖片下載報錯

來源:互聯網
上載者:User
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後面的都無效。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.