Manual:shell.php
Soubor MediaWiki: shell.php | |
---|---|
Lokalita: | maintenance/ |
Zdrojový kód: | master • 1.41.1 • 1.40.3 • 1.39.7 |
Třídy: | MediaWikiShell |
shell.php je údržbový skript, který se nachází v adresáři maintenance
, který poskytuje REPL shell, který můžete použít k živému hraní s objekty MediaWiki a funkcemi.
Je založen na PsySH; nahrazuje eval.php , který je méně robustní a má méně funkcí.
Kromě schopnosti vyhodnocovat příkazy PHP zahrnuje funkce zpracování chyb a fatálních událostí způsobem, který nenaruší shell, zkoumání vnitřních částí objektů, zdrojového kódu a dokumentace prostřednictvím reflexe, integrace externího editoru a další.
Použití
Interaktivně: php maintenance/shell.php
Provádění PHP příkazů ze souboru: cat commands.txt | maintenance/shell.php
Možnosti
Volba | Popis |
---|---|
--log-channels | Vytiskne protokoly odeslané na dané logové kanály. Oddělené čárkami: --log-channels authentication,cookie,session úrovně protokolu lze filtrovat pomocí --log-channels authentication,cookie:info,session:error
|
--log-all | Tisk protokolů odeslaných do všech kanálů |
--dbo-debug | Zaznamená více informací souvisejících s databází (přibližně stejné jako nastavení $wgDebugDumpSql )
|
--no-session | Předstírá, že byl nastaven MW_NO_SESSION (užitečné pro ladění kódu, který je vyvolán z koncových bodů bez relace, jako je load.php )
|
Příklady
Provádění příkazů a zpracování chyb
$ php maintenance/shell.php Psy Shell v0.12.2 (PHP 7.4.33 — cli) by Justin Hileman > MW::user('Admin') = MediaWiki\User\User {#5704 +mId: 1, +mName: "Admin", +mActorId: 1, +mRealName: "", +mEmail: "admin@local.wmftest.net", +mTouched: "20240114073920", +mEmailAuthenticated: "20010101000000", +mFrom: "id", mId: 1, mName: "Admin", mActorId: 1, mRealName: "", mEmail: "admin@local.wmftest.net", mTouched: "20240114073920", mEmailAuthenticated: "20010101000000", mFrom: "id", } > // use $_ for previous return value > $_->mQuickTouched PHP Error: Cannot access protected property User::$mQuickTouched in Psy Shell code on line 2 > sudo $_->mQuickTouched = null > User::newFromIdentity(0) TypeError Argument 1 passed to MediaWiki\User\User::newFromIdentity() must implement interface MediaWiki\User\UserIdentity, int given, called on line 2. > wtf TypeError Argument 1 passed to MediaWiki\User\User::newFromIdentity() must implement interface MediaWiki\User\UserIdentity, int given, called on line 2. -- 0: () at includes/user/User.php:652 1: MediaWiki\User\User::newFromIdentity() at eval()'d code:2 2: eval() at vendor/psy/psysh/src/ExecutionLoopClosure.php:52 Use wtf -a to see 8 more lines
Odraz
> ls Message Class Constants: FORMAT_BLOCK_PARSE, FORMAT_ESCAPED, FORMAT_PARSE, FORMAT_PLAIN, FORMAT_TEXT Class Methods: __construct, __toString, bitrateParam, bitrateParams, content, durationParam, durationParams, escaped, exists, expiryParam, expiryParams, getFormat, getKey, getKeysToTry, getLanguage, getParams, getTitle, inContentLanguage, inLanguage, isBlank, isDisabled, isMultiKey, listParam, newFallbackSequence, newFromKey, newFromSpecifier, numParam, numParams, params, parse, parseAsBlock, plain, plaintextParam, plaintextParams, rawParam, rawParams, serialize, setContext, setInterfaceMessageFlag, sizeParam, sizeParams, text, timeperiodParam, timeperiodParams, title, toString, unserialize, useDatabase > doc Message::setContext public function setContext(IContextSource $context) Description: Set the language and the title from a context object Param: IContextSource $context Return: Message $this Since: 1.19 >>> show Message::setContext > 724| public function setContext( IContextSource $context ) { 725| $this->inLanguage( $context->getLanguage() ); 726| $this->title( $context->getTitle() ); 727| $this->interface = true; 728| 729| return $this; 730| }
Výstupní ladění
$ php maintenance/shell.php --log-all --dbo-debug [debug] [DBReplication] Wikimedia\Rdbms\LBFactory::getChronologyProtector: using request info { "IPAddress": "", "UserAgent": "", "ChronologyProtection": "true" } [debug] [DBConnection] Wikimedia\Rdbms\LoadBalancer::openConnection: calling initLB() before first connection. [debug] [DBConnection] Connected to database 0 at '127.0.0.1'. [debug] [DBQuery] wiki SHOW /* Wikimedia\Rdbms\DatabaseMysqlBase::serverIsReadOnly */ GLOBAL VARIABLES LIKE 'read_only' [debug] [DBQuery] SHOW GLOBAL VARIABLES LIKE 'read_only' Psy Shell v0.8.5 (PHP 5.6.30-0+deb8u1 — cli) by Justin Hileman >>> MW::message("Recentchanges")->text() [debug] [CryptRand] mcrypt_create_iv generated 20 bytes of randomness. [debug] [CryptRand] 0 bytes of randomness leftover in the buffer. [info] [MessageCache] MessageCache::load: Loading en... local cache is empty, got from global cache => "Recent changes"
Integrace editačního řádku
PsySH lze integrovat s readline / editline (PHP je obvykle předpřipraven s druhým).
Ukázka .editrc
pro vyhledávání v historii:
# make PgUp/PgDown work, sort of
# editline has no prefix search so use fulltext search
bind "\e[5~" ed-search-prev-history
bind "\e[6~" ed-search-next-history