2想法(未驗證):
第一:
而是將常規文件的鏈接(要下載)在你的網頁鏈接的地方像.../dowanload.php的這可能看起來像這樣:
<?php
// download.php file
session_start(); // if needed
$filename = $_GET['filename']);
header('Content-type: text/plain'); // use any MIME you want here
header('Content-Disposition: attachment; filename="' . htmlspecialchars($filename) . '"');
header('Pragma: no-cache');
// of course add some error handling
$filename = 'c:/php/php.ini';
$handle = fopen($filename, 'rb');
// do not use file_get_contents as you've said files are up to 4GB - so read in chunks
while($chunk = fread($handle, 1000)) // chunk size may depend on your filesize
{
echo $chunk;
flush();
// write progress info to the DB, or session variable in order to update progress bar
}
fclose($handle);
?>
這樣你可以留意你的下載過程。與此同時,您可以將進度信息寫入DB/session var,並使用AJAX從DB/session var更新進度條閱讀狀態,當然這些AJAX會輪詢讀取進度信息的腳本。
這是非常簡單的,但我認爲它可能會工作,只要你想。
二:
的Apache 2.4具有內置的Lua語言:
我敢打賭,你可以嘗試寫LUA Apache的處理程序,將監視你的下載 - 發送進度到數據庫和更新進度條使用PHP/AJAX採取公關從數據庫中獲取信息。
同樣 - 存在用於perl模塊和甚至蟒(但不爲贏)
可以在PHP中使用捲曲。 http://stackoverflow.com/questions/13958303/curl-download-progress-in-php –
你是否有能力從你的服務器流式傳輸文件 - 或者你正在下載單個文件嗎? –
@ webbod,許多文件將從服務器上下載。換句話說,文件下載和上傳將是服務器的主要功能。由於我在控制服務器,我可以決定任何形式的文件下載。我試圖通過PHP進行下載,但是這對文件大小和下載的文件數量造成了限制。因此我嘗試了X-SendFile,它看起來不錯。但是,如果流媒體是要走的路,我很樂意僞造X-SendFile –