2015-05-15 26 views
1

我有這樣的代碼,PNG文件輸出到瀏覽器PHP:PNG ReadFile的編碼問題

header('Content-type: image/png'); 
header("Content-Length: " . filesize($cache_file)); 
readfile($cache_file); 
exit(); 

文件$cache_file保存這樣

imagepng(self::$image, self::$cache); 

的瀏覽器顯示一個破碎的形象。當我下載它並用npp打開它時,我發現它的編碼爲UTF-8,所以我將封裝改爲ANSI,並且它在Windows資源管理器上正確顯示

什麼可能導致此編碼問題?如何在保存或讀取文件時修復它?

編輯:當我直接打開PNG上的瀏覽器,它會顯示正確,這意味着該問題是在readfile 水平ocurring這不是我的服務器,所以我應該檢查哪些服務器設置/修改?

解決方案: 我以前imagepng輸出圖像內容

public static function outputPNG($file) 
{ 
    //clear any previous buffer 
    ob_clean(); 
    ob_end_clean(); 
    header('Content-type: image/png'); 
    //i will be only outputting PNG images 
    $im = imagecreatefrompng($file); 
    imagesavealpha($im, true); 
    imagealphablending($im, true); 
    imagepng($im); 
    exit(); 
} 
+0

一個PNG不應該(重新)編碼,而不是作爲UTF8而不是ANSI。兩者都是文本編碼,而PNG文件是二進制文件。 – usr2564301

+0

這實際上是一個問題,因爲readfile似乎是在引用內容!有沒有解決方案來避免這種情況?該項目已部署在其他幾臺服務器上,但這是問題的第一次發生 – UnLoCo

+1

您是否嘗試過設置header('Content-Transfer-Encoding:binary');'和header('Content-Description:File Transfer') ;'? – VolenD

回答

1

您可以嘗試添加到您迴應一些額外的頭:

header('Content-Transfer-Encoding: binary'); 
header('Content-Description: File Transfer');