User Tools

Site Tools


php:kompost:ajaxstreamer

[PHP] Ajax File Streamer

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

exec.php
<?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

streamReader.php
<?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

streamAjax.html
<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>
php/kompost/ajaxstreamer.txt · Last modified: 11.12.2013 10:37:30 (external edit)