Streaming de archivos local de PHP, mientras que se ha escrito a través de un proceso CURL

StackOverflow https://stackoverflow.com/questions/2034831

Pregunta

Estoy creando un servidor proxy simple para mi página web. ¿Por qué no estoy usando mod_proxy y mod_cache es una discusión diferente. Aquí está el 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 un MP3 no funciona con este método. Juega en Chrome, pero no en Firefox. Inicialmente voy a utilizar este para transmitir archivos MP3 a través JW jugador largo de la cola. Si todo funciona, yo también voy a utilizar esto para enviar archivos ZIP.

¿Fue útil?

Solución 2

lo he descubierto. El código funciona bien.

El archivo estaba siendo llamado por APACHE por el manejador 404 (ErrorDocument). Apache envía automáticamente el 404 de cabecera antes de la secuencia de comandos PHP que se llama.

Este archivo (código de seguridad), no se inicia el proceso de curvatura y redirige a un archivo que transmite. Dado que Apache devuelve el 404, Firefox ignora la respuesta MP3. (Mientras que Chrome no). Ahora que vuelvo a dirigir, trabaja muy bien.

Otros consejos

La pregunta es si el formato de archivo se puede transmitir por la aplicación cliente. Si Firefox no permite reproducir un mp3 hasta que se realiza la descarga , ninguna cantidad de trampas del lado del servidor le ayudará a lograr streaming. Necesitará el lado del cliente, como un reproductor en línea basado en flash.

Para los archivos ZIP, teniendo en cuenta que la tabla de codificación se coloca en el final del archivo, sin necesidad de software será capaz de abrirlo hasta que se haya descargado completamente.

Como nota al margen, ¿ha considerado la creación de un FIFO, señalando curl en la entrada FIFO, y aplicando readfile a la FIFO de salida, dejando de este modo las cosas mango OS?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top