1

Web サイト用の単純なプロキシ サーバーを作成しています。mod_proxy と mod_cache を使用しない理由は別の議論です。コードは次のとおりです。

    shell_exec("nohup curl --create-dirs -o {$write_path} {$source_url} > /dev/null 2> /dev/null & echo $!");
    sleep(1);

    $read_speed = 65.5; # 65.5 kb/s download rate
    $handle = fopen($write_path, "rb");

    $content_type = select_meta_item($headers, 'Content-Type');
    $file_size = select_meta_item($headers, 'Content-Length');
    send_headers($content_type, $file_size); 
    flush();

    while (!feof($handle))
    {
        echo fread($handle, round($read_speed * 1024));
        flush();
        sleep(1);
    }

    fclose($handle);

この方法では、MP3 のストリーミングは機能しません。Chrome では再生されますが、Firefox では再生されません。最初はこれを使用して、Long Tail の JW Player を介して MP3 ファイルをストリーミングします。うまくいけば、これを使って ZIP ファイルを送信することもできます。

4

2 に答える 2

0

問題は、クライアントの実装によってファイル形式をストリーミングできるかどうかです。Firefox がダウンロードが完了するまで mp3 の再生をサポートしていない場合、ストリーミングを実現するのにサーバー側のトリックはいくらでも役立ちます。Flash ベースのインライン プレーヤーなど、クライアント側のサポートが必要になります。

ZIP ファイルの場合、エンコーディング テーブルがアーカイブの最後に配置されているため、ダウンロードが完了するまでソフトウェアでファイルを開くことはできません。

補足として、FIFO を作成し、FIFO 入力を指し、FIFO 出力にcurl適用readfileして、OS に処理させることを検討しましたか?

于 2010-01-09T22:28:06.460 に答える
0

私はそれを考え出した。コードは正常に動作します。

ファイルは、404 ハンドラー (ErrorDocument) によって APACHE によって呼び出されていました。Apache は、PHP スクリプトが呼び出される前に 404 ヘッダーを自動的に送信しました。

このファイル (上記のコード) は、CURL プロセスを開始せず、ストリーミングするファイルにリダイレクトします。Apache が 404 を返したため、Firefox は MP3 応答を無視しました。(一方、Chromeはそうではありませんでした)。リダイレクトしたので、正常に動作します。

于 2010-01-10T05:54:15.313 に答える