Script PHP en IFRAME Bloquea Otro Código

Guión:

Tengo dos scripts PHP para ser llamados simultáneamente:

El primer script se ejecutará durante varios minutos (descarga de archivos basados ​​en PHP), dependiendo del tamaño del archivo descargado. Se coloca en<iframe> por lo que puede ejecutarse por separado y no bloquea el navegador.Se supone que el segundo script PHP se debe llamar en intervalos regulares para monitorear la ejecución del primer script: descarga de progreso del archivo. Para evitar abrir nuevas ventanas al finalizar el script, se llama a través de AJAX.Problema:

He colocado el script PHP de larga duración (script de descarga) en<iframe> por lo que esta secuencia de comandos se puede ejecutar de forma asíncrona con otras secuencias de comandos de supervisión de PHP. Sin embargo, a pesar de que el guión principal está en<iframe>, cuando la página web comienza a ejecutarse, la secuencia de comandos se inicia y bloquea la ejecución del código JavaScript restante y la secuencia de comandos de supervisión llamada varias veces a través de AJAX.

Es importante tener el script de PHP de supervisión de ejecución corta llamado simultáneamente con el script de PHP de descarga prolongada, por lo que la secuencia de comandos de supervisión de corta ejecución puede proporcionar comentarios a JavaScript.

¿Sería usted tan amable y analizaría mis ejemplos de código por favor? No tengo ni idea, ¿dónde está mi problema? Mi código es tan simple, que todo debería estar funcionando bien.

PHP versión 5.4.12Apache / 2.4.4 (Win64) PHP / 5.4.12Windows 7 x648GB de RAMVersión de Google Chrome 30.0.1599.101 mMuestras de código:

Código JavaScript llamando a ambos scripts PHP:

<!DOCTYPE html>
<html>
<head>
    <title>Title of the document</title>
</head>

<body onload="callScripts();">


<script type="text/javascript">

    // call both PHP scripts(download and monitoring) in desired order
    callScripts = function()
    {
        // call the monitoring PHP script multiple times in 2 second intervals
        window.setTimeout(function(){startDownloadMonitoring()}, 1000);
        window.setTimeout(function(){startDownloadMonitoring()}, 3000);
        window.setTimeout(function(){startDownloadMonitoring()}, 5000);
        window.setTimeout(function(){startDownloadMonitoring()}, 7000);
        window.setTimeout(function(){startDownloadMonitoring()}, 9000);
    };


    // call monitoring PHP script via AJAX
    function startDownloadMonitoring()
    {
        console.log("Calling startDownloadMonitoring()...");

        var xmlhttp;

        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                console.log("Response Received: " + xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", "PHP/fileDownloadStatus.php", true);
        xmlhttp.send();
    }
</script>

<iframe src="PHP/fileDownload.php"></iframe>

</body>
</html>

Script de supervisión de PHP (fileDownloadStatus.php)

<?php

include 'ChromePhp.php';

// start session, update session variable, close session
session_start();
$_SESSION['DownloadProgress']++;
ChromePhp::log('$_SESSION[\'DownloadProgress\'] = ' . $_SESSION['DownloadProgress']);
session_write_close();    

echo "success";
?>

Script PHP de larga ejecución (fileDownload.php)

<?php
include 'ChromePhp.php';

// disable script expiry
set_time_limit(0);    

// start session if session is not already started
session_start();

// prepare session variables
$_SESSION['DownloadProgress'] = 10;

session_write_close();

for( $count = 0; $count < 60; $count++)
{
    sleep(1);

    print("fileDownload Script was called: ". $count);

    echo "Download script: " . $count;
    ob_flush();
    flush();
}
?>
Captura de pantalla:

Orden de ejecución de scripts PHP: el navegador espera para finalizar el script en<iframe>

Respuestas a la pregunta(1)

Su respuesta a la pregunta