
Wir lieben PHP wegen seiner Einfachheit: Sie schreiben den Code, aktualisieren die Seite im Browser und sehen sofort die Änderungen. Wenn es jedoch um Konsolenbefehle geht, bei denen es sich um langlebige Prozesse handeln kann, z. B. wenn wir einen asynchronen HTTP-Server zum Hochladen von Dateien schreiben, kann die Entwicklung sehr schmerzhaft sein.
Es gab keine geeignete Lösung im PHP-Ökosystem, um Anwendungen automatisch neu zu starten, wenn Änderungen am Quellcode vorgenommen wurden. Aus diesem Grund habe ich beschlossen, mein Tool in reinem PHP und mit Zugriff über Composer zu erstellen.
Es ist wie Nodemon, aber in PHP
Eine Weile habe ich selbst
Nodemon benutzt . Dies ist ein Tool aus der Welt von Node.js. Wenn Sie es jedoch ein wenig anpassen, können Sie es mit PHP-Skripten verwenden. Tatsächlich möchte ich Node.js jedoch nicht installieren und einige mir unbekannte NPM-Pakete in meine asynchrone PHP-Anwendung ziehen, um sie neu zu starten.
Da ich auf Twitter aktiv kommuniziere, habe ich dort nachgefragt, wer dieses Problem noch hat und möchte eine Lösung finden. Als ich das Interesse sah, setzte ich mich zusammen, um ein Tool zu schreiben, das die gleichen Funktionen wie Nodemon bietet,
nur in PHP und für PHP .

Ein Monat ist vergangen: Mit
PHP-Watcher müssen Sie Nodemon oder ein anderes NPM-Paket nicht mehr installieren, um Ihre langlebige PHP-Anwendung zu entwickeln.
So funktioniert es
Die Bibliothek kann über Composer installiert werden:
composer global require seregazhuk/php-watcher
Stellen Sie sich vor, wir arbeiten an einer langlebigen Symfony-basierten Anwendung. Der Einstiegspunkt für unsere Anwendung ist die Datei public / index.php. Wir möchten Änderungen in den Ordnern src und config verfolgen. Wir möchten auch, dass die Anwendung automatisch neu startet, sobald wir den Quellcode oder die Konfigurationsparameter ändern. So lösen Sie dieses Problem:
php-watcher public/index.php --watch src --watch config
Der Befehl führt das Skript public / index.php aus, das beginnt, Änderungen in den Verzeichnissen src und config zu verfolgen. Sobald sich die Datei ändert, startet PHP-Watcher das Skript neu.
Standardmäßig werden nur Änderungen an PHP-Dateien verfolgt. Symfony speichert seine Einstellungen jedoch in yaml. Deshalb müssen wir der Uhr explizit mitteilen, dass sie sowohl PHP- als auch Yaml-Dateien verfolgt. Dies geschieht mit der Option --ext:
php-watcher public/index.php --watch src --watch config --ext php,yaml
Angenommen, wir verstehen, dass wir keine Anwendungen mit Änderungen im Verzeichnis src neu starten müssen. Beispielsweise möchten wir Änderungen im Unterverzeichnis src / Migrations ignorieren. In diesem Fall können Sie die Option --ignore verwenden:
php-watcher public/index.php --watch src --watch config --ext php,yaml --ignore Migrations
Jetzt beginnt PHP-Watcher, Änderungen in den Verzeichnissen src und config zu verfolgen, ignoriert jedoch alle Änderungen im Unterverzeichnis Migrations. Außerdem werden Änderungen in allen Punkt- und VCS-Dateien standardmäßig ignoriert.
Watcher unterstützt das Anpassen seines Verhaltens nicht nur über Befehlszeilenoptionen, sondern auch über Konfigurationsdateien. Wenn Sie nicht jedes Mal eine Reihe von Optionen und Parametern an die Befehlszeile übergeben möchten, können Sie eine Konfigurationsdatei mit der Erweiterung .php-watcher.yml erstellen. Beispielsweise kann der vorherige Befehl durch die folgende Konfigurationsdatei ersetzt werden:
watch: - src - config extensions: - php - yaml ignore: - Migrations
Mit einer solchen Datei können wir einfach die "Überwachung" aktivieren, indem wir nur das PHP-Skript angeben, das neu gestartet werden muss. Alle anderen Einstellungen werden aus der Datei übernommen:
php-watcher public/index.php
Was passiert, wenn wir sowohl eine Konfigurationsdatei als auch Befehlszeilenargumente haben? In diesem Fall überschreiben alle über die Befehlszeile übergebenen Argumente die entsprechenden Werte aus der Konfigurationsdatei.
Standardmäßig verwendet PHP-Watcher die ausführbare PHP-Datei, um das Skript auszuführen. Wir schreiben den Befehl in das Terminal:
php-watcher public/index.php
Unter der Haube wird ein untergeordneter Prozess mit dem PHP-Befehl public / index.php erstellt. In den meisten Fällen ist dies das, was Sie brauchen. Wenn Ihre Umgebung jedoch über eine andere ausführbare Datei verfügt, können Sie explizit angeben, welcher Befehl ausgeführt werden soll. Wenn sich beispielsweise mehrere PHP-Versionen auf demselben System befinden und wir unsere Anwendung mit der ausführbaren Datei php7.4 ausführen möchten, können Sie die Option --exec verwenden und Ihre ausführbare Datei angeben:
php-watcher public/index.php --exec php7.4
Das gleiche über die Konfigurationsdatei:
watch: - src - config executable: php7.4
PHP-Watcher startet die Anwendung nicht automatisch neu, wenn sie abstürzt. In der Entwicklungsumgebung ist dies nicht besonders erforderlich. Während wir eine neue Anwendung entwickeln, ist es normal, dass sie manchmal abstürzt. Wenn die Anwendung abstürzt (mit einem anderen Code als 0 beendet), teilt uns die "Uhr" dies mit. Sobald wir den Code korrigieren, werden die Änderungen in den Quellen erkannt - und die Anwendung wird neu gestartet.
Vielen Dank für Ihre Aufmerksamkeit! Weitere Informationen zu PHP-Watcher finden Sie auf
der Projekthomepage auf GitHub . Die Dokumentation beschreibt die grundlegenden Verwendungsmuster. Das Projekt befindet sich noch in der Entwicklung, aber die API ist bereits recht stabil. Ich werde froh sein, wenn Sie es verwenden.
PS Fühlen Sie sich frei, Feedback und Vorschläge durch Ausgabe auf GitHub zu lassen.