2013-01-18 66 views
1

我還在等待答案。Nginx:如何查看正在下載狀態的文件?

我需要查看此刻是否有人正在下載特定文件。最初的問題:我想知道什麼時候有人中斷下載文件。

服務器配置:

server 
{ 

    listen 80; 
    server_name mysite.com; 

    location /ugp/ 
    { 
     alias /www/ugp/; 
    } 
    break; 
} 

用戶可以從http://mysite.com/ugp/下載文件,例如http://mysite.com/ugp/1.mp3

UPDATE

很明顯,分析access.log是如何做到的。有些瀏覽器發送206碼,當用戶停止下載(谷歌瀏覽器),有的沒有(HTC播放器,移動應用程序):

85.145.8.243 - - [18/Jan/2013:16:08:41 +0300] "GET /ugp/6.mp3 HTTP/1.1" 200 10292776 "-" "HTC Streaming Player htc_wwe/1.0/htc_ace/2.3.5" 
85.145.8.243 - - [18/Jan/2013:16:08:41 +0300] "GET /ugp/2.mp3 HTTP/1.1" 200 697216 "-" "HTC Streaming Player htc_wwe/1.0/htc_ace/2.3.5" 
85.145.8.243 - - [18/Jan/2013:16:09:44 +0300] "GET /ugp/7.mp3 HTTP/1.1" 200 4587605 "-" "HTC Streaming Player htc_wwe/1.0/htc_ace/2.3.5" 
+0

一個'/ var/log/nginx/mysite-access.log'分析(最後一行'tail - 1文件「)不是你想要的? –

+0

@ ring0如何分析訪問日誌並不明顯。請參閱我的更新。 – sergzach

回答

0

看一看nginx的extended status module

+0

不好意思,我不知道如何使用模塊。我找不到文檔。你能給我參考嗎? – sergzach

1

爲了提供更多的靈活性,你可以添加一個PHP服務器,併發佈網址類似

http://mysite.com/download.php?file=2.mp3 

download.php讀取它的位置(例如/var/www/files/2.mp3)的文件中,有建議的代碼。 (Headers

<?php 

    // Here you know precisely that a download is requested 

    $path = '/home/var/www/files'; 
    $file = "$path/" . $_GET['file']; // check user input! 
    $size = filesize($file); 
    $read = 0; 

    $state = 'downloading ' . $file; 

    // echo headers for a binary file download 

    @ $f = fopen ($file, 'r'); 
    if ($f) { 
    // Output 100 bytes in each iteration 
    while (($chunk = fread($f, 100)) !== false) { 
     // specify somewhere $state, still downloading 
     echo $chunk; 
     $read += strlen($chunk); 
    } 
    fclose ($f); 
    } 
    if ($read >= $size) 
    $state = 'done'; 
    else 
    $state = 'fail'; 
?> 

這是個例提供的算法 - ,在所有測試!但是應該與下載代碼非常接近(通常使用讀取文件,但它讀取文件一次)

+0

這是一個好主意。我來檢查一下。 – sergzach

+0

關於如何在Linux上安裝nginx + php-fpm的文獻很多,例如[this](http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and- mysql-support-lemp-on-ubuntu-12.04-lts),因爲PHP文件需要一個特殊的識別模式並在* nginx *中進行處理。 –

+0

謝謝。我們使用的編程語言並不重要,不是嗎?我瞭解你的PHP代碼。 – sergzach