Desde que cambiamos un proyecto de PHP 5 a 7.4, está sucediendo algo extraño, aunque dudo que sea algo de PHP, pero escúchame primero.
El proyecto HTML/PHP utiliza la clase Zend_ProgressBar_Adapter_JsPush de Zend Framework.
Hay un botón HTML en la pantalla. Una vez que se hace clic, se ejecuta un script PHP en segundo plano y se llama al método de update de la clase Zend_ProgressBar . Después de cada paso que hace/finaliza el script PHP, el valor aumenta en +20, hasta llegar a 100.
También hay una tabla HTML. La segunda columna muestra un ícono de carga antes de que ingresen los resultados de cada paso. Hay 5 filas en esa tabla, por lo que una fila para cada paso.
Ahora, esta es la situación: durante los tiempos de PHP5 cuando se ejecutaba el script PHP, el usuario podía ver qué paso había alcanzado/finalizado el script PHP hasta el momento, pero ahora con PHP7.4 en uso, TODOS los campos se actualizan una vez que PHP el guión está terminado. Se muestran correctamente, pero el problema es que ya no refresca paso a paso.
Es como si todo se pusiera en cola en segundo plano o algo así, y JavaScript no tiene la oportunidad de actualizar ningún campo "en vivo", por lo que lo hace al final del script PHP.
No tengo idea de cuál es la razón. Incluso intenté agregar sleep(5) entre estos pasos y vi que funcionaba. Pero, ¿por qué dejar que el usuario espere 5 veces 5 segundos si podría haber una mejor solución?
Aquí está la (versión ligera) del código PHP:
$adapter = new Zend_ProgressBar_Adapter_JsPush(); $adapter->setUpdateMethodName('Zend_ProgressBar_Update'); $adapter->setFinishMethodName('Zend_ProgressBar_Finish'); $progress = new Zend_ProgressBar($adapter, 0, 100); $result = ""; $progress->update(0, $result); // Do something... $progress->update(20, $result); // [...] $progress->update(100, $result);Métodos JavaScript:
function Zend_ProgressBar_Update(data) { switch (data.current) { case 0: /* Reset progress table */ /* [...] */ break; case 20: /* Fill first row column of table with data.text */ /* [...] */ break; /* [...] */ case 100: /* Fill final row column of table with data.text */ /* [...] */ break; default: //alert('default'); break; } function Zend_ProgressBar_Finish() { alert('Finished'); }