Frage zu "sleep-Problem"

Hallo,

mein Skript prüft, ob eine Datei im Verzeichnis existiert und löst im positiven Fall eine Variable aus. Funktioniert problemlos. Nach dem Durchlauf wird die Datei gelöscht, falls sie vorhanden ist, damit der Vorgang erst wieder beim nächsten Kopieren in das Verzeichnis „reagiert“.

<?
$filename = "c:/Daten Neptun/copy_stop_d.txt";

if (file_exists($filename))
    {
	echo "Die Datei $filename existiert";
	sleep(30);
	SetValueBoolean (44357, false);
	unlink($filename);
	}
		else
	{
		echo "Die Datei $filename existiert nicht";
	}
?>   

Wenn ich vor der Ausführung eine Verzögerung mit sleep() einbaue, bekomme ich bei höheren Sekundenwerten (>29 Sekunden) die Fehlermeldung beim Testen im PHP-Skripteditor in IPS:

Die Datei c:/Daten Neptun/copy_stop_d.txt existiert
Fatal error: Maximum execution time of 30 seconds exceeded in C:\IP-Symcon\scripts\43861.ips.php on line 8

Die Datei wird zudem als „fehlerhaft“ markiert.

Mir ist der Fehler nicht ganz klar. Ist die Syntax falsch?

Danke & Gruß

Ecoli

IPS macht alles Richtig, Scripte laufen immer nur ein paar ms (im Normalfall).
Alles über 30 Sekunden wird mit entsprechender Fehlermeldung quittiert.
Michael

IPS macht alles Richtig
… Daran habe ich nie gezweifelt.

Danke für die Antwort. Aber es ist ja nicht die Frage von richtig oder falsch. Es gibt doch Situationen, in denen eine verzögerte Ausführung bestimmter Aktionen sinnvoll ist. Ist das Skript denn formal falsch? Wie kann man solche Verzögerungen dann „IPS-konform“ umsetzen? 29 Sekunden gehen, 30 Sekunden nicht.

Gruß Ecoli

Erster Eintrag:
Wie kann ich…? — IP-Symcon :: Automatisierungssoftware

Das mit dem timeout hat weniger mit IPS zu tun, als dass PHP eine Script-Sprache ist.
Und 30 Sekunden einen PHP-Slot belegen, der ‚nichts‘ macht ist außerdem sehr schlecht.
Machst du dies häufiger, läuft bald kein Script mehr bei dir bzw. alles wird sehr zeitverzögert ausgeführt.
Michael

Ok, danke für den Hinweis. Ich hätte nicht gedacht, dass ich, angesichts der Leistungsfähigkeit heutiger Rechner mit diesem Skript irgendetwas ausbremse.

Danke & Gruß

Ecoli

Das hat nichts mit Leistungsfähigkeit der Rechner zu tun, weil 30 Sekunden sind immer 30 Sekunden :slight_smile:

Du hast (ab Werk) 30 PHP-Slots zur Verfügung, wenn du also jede Sekunde ein Script startest, welches 30 Sekunden läuft, sind alle belegt.

Etwas mehr (also 31 Sekunden warten oder einfach noch mehr Scripte starten) und die nächsten Scripte welche ausgeführt werden sollen laufen in eine ‚Warteschleife‘.

Diese wird jetzt aber immer größer und größer.
Somit hast du irgendwann Latenzen oder IPS zieht die Notbremse und verwirft das Ausführen von einigen Scripten.
Dass merkst du dann, wenn das Licht nicht mehr angeht :smiley:

Michael