Set_time_limit() Alternative in IPS 7.0?

Hallo Gemeinde,

nach dem ich gestern etwas holprig und durch meine Schuld auf 7.0 geupdated habe, funktioniert mein eines Script nicht mehr, was mit set_time_limit(600) arbeitet.

Fatal error: Uncaught Error: Call to undefined function set_time_limit() in C:\ProgramData\Symcon\scripts\36180.ips.php:12
Stack trace:
#0 {main}
  thrown in C:\ProgramData\Symcon\scripts\36180.ips.php on line 12

Ich habe mal alternativ
max_execution_time(600);
probiert, aber das hat sinngemäß die gleiche Fehlermeldung gebracht.

Was kann ich denn hier als neuen Befehl in dem wohl neuen PHP 8.x benutzen ?

Das Script steuert meine Multimediakomponenten und gerade beim Einschalten braucht der Verstärker über eine Minute, bis er im Netzwerk ansprechbar ist. Das Sript hat mit der verlängerten Timeout Zeit nun auch jahrelang störungsfrei gespielt.

Klar nicht die sauberste Art, ein Script auszuführen, aber mir hat es gereicht :slight_smile:
Vielen Dank für eure Hilfe!

Liebe Grüße
Sascha

Es gibt kein Limit mehr. Deshalb kannst du den Befehl einfach entfernen.

paresy

1000 Dank :slight_smile: Geht nun wieder. Gibt es eine Möglichkeit, wie ich ALLE meine Scripte nach „set_time_limit“ durchsuchen kann?

Ich bin mir gerade nicht sicher, ob ich es noch irgendwo verwendet habe?

Vielen Dank paresy für die schnelle Antwort gerade :slight_smile:

NACHTRAG: Gefunden :slight_smile: Einfach in einem geöffneten Script in die Textverarbeitung gehen und „In allen Scripten suchen“ oder „in allen Scripten ersetzen“ wählen.

Vielen dank :slight_smile:

GIbt es irgendeine Möglichkeit, eine maximale Laufzeit für ein Skript festzulegen? Ich habe ein Skript, das curl-Aufrufe macht und manchmal selten an unbekannter Stelle hängen bleibt. Da es keine Möglichkeit gibt, Threads irgendwie abzuschießen bleibt das Skript dann ewig in der Threadliste und könnte theoretisch sogar das ganze System lahmlegen, wenn es mehrfach blockieren würde. Mit einem Timeout ließe sich das zumindest verhindern.

Edit: Habe jetzt mal in Curl explizite Timeouts gesetzt und eine Semaphore verwendet. Aber irgendwie finde ich es sehr unbehaglich wie leicht seit dem Wegfall des Timeouts Threads unendlich lange festhängen können und es gibt nichts das man dagegen tun kann außer den ganzen Dienst neustarten.

Ohne Timeout bei curl wäre der Thread aber auch vor Wegfall des Limits tot gewesen.
Das hat ja nicht verhindert das Threads hängen geblieben sind.
Michael

Das ist der Weg.

Das Timeout war sehr anfällig und haben oft den ganzen Server beim Triggern mit in den Tod gerissen. Deswegen ist es jetzt erforderlich die Timeouts überall zu setzen - dadurch bleibt das System aber stabil.

paresy

Wenn ich gerade mal wieder am Livesystem herumentwickle und irgendeinen blöden Fehler mache, der zu einem ewig festhängenden Thread führt, dann träume ich manchmal von so etwas wie dem Windows Taskmanager in der Konsole, wo ich den Thread dann abschießen kann. :wink:

1 „Gefällt mir“

Kenne ich :smiley:

Hatte auch letztens ein Script wo der Ausgang einer do/while nie verlassen wurde.
Und auch nachträglich ändern bringt bei OPCache ja genau nix, weil das Script im RAM ja läuft und läuft und läuft

2 „Gefällt mir“

Frage: Wer kennt das nicht? :frowning_face:

Do- und While-Schleifen sind ein Spiel mit dem Feuer :wink:

Hi,
nur wenn man kein TimeOut einbaut. Musste ich auch auf die harte Weise lernen.

Ralf

… und das machst du wie?

Indem man bei solchen Endlosschleifen eine zusätzliche Abfrage einbaut.
Zum Beispiel Startzeit merken und in der Schleife prüfen ob x Sekunden vergangen sind und dann mit Break abbrechen.
Michael

1 „Gefällt mir“
<?php
$start = time();
while (true){
    sleep(1);
    if ((time() - $start) > 10) break;
}
?>

Ralf

1 „Gefällt mir“