作者 主題: PHP下載檔案毁損?  (閱讀 6414 次)

0 會員 與 1 訪客 正在閱讀本文。

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
PHP下載檔案毁損?
« 於: 2011-08-17 14:52 »
各位大大,
在用PHP下載test.zip檔案後,檔案的大小都只有1KB,而且下載後也毁損不能打開,請問是那錯了嗎?


代碼: [選擇]
<?php
if(empty($_GET[&#39;path&#39;]) || empty($_GET[&#39;filename&#39;]))
{
   echo &
#39;error path&#39;;
   
exit();
}

if(
file_exists($_GET[&#39;path&#39;]))
{
   
$FILEname urlencode($_GET[&#39;filename&#39;]);

   
if(ini_get(&#39;zlib.output_compression&#39;))
      
ini_set(&#39;zlib.output_compression&#39;, &#39;Off&#39;);

   
header("Content-Type: application/octetstream; name=$FILEname"); //for IE & Opera

   
header("Content-Type: application/octet-stream; name=$FILEname"); //for the rest

   
header("Content-Disposition: attachment; filename=$FILEname;");

   
header("Content-Transfer-Encoding: binary");

header("Content-Type: application/zip");

   
header("Cache-Control: cache, must-revalidate");
   
header("Pragma: public");
   
header("Last-Modified: " gmdate("D, d M Y H:i:s") . "GMT");

   
readfile($_GET[&#39;path&#39;]);
        
echo "success";
}
else
   echo &
#39;file doesnt exist&#39;;
?>

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: PHP下載檔案毁損?
« 回覆 #1 於: 2011-08-17 15:00 »
損毀是指用 zip 相關程式去打開嗎?

用 notepad 把那檔案打開來看看就知道了, 通常是 httpd 傳來的錯誤訊息, 並不是你想傳的那個 "zip" 檔案.

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
Re: PHP下載檔案毁損?
« 回覆 #2 於: 2011-08-17 15:16 »


放到notepad 沒有任何訊息,用壓縮檔解壓會出現錯誤訊息:"這個壓縮檔不是未知的格式就是損壞"
檢查 error log也沒有任何錯誤訊息

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: PHP下載檔案毁損?
« 回覆 #3 於: 2011-08-17 15:24 »
所以 test.zip 是整個空的東西? (那大小應該是 0 吧)

1. 有錯誤沒傳實際的檔案, 那內容應該是錯誤訊息.
2. 沒錯誤的話, 那會是不正常的 .zip 檔案 (後面多了一段你 echo 的文字, 應該會被認為檔案有問題)
3. 不管是上頭那一種, 用 notepad 看那個檔案應該都不會是空白的內容.

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
Re: PHP下載檔案毁損?
« 回覆 #4 於: 2011-08-17 15:38 »
修改了一下,檔案下載的大小是1KB,
用notepad的訊息是success

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: PHP下載檔案毁損?
« 回覆 #5 於: 2011-08-17 16:07 »
path 是 "路徑" 還是 "檔案"? 看起來並不是檔案. 所以沒有內容只有後頭你 echo 的訊息.

PS. 沒看懂我的意思嗎? 如果你要傳檔案, 就不應該在後頭 echo 任何非該檔案內容的訊息. 否則那個檔案就不會是正確的.

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
Re: PHP下載檔案毁損?
« 回覆 #6 於: 2011-08-17 16:14 »

代碼: [選擇]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php download</title>
path 是 "路徑" ,是從這傳過去的,
Download.php

</head>
<?
$filepath = './TestFiles/';
$filename = 'test.zip';
?>
<body>
<a href="get_file.php?path=<?=$filepath?>&filename=<?=urlencode($filename)?>"><?=$filename?></a>
</body>
</html>



把   echo "success";去掉後,下載的檔案size變0KB,還是不能下載原始檔案?


twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: PHP下載檔案毁損?
« 回覆 #7 於: 2011-08-17 16:23 »
你自己看看你的程式, 並沒有任何讀該檔案的動作吧.
那個 readfile() 讀的是路徑吧, 並不是檔案.

沒傳任何內容, 只傳 header, 那自然收到一個 0 大小的檔案不是很正常嗎?

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
Re: PHP下載檔案毁損?
« 回覆 #8 於: 2011-08-17 16:54 »
是的~~原來只是取到路徑,難怪一直是空的...==''


請問在下載完成後,可以取得下載完成時間嗎?因為我想紀錄下載完成所需要的時間?