Manuel:Écrire des scripts de maintenance

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Writing maintenance scripts and the translation is 50% complete.
Outdated translations are marked like this.
Other languages:
English • ‎español • ‎français • ‎polski • ‎português do Brasil • ‎čeština • ‎українська • ‎日本語 • ‎ꯃꯤꯇꯩ ꯂꯣꯟ

La version 1.16 de MediaWiki a introduit la class maintenance (Maintenance.php ) pour rendre plus simple l'écriture de lignes de commande pour les scripts de maintenance MediaWiki.

Script exemple

Pour décrire ces csripts de maintenance, nous décrirons les étape d'écriture de helloWorld.php, un script qui ne fait qu'une chose, afficher "Salut, Monde". Ce programme contiendra le minimum de code nécessaire à son lancement ainsi que les en-têtes requises pour les droits d'auteur (pour des d'autres en-têtes possibles, lire en tête de droit d'auteur):

 1 <?php
 2 
 3 /**
 4  * To the extent possible under law,  I, Mark Hershberger, have waived all copyright and
 5  * related or neighboring rights to Hello World. This work is published from the
 6  * United States.
 7  *
 8  * @copyright CC0 http://creativecommons.org/publicdomain/zero/1.0/
 9  * @author Mark A. Hershberger <mah@everybody.org>
10  * @ingroup Maintenance
11  */
12 
13 require_once __DIR__ . '/Maintenance.php';
14 
15 class HelloWorld extends Maintenance {
16 	public function execute() {
17 		echo "Hello, World!\n";
18 	}
19 }
20 
21 $maintClass = HelloWorld::class;
22 
23 require_once RUN_MAINTENANCE_IF_MAIN;

Le programme, malgré sa simplicité, aura déja une option --help et d'autres options de ligne de commande. Une sortie possible:

$ php helloWorld.php
Hello, World!
$ php helloWorld.php --help

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki]

Generic maintenance parameters:
    --help (-h): Display this help message
    --quiet (-q): Whether to suppress non-error output
    --conf: Location of LocalSettings.php, if not default
    --wiki: For specifying the wiki ID
    --globals: Output globals at the end of processing for debugging
    --memory-limit: Set a specific memory limit for the script, "max"
        for no limit or "default" to avoid changing it
    --server: The protocol and server name to use in URLs, e.g.
        https://en.wikipedia.org. This is sometimes necessary because server name
        detection may fail in command line scripts.
    --profiler: Profiler output format (usually "text")
    --mwdebug: Enable built-in MediaWiki development settings

Script dependant parameters:
    --dbuser: The DB user to use for this script
    --dbpass: The password to use for this script
    --dbgroupdefault: The default DB group to use.

$

Un aperçu:

13 require_once __DIR__ . "/Maintenance.php";
Bien sur, si nous écrivons un script de maintenance, nous devons inclure Maintenance.php. Cela permet de ne pas avoir à s'occuper de la mise en place d'Autoloading et similaires. Il est conseillé d'utiliser le chemin complet vers Maintenance.php.
15 class HelloWorld extends Maintenance {
Nous écrasons la classe Maintenance, puis dans
21 $maintClass = HelloWorld::class;
22 
23 require_once RUN_MAINTENANCE_IF_MAIN;
utiliser la class Maintenance de façon a lancer la classe HelloWorld, uniquement si le script est utilisé en ligne de commande.

Internally, RUN_MAINTENANCE_IF_MAIN loads another file doMaintenance.php which autoloads MediaWiki classes and configuration, and then

16 	public function execute() {
La fonction execute() que nous avons fourni est lancée.

Adding a description

"But what is this maintenance script for?" I can hear you asking.

We can put a description at the top of the "--help" output by using the addDescription method in our constructor:

16 	public function __construct() {
17 		parent::__construct();
18 
19 		$this->addDescription( 'Say hello.' );
20 	}

The output now gives us the description:

$ php helloWorld.php --help

Say hello.

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki]
…

Analyse des option et Argument

Saluer le monde est tout sympathique et très bien, mais nous voulons être capable de saluer également des individus.

Pour ajouter une option, ajouter un constructeur avec un appel addOption() et mettre à jour la méthode exécuter() pour utiliser une nouvelle option. Les paramètres de addOption() sont are $name, $description, $required = false, $withArg = false, $shortName = false:

16 	public function __construct() {
17 		parent::__construct();
18 
19 		$this->addDescription( 'Say hello.' );
20 		$this->addOption( 'name', 'Who to say Hello to', false, true );
21 	}
22 
23 	public function execute() {
24 		$name = $this->getOption( 'name', 'World' );
25 		echo "Hello, $name!\n";
26 	}

Cette fois, à l'exécution, la sortie de helloWorld.php change en fonction des arguments fournis:

$ php helloWorld.php
Hello, World!
$ php helloWorld.php --name=Mark
Hello, Mark!
$ php helloWorld.php --help

Say hello.

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--name|--profiler|--quiet|--server|--wiki]
…
Script specific parameters:
    --name: Who to say Hello to

Extensions

Version de MediaWiki : 1.28
Gerrit change 301709

If your maintenance script is for an extension, then you should add a requirement that the extension is installed:

16 	public function __construct() {
17 		parent::__construct();
18 		$this->requireExtension( 'FooBar' );
19 		$this->addOption( 'name', 'Who to say Hello to', false, true );
20 	}

Mostly this provides a nice error message when the extension is not enabled on that wiki (likely on wiki farms). This will only work for extensions that use extension.json .

Writing tests

It's recommended to write tests for your maintenance scripts, like with any other class. See the Manual:PHP unit testing/Writing unit tests#Maintenance scripts guide for help and examples.