Encabezado “Transfer-Encoding: chunked” en PHP

Quiero agregar Transfer-Encoding: chunked encabezado Transfer-Encoding: chunked al archivo que estoy imprimiendo (se acaba de generar texto sin formato), pero cuando agrego:

 header("Transfer-Encoding: chunked"); flush(); 

el navegador no quiere abrir el archivo.

La página web en … podría estar temporalmente fuera de servicio o puede haberse movido permanentemente a una nueva dirección web.

¿Qué tengo que hacer para que funcione?

Debe enviar la Content-Length del Content-Length con cada fragmento que envíe. Mire la Wikipedia para una primera impresión, cómo es una encoding fragmentada. No es tan trivial y en muchos casos es demasiado grande.

Actualización: primero envía los encabezados, porque siempre deben enviarse antes de cualquier contenido (también con encoding fragmentada). Luego, envía (por cada porción) el tamaño (en hexadecimal) seguido del contenido. Recuerde flush() después de cada fragmento. Por último, debe enviar un fragmento de tamaño cero para asegurarse de que la conexión se cierra correctamente.

No está probado, pero algo como esto

 header("Transfer-Encoding: chunked"); echo "5\r\n"; echo "Hello"; echo "\r\n\r\n"; flush(); echo "5\r\n"; echo "World"; echo "\r\n"; flush(); echo "0\r\n\r\n"; flush(); 

Como los miembros anteriores dijeron, debes seguir el formato de encoding de transferencia fragmentada.
En el siguiente ejemplo, mostraré cómo puede usar una función de usuario para seguir las reglas de formato:

 Transfer-Encoding: chunked"; echo "
"; //current output buffer will shown immediately in browser //after this function flush_data(); //cycle wait 1 sec before next iteration for($i=0;$i<5;$i++) { //print iteration number echo "$i
"; flush_data(); sleep(1); } echo "
".RN; //terminating part of encoding format flush_data(); echo "0\r\n\r\n"; ob_flush(); ?>

Notas :

  1. Compruebe si «implicit_flush» está activado en su php.ini
  2. Sepa si sobrepasa el buffer de salida («output_buffering» en php.ini ) se vaciará automáticamente.

Para mí, cuando estaba intentando algo con “Transfer-Encoding: chunked” tuve que usar este código para que funcione:

  

Este código seguirá teniendo el encabezado “Transfer-Encoding: chunked”.

Establece automáticamente el encabezado Transfer-Encoding cuando usa flush, pero cuando lo configura manualmente falla, por lo que para evitar cualquier problema intente eliminarlo. También asegúrese de quitar el encabezado en la línea antes de hacer su primer descarga para evitar errores.

Use ob_flush(); antes de flush();

Código de muestra: