Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Einfache CLI-Skripte mit eZScript und ezexec

Der klassische Weg, ein Kommandozeilenskript mit eZScript und eZCLI zu schreiben, der weiterhin funktioniert und dem Sie in älteren Erweiterungen begegnen werden - instance(), startup(), getOptions(), initialize()…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/php-developers/legacy-cli-scripts-with-ezscript.md

On this page

This page is a translation. Read the English original

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

  1. Der Lebenszyklus
  2. Ein einfaches Skript
  3. Die Einstellungen von eZScript::instance()
  4. Ausgabe mit eZCLI
  5. Code mit dem Kernel ausführen: ezexec.php
  6. Ein einfaches Skript in eine Klasse überführen

Der Lebenszyklus

SchrittAufrufTut
1eZScript::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
5Ihre 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üsselBedeutung
descriptionder Text von --help
use-sessioneine Sitzung starten (die meisten Skripte brauchen keine)
use-modulesdas Modulsystem laden (nötig, um Views auszuführen oder Richtlinien von Modulen zu prüfen)
use-extensionsdie aktiven Erweiterungen und ihre Einstellungen laden (fast immer true)
site-accessein fester Siteaccess statt des Standards

Ausgabe mit eZCLI

AufrufSchreibt
$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.0

Die 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

  1. Legen Sie extension/<ext>/classes/runnable/commands/<name>.php mit einer Klasse an, die Exponential\Runnable\Command in Exponential\Command\Extension\<Ext> erweitert.
  2. Verschieben Sie den Code in run(); ersetzen Sie eZScript::instance() durch $this->script(), die drei Startschritte durch $this->startup(), $cli->output() durch $this->output(), $script->shutdown() durch $this->shutdown().
  3. Schreiben Sie Klassennamen voll qualifiziert (\eZCLI), weil die Klasse in einem Namespace liegt.
  4. Reduzieren Sie die alte Datei auf require_once 'autoload.php'; und einen Aufruf main( __FILE__ ).
  5. Vergleichen Sie --help und die Exit-Codes vorher und nachher; der Kernel hat seine eigenen Umstellungen so nachgewiesen (Befehle, Cronjob-Teile und Modul-Views als Klassen).

Verwandte Seiten

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x