1

我正在为我的网站创建一个简单的代理服务器。为什么我不使用 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,指向curlFIFO 输入,并应用于readfileFIFO 输出,从而让操作系统处理事情?

于 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 回答