Einfache CLI-Skripte mit eZScript und ezexec
Diese Seite richtet sich an PHP-Entwickler, die als einfache Dateien geschriebene Kommandozeilenskripte pflegen oder ein
Stück PHP mit gebootetem Kernel ausführen müssen. Neue Befehle werden als Klassen geschrieben
(Einen Konsolenbefehl schreiben); die einfache Form läuft weiterhin genau wie bisher, und
jeder klassenbasierte Befehl verwendet darunter dasselbe eZScript, sodass es so oder so hilft, es zu kennen.
Inhalt
- Der Lebenszyklus
- Ein einfaches Skript
- Die Einstellungen von eZScript::instance()
- Ausgabe mit eZCLI
- Code mit dem Kernel ausführen: ezexec.php
- Ein einfaches Skript in eine Klasse überführen
Der Lebenszyklus
| Schritt | Aufruf | Tut |
|---|---|---|
| 1 | eZScript::instance( $settings ) | erzeugt das Skriptobjekt |
| 2 | $script->startup() | prüft, dass es auf der Kommandozeile läuft, setzt die Fehlerberichterstattung und die Debug-Behandlung |
| 3 | $script->getOptions( $config, $argumentConfig, $help ) | parst die Kommandozeile; gibt --help aus und beendet; wendet -s, -l, -d, -v, -q an |
| 4 | $script->initialize() | lädt Siteaccess, Erweiterungen, Sitzung und Datenbank |
| 5 | Ihre Arbeit | |
| 6 | $script->shutdown( $exitCode, $exitText ) | schreibt auf Wunsch den Debug-Bericht und beendet |
Parsen Sie die Optionen vor initialize(), damit --help ohne Datenbank antwortet.
Ein einfaches Skript
#!/usr/bin/env php
<?php
/**
* @description Counts the items of acmereport
*/
require_once 'autoload.php';
$cli = eZCLI::instance();
$script = eZScript::instance( array( 'description' => "Counts the items of acmereport",
'use-session' => false, 'use-modules' => false, 'use-extensions' => true ) );
$script->startup();
$options = $script->getOptions( '[status:]', '', array( 'status' => 'Only items with this status' ) );
$script->initialize();
$conds = $options['status'] ? array( 'status' => (string)$options['status'] ) : null;
$cli->output( 'Items: ' . eZPersistentObject::count( acmeReportItem::definition(), $conds ) );
$script->shutdown( 0 );Führen Sie es aus dem Wurzelverzeichnis der Installation aus: php extension/acmereport/bin/php/count.php --status=open
oder über die Konsole als ext:acmereport:count.
Die Einstellungen von eZScript::instance()
| Schlüssel | Bedeutung |
|---|---|
description | der Text von --help |
use-session | eine Sitzung starten (die meisten Skripte brauchen keine) |
use-modules | das Modulsystem laden (nötig, um Views auszuführen oder Richtlinien von Modulen zu prüfen) |
use-extensions | die aktiven Erweiterungen und ihre Einstellungen laden (fast immer true) |
site-access | ein fester Siteaccess statt des Standards |
Ausgabe mit eZCLI
| Aufruf | Schreibt |
|---|---|
$cli->output( $text ) | eine Zeile auf die Standardausgabe; nichts mit -q |
$cli->notice( $text ), warning( $text ), error( $text ) | markierte Zeilen |
$cli->stylize( 'emphasize', $text ) | Text mit einem Terminal-Stil; einfach, wenn Farben ausgeschaltet sind |
Code mit dem Kernel ausführen: ezexec.php
Um eine PHP-Datei einmal mit gebootetem Kernel (Einstellungen, Erweiterungen, Datenbank) auszuführen, für eine Diagnose
oder eine einmalige Datenkorrektur, übergeben Sie sie an bin/php/ezexec.php:
php bin/php/ezexec.php path/to/your-script.php
php bin/php/ezexec.php tests/bin/bootsmoke.php # how CI boots the kernel on PHP 8.0Die Datei läuft mit verfügbaren Klassen und Einstellungen des Kernels; eZDB::instance() verbindet sich mit der
Datenbank der Site. Halten Sie solche Dateien außerhalb der Reichweite des Web-Wurzelverzeichnisses und aus den
Releases Ihrer Erweiterung heraus, und geben Sie ihnen einen Namen, der sagt, was sie tun. Alles, was Sie zweimal
ausführen, gehört in einen richtigen Befehl.
Ein einfaches Skript in eine Klasse überführen
- Legen Sie
extension/<ext>/classes/runnable/commands/<name>.phpmit einer Klasse an, dieExponential\Runnable\CommandinExponential\Command\Extension\<Ext>erweitert. - Verschieben Sie den Code in
run(); ersetzen SieeZScript::instance()durch$this->script(), die drei Startschritte durch$this->startup(),$cli->output()durch$this->output(),$script->shutdown()durch$this->shutdown(). - Schreiben Sie Klassennamen voll qualifiziert (
\eZCLI), weil die Klasse in einem Namespace liegt. - Reduzieren Sie die alte Datei auf
require_once 'autoload.php';und einen Aufrufmain( __FILE__ ). - Vergleichen Sie
--helpund die Exit-Codes vorher und nachher; der Kernel hat seine eigenen Umstellungen so nachgewiesen (Befehle, Cronjob-Teile und Modul-Views als Klassen).
Verwandte Seiten
- Referenz zu eZScript und eZCLI
- CLI-Skripte mit eZScript (Anwendungsentwickler)
- CLI-Skripte und Konsolenbefehle
- Freie Dokumentation: diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.