2009-10-02 11 views
6

PHPでは、クライアントに送信されたバイト数を取得できますか?たとえば、10 MBのファイルを出力している場合、10 MBがすべてクライアントに送信されたかどうかを調べたり、クライアントが途中で転送を中断したかどうかを調べる方法はありますか?私はApacheがこれを後でログに記録することを知っていますが、私はPHPでデータにアクセスしたいと思います。PHP - HTTP経由で送信されたバイト数を確認する

+0

あなたがそのようなプログレスバーか何かを作りたいですか? – Natrium

+0

ファイルを完全にダウンロードしたものとしてマークし、リストから削除したかっただけです。問題はfile_get_contents()でしたが、ユーザーの中断をキャッチしません。 fread()を使ってループスルーすれば、それをキャッチして、ftell()を使っておおよそのバイト数を知ることができます。 (私が自分でそれを理解し終わったときに質問を投稿して申し訳ありません) – Jay

答えて

11

は、ここで私は(おかげでガンボを)やってしまったものです:

ignore_user_abort(true); 

$handle = fopen($file_path, 'r'); 
while (! feof($handle)) { 
    echo fread($handle, 4096); 
    if (connection_aborted()) { 
     $transfer_success = false; 
     $bytes_transferred = ftell($handle); 
     break; 
    } 
} 
fclose($handle); 
+0

これはあなたのやっている方法ですか? – Brad

+0

十分にうまくいく。どうして? – Jay

+0

データ転送量でAPIリクエストのダウンロードを制限したいと考えています。コードをありがとう。 – Brad

関連する問題