2011-03-21 71 views
5

這是奇怪PHP讀取文件返回零長度文件

我有一個腳本通過瀏覽器向用戶發送本地zip文件。該腳本目前工作良好,沒有任何問題。今天,我的同事通知我有關腳本正在發送零長度文件。

一些背景資料:

  • 服務器設置的腳本錯在哪裏之前沒有被修改
  • 不同的瀏覽器測試(同樣在Chrome/Firefox瀏覽器)
  • 上一個zip文件(這之前工作得很好)是零長度也
  • 腳本開創服務器
  • 文件大小(呼應調試時)上的文件是正確的
  • 試圖調整服務器設置和腳本adviced here沒有成功。

更新:

  • is_readable()返回1個
  • 文件大小可以爲5Mb和100Mb的(非特定的)之間變化
  • $zip_file保持的文件路徑
  • $zip_name保持拉鍊名
  • 文件實際上是零長度(在text-edi中打開TOR它不包含一個單字節)
  • error_reportingOnE_ALL)顯示什麼
  • 沒有報頭中的瀏覽器顯示的zip '源' 正確
  • Safari的說:「0字節的?不能解碼原始數據'第一個有用的症狀

片段的問號(?):

if (file_exists($zip_file)) { 
    header('Content-type: application/zip'); 
    header('Content-disposition: filename="' . $zip_name . '"'); 
    header("Content-length: " . filesize($zip_file)); 
    readfile($zip_file); 
    exit(); 
} 

我怎麼能輕鬆地調試這個?

由於提前,FABRIK

+0

愚蠢的問題:是否該文件存在 – 2011-03-21 08:08:13

+3

您可能需要使用'is_readable()',而不是'file_exists()'is_readable檢查文件是否存在,是否可讀 – JohnP 2011-03-21 08:09:50

+0

他們是零長度,或?。非常小的長度?在後一種情況下,它們可能包含一個PHP錯誤消息。只需獲取文件並用文本編輯器打開它 – Unicron 2011-03-21 08:09:56

回答

0

我的。瘸。故障。對不起。

只是調整了代碼,一個星期前,並補充說:

if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) { 
    ob_start('ob_gzhandler'); 
} else { 
    ob_start(); 
} 

是什麼原因造成這種不正常現象。 :(

+2

你做了什麼來解決它?你剛剛刪除ob_gzhandler回調? – acme 2013-03-07 11:37:39

5

http://www.php.net/manual/en/function.readfile.php#102137

應該指出的是,在例如:

header('Content-Length: ' . filesize($file));

$文件確實應該對文件的完整路徑。否則內容長度不會總是被設置,通常會導致可怕的「0字節文件」問題。

+0

感謝您的提示,但如果我回顯文件大小,它給了我正確的價值 – fabrik 2011-03-21 08:21:19

+0

並不重要,當瀏覽器開始接收文件的唯一方法f9or它知道全尺寸是通過頭文件 – RobertPitt 2011-03-21 08:25:58

+0

@Robert我的意思是回顯調試 – fabrik 2011-03-21 08:40:50

1

在這裏,我覺得最大的問題是你發送文件的方式,你嘗試塊內發送的:

if (file_exists($zip_file)) 
{ 
    header('Content-type: application/zip'); 
    header('Content-disposition: filename="' . $zip_name . '"'); 
    header("Content-length: " . filesize($zip_file)); 

    $resource = fopen($zip_file,'r'); 
    while(!feof($resource)) 
    { 
     $chunk = fread($resource,4096); 
     //.... 
     echo $chunk; 
    } 

    exit(); 
} 
+0

感謝提示,但它對我沒有任何幫助。順便說一下,當一切都會好起來,我會實施你的解決方案。+1 – fabrik 2011-03-21 08:33:16

0

嘗試添加attachment;並使用不同的瀏覽器。

header('Content-disposition: attachment; filename="' . $zip_name . '"'); 
+0

它並沒有幫助:( – fabrik 2011-03-21 09:16:14

+0

所以,試試它只包含幾個字符的簡單文件... – powtac 2011-03-21 10:08:56

+0

看看我自己的答案。完全是我的錯,對不起。http://stackoverflow.com/questions/5375143/php-readfile-returns-zero-length-file/5375762#5375762 – fabrik 2011-03-21 10:10:50