2
我創建了一個腳本,讓用戶下載文件:內容長度上限是2 GB
function file_size($filename)
{
exec('stat -c %s ' . escapeshellarg($filename), $return);
return (float)$return[0];
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($filename));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . file_size($filename));
readfile($filename);
exit;
很簡單。使用file_size
函數可以檢測大於2 GB的文件大小。
問題是Content-length
從來沒有超過2 GB:
< HTTP/1.1 200 OK
< Date: Sun, 21 Aug 2011 09:33:20 GMT
< Server: Apache
< Content-Description: File Transfer
< Content-Disposition: attachment; filename=very-large-file
< Content-Transfer-Encoding: binary
< Expires: 0
< Cache-Control: must-revalidate, post-check=0, pre-check=0
< Pragma: public
< Content-Length: 2147483647
< Content-Type: application/octet-stream
上做'Content-Length: ' . file_size($filename)
回報string(26) "Content-Length: 4689218232"
一個的var_dump。如果我直接訪問該文件沒有一個PHP腳本,沒有任何問題和Apache正在報告正確的文件大小:
< HTTP/1.1 200 OK
< Date: Sun, 21 Aug 2011 09:58:33 GMT
< Server: Apache
< Last-Modified: Thu, 06 Jan 2011 21:56:47 GMT
< ETag: "8ba8f5e0-1177fcab8-49934940b30e5"
< Accept-Ranges: bytes
< Content-Length: 4689218232
但我真的想通過我的PHP腳本提供服務的文件。感謝您的時間。
謝謝你認爲這是行得通的。但是X-Sendfile報告該文件只有375 MB。 – Znarkus
我btw運行Apache 2.2.17和X-Sendfile 0.9-2 ...這是我的問題。需要編譯最新版本,因爲0.11增加了對大文件的支持。 – Znarkus
..這很容易。再次感謝,它現在可行! – Znarkus