Jump to content

Manual:Shell.php/ja: Difference between revisions

From mediawiki.org
Content deleted Content added
FuzzyBot (talk | contribs)
Updating to match new version of source page
FuzzyBot (talk | contribs)
Updating to match new version of source page
Line 1: Line 1:
<languages/>
<languages/>
{{MW file|shell.php|maintenance/|class1=MediaWikiShell}}
{{MW file|shell.php|maintenance/|class1=MediaWikiShell}}
'''shell.php''' is a [[Special:MyLanguage/Manual:Maintenance scripts|maintenance script]] that is located in the <tt>maintenance</tt> directory that provides a [[w:REPL|REPL shell]] you can use to play live with MediaWiki objects and functions. It is based on [http://psysh.org/ PsySH]; it replaces [[Special:MyLanguage/Manual:Eval.php|eval.php]] which is less robust and has less features.
'''shell.php''' is a [[Special:MyLanguage/Manual:Maintenance scripts|maintenance script]] that is located in the <tt>maintenance</tt> directory that provides a [[w:REPL|REPL shell]] you can use to play live with MediaWiki objects and functions.
It is based on [http://psysh.org/ PsySH]; it replaces {{ll|Manual:Eval.php|eval.php}} which is less robust and has less features.


Beyond the ability to evaluate PHP statements, functionality includes handling errors and fatals in a way that does not break the shell, examining object internals, source code and documentation via reflection, external editor integration and more.
Beyond the ability to evaluate PHP statements, functionality includes handling errors and fatals in a way that does not break the shell, examining object internals, source code and documentation via reflection, external editor integration and more.

Revision as of 11:01, 6 October 2020

shell.php is a maintenance script that is located in the maintenance directory that provides a REPL shell you can use to play live with MediaWiki objects and functions. It is based on PsySH; it replaces eval.php which is less robust and has less features.

Beyond the ability to evaluate PHP statements, functionality includes handling errors and fatals in a way that does not break the shell, examining object internals, source code and documentation via reflection, external editor integration and more.

Examples

Command execution and error handling

$ php maintenance/shell.php
Psy Shell v0.8.5 (PHP 5.6.30-0+deb8u1 — cli) by Justin Hileman

>>> User::newFromName('Foo')
=> User {#1075
     +mId: null,
     +mName: "Foo",
     +mRealName: null,
     +mEmail: null,
     +mTouched: null,
     +mEmailAuthenticated: null,
     +mOptionsLoaded: false,
     +mFrom: "name",
     +mBlockedby: -1,
     +mRights: null,
     +mHideName: null,
     +mOptions: null,
     +mBlock: null,
   }

>>> $_->mQuickTouched
PHP Error:  Cannot access protected property User::$mQuickTouched in Psy Shell code on line 2

>>> sudo $_->mQuickTouched
=> null

>>> User::newFromName( true )
InvalidArgumentException with message '$text must be a string.'

>>> wtf
InvalidArgumentException with message '$text must be a string.'
--
0:  () at includes/Title.php:283
1:  Title::newFromText() at includes/user/User.php:1255
2:  User::getCanonicalName() at includes/user/User.php:588

Use wtf -a to see 10 more lines

Reflection

>>> 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|        }

Debug output

$ php maintenance/shell.php -d 2
[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

>>> wfMessage("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"

Editline integration

PsySH can integrate with readline / editline (PHP usually comes pre-built with the latter).

A sample .editrc for history search:

# 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

関連項目