1

私はまだ答えを待っています。

この時点で誰かが特定のファイルをダウンロードしているかどうかを確認する必要があります。最初の問題: 誰かがファイルのダウンロードを中断したときを知りたいです。

サーバー構成:

server 
{

    listen 80;
    server_name mysite.com;

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

ユーザーはhttp://mysite.com/ugp/からファイルをダウンロードできます(例: http://mysite.com/ugp/1.mp3 ) 。

更新します。

access.logを分析する方法はそれほど明白ではありません。一部のブラウザーは、ユーザーがダウンロードを停止したときに 206 コードを送信します (Google Chrome) 一部のブラウザーは送信しません (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"
4

2 に答える 2

1

柔軟性を高めるために、PHP サーバーを追加して、次のような URL を公開できます。

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

は、download.phpその場所 (例: ) からファイルを読み取り、/var/www/files/2.mp3推奨されるコードを示します。(ヘッダー)

<?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';
?>

これはアルゴリズムを提供するための例です -まったくテストされていません! しかし、ダウンロードコードからかなり近いはずです(通常はreadfileが使用されますが、ファイルを一発で読み取ります)

于 2013-01-18T13:51:08.330 に答える
0

nginx extended status moduleを見てください。

于 2013-01-18T13:07:08.187 に答える