程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php下載jpg文件為空解決方法

php下載jpg文件為空解決方法

編輯:關於PHP編程

php教程下載jpg文件為空解決方法

jpg格式的文件,點擊在浏覽器中打開顯示為紅叉

代碼如下:

$filetype = "image/pjpeg";
header("content-type: {$filetype}");
   

header("expires: 0");
header("cache-control: must-revalidate, post-check=0,pre-check=0");
header("pragma: public");

$file_content = file_get_contents($filepath);
echo $file_content;
exit; 

首先排查初始文件是否有問題

1、echo $filepath;

2、根據輸出的文件完整路徑,打開文件,沒有問題

排除原始文件的嫌疑

然後排查在文件讀取過程中是否存在問題

1、$filetype = "application/jpeg";

 header("content-disposition: attachment; filename="{$headername}";");

將文件強制下載

下載下來發現文件大小與原始文件一致,但是打開後還是為空,可以確定在文件輸出的時候出現了問題

 使用file_put_contents("d:aaa.jpg",file_get_contents($filepath)),將文件保存到服務器,保存的文件可以打開

這時我懷疑在文件輸出到客戶端的時候編碼出了問題

經過一段時間的折騰,終於把問題解決,代碼如下:

header("content-type: {$filetype}");
header("expires: 0");
header("cache-control: must-revalidate, post-check=0,pre-check=0");
header("pragma: public");
//此處增加編碼設定
header('content-transfer-encoding: binary');
//此處最重要,目的是要清空輸出的字節
ob_clean();
//此處等於下面被注射的兩行,可節省代碼
readfile($filepath);

//$file_content = file_get_contents($filepath);
//echo $file_content;  
exit; 

此處附ob_clean()的解釋:

clean (erase) the output buffer

我理解ob_clean()等於.net中的response.clear();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved