Ein kleines Beispiel wie man mit Ajax asynchron eine PHP-Datei starten kann und das Resultat aus einem Textfile im Sekundenintervall ausliest.
Die ausführende Datei. Diese schreibt alle 2 Sekunden ein Eintrag in ein txt-File. Will man, dass das log überschriben wird, so kann man in der Funktion file_put_contents überall den Parameter FILE_APPEND durch FILE_EX ersetzen
<?php define(C_FILE, 'stream.txt'); file_put_contents(C_FILE, "start\n", FILE_TEXT | LOCK_EX ); //10 mal jede 2te Sekunde ein Eintrag schreiben for($i=0; $i<10; $i++){ file_put_contents(C_FILE, '['.date('G:i:s')."] Eintrag #{$i}\n", FILE_APPEND | FILE_TEXT ); //Eine Sekunde lang schlafen sleep(2); } file_put_contents(C_FILE, "end", FILE_APPEND | FILE_TEXT ); ?>
Der Reader, der die Datei ausliest
<?php define(C_FILE, 'stream.txt'); echo nl2br(file_get_contents(C_FILE)); ?>
Und zuguter letzt die HTML-Seite, die nach dem Drücken des Knops das exec.php startet und im Sekundenintervall den streamReader.php ausliest
<html> <head> <script language="JavaScript"> //timer der das Log neu ladet var time = 1; //time in seconds var interval = time * 1000; var timer = setInterval("getLog('outputText');", interval); //Get the HTTP Object function getHTTPObject(){ if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP"); else if (window.XMLHttpRequest) return new XMLHttpRequest(); else { alert("Your browser does not support AJAX."); return null; } } // Change the value of the outputText field function setOutput(){ if(httpObject.readyState == 4){ document.getElementById(tagId).innerHTML = httpObject.responseText; } } function startProg(){ httpObject = getHTTPObject(); if (httpObject != null) { //php-Datei auf dem Server aufrufen httpObject.open("GET", "exec.php", true); httpObject.send(null); } } // Implement business logic function getLog(inTagId){ httpObject = getHTTPObject(); tagId = inTagId; if (httpObject != null) { //php-Datei auf dem Server aufrufen httpObject.open("GET", "streamReader.php", true); httpObject.send(null); httpObject.onreadystatechange = setOutput; } } var httpObject = null; </script> </head> <body> <!-- hier wird die Scriptdatei eingebunden --> <div id="error"> </div> <form name="testForm"> <input type="button" onclick="startProg();" value="start"/> <br /> <div id="outputText"></div> </form> </body> </html>