Puede ser una pregunta tonta, pero no puedo entender fácilmente por qué se comporta así.
Tengo dos funciones de llamada ajax,
execCommand() : para ejecutar el comando de shell a través de php
shell_exec('ping 127.0.0.1 > ../var/log/tmp.log');
getLog() : para recopilar registros de execCommand() [../var/log/tmp.log] y mostrarlos al usuario [lectura en vivo]
echo file_get_contents(../var/log/tmp.log);
Este es el script jquery ajax
$("#docker_install_fek").on("click",function(){ $('#progress-window').show(); getLog(); execCommand(); }); function execCommand(){ $.ajax({ url: '<?php echo $block->getUrl('meta/reports/ajax',[]);?>', type: 'POST', data:{ip:$("#ip").val()}, success: function(data) { alert(data); }, error: function() { alert("fail"); } }); } function getLog() { $.ajax({ type: "GET", url: "<?php echo $block->getUrl('meta/reports/progress',[]);?>", dataType: "text", success: function (data) { $("#progress-window").empty(); $("#progress-window").append("<pre>"+data+"</pre>"); $("#progress-window").scrollTop(1E10); setTimeout(getLog, 3000); }, headers: { "Range" : "bytes=-500" } }); }Me doy cuenta en la pestaña de red de firebug, ambas llamadas ajax se están cargando pero nunca muestran el registro hasta que execCommand() finaliza la ejecución.
No sé cuál es la razón principal, pruebo como ejecutar ping 127.0.0.1 > ../var/log/tmp.log desde la terminal y luego comentar execCommand() ahora getLog() archivo de registro de actualización de la función cada 3 segundos.
Estás usando sesiones. En el lado del servidor, las sesiones están bloqueadas, por lo que solo puede tener los archivos de sesión abiertos por un script a la vez.
Si tiene secuencias de comandos del lado del servidor que no deberían bloquear, entonces no use session_start() en ellas, o asegúrese de cerrar la sesión con session_write_close() tan pronto como pueda, para permitir que se ejecuten otras secuencias de comandos.