Hallo T-Rex,
wie ich andern Orts schon mal beschrieben habe, solltest Du solche Scripte nicht auf einem Webserver ausführen.
Wenn dort das Script läuft, dann läuft es und ist nur vom Webserver noch kontrollierbar.
Edit: Der Rest dieses Beitrags ist ein Beispiel für mein solides Halbwissen, was PHP angeht. Martins Idee mit der Connection ist besser.
Eine Behelfslösung kann in einer Steuerdatei bestehen. Solange die Datei da ist, darf das Script weiterlaufen. Ist sie weg, beendet sich das Script. Dazu musst Du im Worker einen Checkpoint programmieren, der die Existenz der Datei in regelmäßigen Abständen prüft (nicht zu oft, sonst leidet die Performance und nicht zu selten, sonst funktioniert es nicht gut). Ist die Datei weg, beendet sich das Script.
Dein Worker-Script startest Du über eine Hilfsseite, die Du ebenfalls in PHP schreibst. Diese erzeugt einen eindeutigen Namen für die Temp-Datei und gibt dann eine Mini-HTML Seite aus, auf der zwei Links sind.
<a target="_blank" href="run_worker.php?semaphore=li3rdge6re12o2ce.dat">Worker starten</a>
<a href="?abort=li3rdge6re12o2ce.dat">Worker abbrechen</a>
Der erste Link startet den Worker und nennt ihm den Namen für die Semaphordatei, die er benutzen soll. Der Worker kann diese Datei selbst erzeugen und prüft dann am Checkpoint ihre Existenz. Kommt er zum normalen Ende, löscht er sie selbst wieder. Über eine mit register_shutdown_function registrierte Aufräumfunktion kannst Du sicherstellen, dass die Datei am Ende immer gelöscht wird.
Der zweite Link enthält keinen Ressourcennamen, d.h. wenn Du da ein "controller.php" hast, würde er controller.php?abort=.... aufrufen.
Dein controller.php schaut, ob es den abort-Parameter bekommt. Wenn ja, löscht es die genannte Temp-Datei und bewirkt damit den Worker-Abbruch.
Statt URL-Parametern kannst Du auch einen Cookie setzen. Aber es darf nur ein temporärer Cookie sein, sonst musst Du eine DSGVO-konforme Speichererlaubnis einholen 🤣
Statt einer handgemachten Steuerdatei kannst Du das auch mit den Session-Features von PHP zu steuern versuchen, aber ich glaube, das ist (a) mühsamer, (b) langsamer und (c) kniffliger, weil PHP die Session-Datei exklusiv im Zugriff hält. Eine weitere Alternative wäre eine SQL Tabelle, in der eine Steuerzeile steht. Aber auch das ist umständlich und aufwändig. Eine Datei ist mit file_exists schnell abgefragt und ermöglicht eine flinke Checkpoint-Verarbeitung.
Das ist nicht elegant. Das ist nicht sicher. Das ist ein Workaround. Dein controller.php sollte auch eine Aufräumfunktion besitzen, die alle Temp-Dateien löscht - falls doch mal was hängen bleibt.
Statt den Worker in einem neuen Fenster zu starten, kannst Du ihn auch mit JavaScript und fetch über das gleiche Fenster starten, sein Ergebnis abfangen und bei Erfolg in ein div einfügen. Keine Ahnung, ob das für Dich passt.
Rolf
sumpsi - posui - obstruxi