PHP Script in "RealTime"?

Nycoon

Grünschnabel
Hi@All

Ich wusste nicht zu 100% wie ich es nennen solte, daher beschreibe ich es euch kurz. Ich habe einen PortScanner zur Überwachung von Diensten geschrieben. Dieser scannt Ports. Ist es Möglich nach der ersten If Abfrage schon ein Ergebnis in RealTime auszugeben? D.h. wenn er Port 80 zB gescannt hat "ok", dann 21 "ok".

Hoffe ihr wisst ungefair was ich meine :D

Gruss Rene
 
Hehe, ich hab auch kein Plan wie ich dies erklären sollte :D Cronjob ist gesetzt für das File ;) Dies meinte ich net. Mal nen direktes Bsp:

Code:
$http = @fsockopen($server["ip"], 80,$errno,$errstr,2);
	if($http) {
		mysql_query("UPDATE `sms_server` SET `http` = '".$online."' WHERE id = '".$server["id"]."'");
	fclose($http); 
	} else {
		mysql_query("UPDATE `sms_server` SET `http` = '".$offline."' WHERE id = '".$server["id"]."'");
	}
	$ftp = @fsockopen($server["ip"], 21,$errno,$errstr,2);
	if($ftp) {
		mysql_query("UPDATE `sms_server` SET `ftp` = '".$online."' WHERE id = '".$server["id"]."'");
	fclose($ftp); 
	} else {
		mysql_query("UPDATE `sms_server` SET `ftp` = '".$offline."' WHERE id = '".$server["id"]."'");
	}
      usw....

Das File auszuführen, dauert natürlich seine Zeit, vor allem wenn mehrere server eingetragen sind. Daher die Frage, ob es möglich ist ein "RealTime" Echo zu setzen. zB. Er braucht 50sek zum ausführen, gibt aber nacheinander wärend des ausführens schon ein Ergebnis wieder, zB nach 5Sek "http Ok" oder ähnliches.

Hui ist das nen Thema :D

Gruss Rene
 
Nycoon hat gesagt.:
Ich habe einen PortScanner zur Überwachung von Diensten geschrieben. Dieser scannt Ports.
Wer haette das bloss gedacht? ;)
Nycoon hat gesagt.:
Ist es Möglich nach der ersten If Abfrage schon ein Ergebnis in RealTime auszugeben? D.h. wenn er Port 80 zB gescannt hat "ok", dann 21 "ok".

Hoffe ihr wisst ungefair was ich meine :D

Gruss Rene
Das Stichwort Output Control (Ausgabesteuerung) ist ja bereits gefallen.
Falls der Output Buffer nicht aktiv ist (also nicht per ob_start() oder in der php.ini aktiviert wurde) sollte ein simples flush() nach der Ausgabe reichen. Ansonsten wirst Du vor flush() auch noch ob_flush() ausfuehren muessen.

Weiterhin muss ich sagen, dass ich Deinen Code irgendwie umstaendlich finde. Musst Du die Daten wirklich in einer DB speichern? Ist ja bei einem Port-Scanner eigentlich nicht ueblich.
Vor einer ganzen Weile hab ich hier auch mal einen Port-Scanner abgeladen, kannst ja mal reinschauen.
 
Dennis Wronka hat gesagt.:
Weiterhin muss ich sagen, dass ich Deinen Code irgendwie umstaendlich finde.
Sehe ich genauso, das ist ja eine Menge Tipparbeit.

Ein Beipiel, was die Sache vereinfacht:
PHP:
$ports = array (
    "http" => 80,
    "ftp" => 21
    //...
    );
foreach($ports as $type => $port) {
    $con = @fsockopen($server["ip"], $port, $errno, $errstr, 2);
    if($con) {
        mysql_query("UPDATE `sms_server` SET `".$type."` = '".$online."' WHERE id = '".$server["id"]."'");
        fclose($http); 
    } else {
        mysql_query("UPDATE `sms_server` SET `".$type"` = '".$offline."' WHERE id = '".$server["id"]."'");
    }
}
Noch eleganter wäre womoglich die Zuordnung der Ports in der Datenbank und die Speicherung, ob offen oder nicht in einer Verknüpfung mit Attribut. Dann müsstest Du nicht an die Datenbankstruktur, wenn ein Port hinzu kommt.

Gruß hpvw
 
Die Aktivierung des Ausgabepuffers ist doch gerade das Gegenteil von dem was Nycoon möchte. Denn eine Ausgabe würde erst erfolgen, wenn die Daten aus dem Ausgabepuffer explizit ausgegeben würden – oder sollte etwa jedes „Ok“ gepuffert werden?
Gab es nicht schon vor langer Zeit eine Diskussion, in der festgestellt wurde, dass jeder Browser die Ausgabedaten unterschiedliche behandelt? Dass etwa der eine Teil auch die per flush() ausgegebenen Datenfetzen darstellt wärend der andere auf die vollständige Übertragung des kompletten Dokuments warten?
 
Gumbo hat gesagt.:
Die Aktivierung des Ausgabepuffers ist doch gerade das Gegenteil von dem was Nycoon möchte. Denn eine Ausgabe würde erst erfolgen, wenn die Daten aus dem Ausgabepuffer explizit ausgegeben würden – oder sollte etwa jedes „Ok“ gepuffert werden?
Darum schreib ich ja:
Dennis Wronka hat gesagt.:
Falls der Output Buffer nicht aktiv ist (also nicht per ob_start() oder in der php.ini aktiviert wurde) sollte ein simples flush() nach der Ausgabe reichen. Ansonsten wirst Du vor flush() auch noch ob_flush() ausfuehren muessen.
Das Output Buffering kann ja auch per php.ini aktiviert werden, und das wuerde dann wohl ein ob_flush() notwendig machen.

Gumbo hat gesagt.:
Gab es nicht schon vor langer Zeit eine Diskussion, in der festgestellt wurde, dass jeder Browser die Ausgabedaten unterschiedliche behandelt? Dass etwa der eine Teil auch die per flush() ausgegebenen Datenfetzen darstellt wärend der andere auf die vollständige Übertragung des kompletten Dokuments warten?
Ja, die gab es. Und es wurde, wie Du richtig sagst, festgestellt, dass es Browser gibt die auf die fertige Seite warten und andere gleich anfangen auszugeben.
 
Huhu @ All,
Zitat:
Zitat von Nycoon
Ich habe einen PortScanner zur Überwachung von Diensten geschrieben. Dieser scannt Ports.
Wer haette das bloss gedacht?
Hehe, Seh ich auch grad ^^

Das Stichwort Output Control (Ausgabesteuerung) ist ja bereits gefallen.
Falls der Output Buffer nicht aktiv ist (also nicht per ob_start() oder in der php.ini aktiviert wurde) sollte ein simples flush() nach der Ausgabe reichen. Ansonsten wirst Du vor flush() auch noch ob_flush() ausfuehren muessen.
Ok werde ich mal versuchen :)

Weiterhin muss ich sagen, dass ich Deinen Code irgendwie umstaendlich finde. Musst Du die Daten wirklich in einer DB speichern? Ist ja bei einem Port-Scanner eigentlich nicht ueblich.
Hehe, ich weiss. Dazu muss ich sagen ich habe vor 4 Tagen erst mit PHP angefangen aber bin bei dem Portscanner noch am testen. Der wird noch nen bissel kleiner gehalten ;)

Zum MySQL DB, joa war die Ideale Lösung. Wie schon gesagt, werden bis zu 15 Server gescannt. Wenn ichdas File jedesmal per Browser ausführen würde, würde dies ewig dauern. Daher läuft auf dem File nen Cronjob der es Regelmäßig ausführt. Das File speichert das Ergebnis dann in der Datenbank.

Sehe ich genauso, das ist ja eine Menge Tipparbeit.
Jain, war mehr Copypasste in dem Fall :P

Dank euch für die schnelle Hilfe ich werd es ausprobieren :).

Gruss Rene
 
Zurück