Pergunta

Estou criando um servidor proxy simples para o meu site. Por que eu não estou usando mod_proxy e mod_cache é uma discussão diferente. Aqui está o código:

    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);

Streaming de um MP3 não funciona usando este método. Desempenha no Chrome, mas não no Firefox. Inicialmente eu vou estar usando isso para transmitir arquivos MP3 através do JW Player da Cauda Longa. Se tudo der certo, eu também vou estar usando isso para enviar arquivos zip.

Foi útil?

Solução 2

Eu percebi isso. O código funciona bem.

O arquivo estava sendo chamado por APACHE pelo manipulador 404 (ErrorDocument). Apache enviado automaticamente o cabeçalho 404 antes do script PHP está sendo chamado.

Este arquivo (código acima), não inicia o processo CURL e redirecionamentos para um arquivo que fluxos. Desde Apache voltou a 404, Firefox ignorou a resposta MP3. (Enquanto que o Chrome não fez). Agora que eu redirecionar, ele funciona bem.

Outras dicas

A questão é se o formato de arquivo pode ser transmitido pela implementação do cliente. Se Firefox não suporta a reprodução de um mp3 até que seja feito a ser transferidos , nenhuma quantidade de malandragem do lado do servidor irá ajudá-lo a alcançar de streaming. Você vai precisar de apoio do lado do cliente, como um jogador em linha baseado em flash.

Para arquivos zip, uma vez que a tabela de codificação é colocado no final do arquivo, nenhum software será capaz de abri-lo até que tenha sido completamente baixado.

Como uma nota lateral, você já pensou em criar um FIFO, apontando curl na entrada FIFO, e aplicando readfile à saída FIFO, deixando assim as coisas punho OS?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top