mediawiki自体の参考情報

Meta, a Wikimedia project coordination wiki

繋ぎ先

#$wgDBserver        = "localhost:/tmp/mysql10.sock"; # port:3316 #
#$wgDBserver         = "localhost:3306";
$wgDBserver         = "localhost:/tmp/mysql.sock";

キャッシュ無効

LocalSettings.php

$wgCachePages = false;

インストール注意

cd maintenance
php rebuildall.php
# yum -y install php-mysql
# yum -y install ImageMagick ImageMagick-devel

参考サイト

Help:Section/ja - Meta

ページ埋め込み

参考:404 File Not Found

<nowiki>{{:ページ名}}</nowiki>

記号入力

<nowiki>記号</nowiki>

数式入力

Help:特殊文字 - Wikipedia

改造

自動リンク

includes/DefaultSetting.php

/**
 * The external URL protocols
 */
$wgUrlProtocols = array(
    'http://',
    'https://',
    'ftp://',
    'irc://',
    'gopher://',
    'telnet://', // Well if we're going to support the above.. -?var
    'nntp://', // @bug 3808 RFC 1738
    'worldwind://',
    'mailto:',
    'news:',
    'svn://',
);

includes/Linker.php

    /**
     * Make an external link
     * @param String $url URL to link to
     * @param String $text text of link
     * @param boolean $escape Do we escape the link text?
     * @param String $linktype Type of external link. Gets added to the classes
     * @param array $attribs Array of extra attributes to <a>
     * 
     * @TODO! @FIXME! This is a really crappy implementation. $linktype and 
     * 'external' are mashed into the class attrib for the link (which is made
     * into a string). Then, if we've got additional params in $attribs, we 
     * add to it. People using this might want to change the classes (or other
     * default link attributes), but passing $attribsText is just messy. Would 
     * make a lot more sense to make put the classes into $attribs, let the 
     * hook play with them, *then* expand it all at once. 
     */
    function makeExternalLink( $url, $text, $escape = true, $linktype = '', $attribs = array() ) {
        $attribsText = $this->getExternalLinkAttributes( $url, $text, 'external ' . $linktype );
        $url = htmlspecialchars( $url );
        if( $escape ) {
            $text = htmlspecialchars( $text );
        }
        $link = '';
        $success = wfRunHooks('LinkerMakeExternalLink', array( &$url, &$text, &$link, &$attribs, $linktype ) );
        if(!$success) {
            wfDebug("Hook LinkerMakeExternalLink changed the output of link with url {$url} and text {$text} to {$link}\n", true);
            return $link;
        }
        if ( $attribs ) {
            $attribsText .= Xml::expandAttributes( $attribs );
        }
        return '<a href="'.$url.'"'.$attribsText.'>'.$text.'</a>';
    }

タイムゾーン

MediaWikiのカスタマイズ(5) タイムゾーンを日本時間に - nak on the web system side

MediaWikiは国際的に開発・利用されているため,デフォルトの時刻表示はUTCが用いられている。
日本時間で表示するには localSettings.phpに以下の記述を追加する(分単位でUTCとの差を設定する)。

$wgLocalTZoffset = +540;

DB作成

mysql> grant create, select, insert, update, delete, alter, lock tables, index on wikidb.* to 'wikiuser'@'localhost' identified by 'password';
mysql> flush privileges;

MediaWikiで未ログインユーザの編集を禁止

LocalSettings.phpに

$wgGroupPermissions['*']['edit']=false;

を追加。

ロゴ画像

$wgLogo = "$wgScriptPath/images/imagine_all.png";

見出しレイアウト

skins/monobook/main.css

h1 { font-size: 188%; }
h1 .editsection { font-size: 53%; }
h2 { margin-top: 1em; font-size: 125%; border-left:5px solid #596d9d; padding-left:8px; background-color:#ffb0b0; width:100%; }
h2 .editsection { font-size: 67%; }
h3, h4, h5, h6 {
    border-bottom: none;
    font-weight: bold;
}
h3 { margin-top: 1em; font-size: 125%; padding-left:5px; background-color:#f0f0a0; width:90%; }
h3 .editsection { font-size: 76%; font-weight: normal; }
h4 { margin-top: 1em; font-size: 120%; color:#444444; letter-spacing:1px; background-color:#d0efe0; width:70%; }
h4 .editsection { font-size: 86%; font-weight: normal; }
h5 { margin-top: 1em; font-size: 110%; color:#444444; letter-spacing:1px; background-color:#e0e0f0; width:60%; }
h5 .editsection { font-weight: normal; }
h6 { margin-top: 1em; font-size: 100%; color:#444444; letter-spacing:1px; background-color:#d0d0d0; width:40%; }
h6 .editsection { font-size: 125%; font-weight: normal; }

ショートURL設定

MediaWikiでショートURLを設定する方法(さくらインターネット) | kamikura.com Blog

RewriteEngine on
RewriteRule ^mediawiki/wiki/(.*)$ /mediawiki/index.php?title=$1 [PT,L,QSA]
RewriteRule ^mediawiki/wiki/*$ /mediawiki/index.php [L,QSA]
RewriteRule ^/mediawiki/*$ /mediawiki/index.php [L,QSA]

閾ペディアことのは:MediaWikiの改造 - 閾ペディアことのは

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?title=$1 [L,QSA]

ブログが見つかりません

RewriteEngine on
RewriteRule ^wiki/(.*)$ /index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ /index.php [L,QSA]
RewriteRule ^/*$ /index.php [L,QSA]

Apache module mod_rewrite

'last|L' (last(最後の)ルール)
ここで書き換え処理を中止し、それ以上の書き換えルールを適用 しないようにします。これは Perl のlastコマンド や C 言語の breakコマンドに対応するものです。 このフラグを使うことで、現在の書き換え後の URL が後続のルール によってそれ以上書き換えられることを防止します。たとえば、 これを使ってルートパスの URL ('/') を実際のもの、 たとえば'/e/www/'に書き換えます。

'passthrough|PT' (pass through to next handler)
このフラグは、内部の request_rec 構造体の uri フィールドに filename フィールドの値をセット するように、書き換えエンジンに指示します。このフラグは単に、 RewriteRule ディレクティブの出力に対して、他の URI からファイル名への変換処理を行なう Alias, ScriptAlias, Redirectといった ディレクティブによる後処理を入れるための小技です。文法を示すため の単純な例:mod_rewrite の書き換えエンジンで /abc から /def への変換を行い、さらに mod_alias で /def から /ghi に書き換えるには、以下のようにします:

'qsappend|QSA' (query string append)
このフラグは、置換文字列の中でマッチしたものを書き換えるのではなく、 そこにクエリー文字列部分を追加するように、書き換えエンジンに強制 します。書き換えルールを通してクエリー文字列に何かデータを追加したい 場合にこのフラグを使います。

アップグレード時のエラー

MySQL functions missing, have you compiled PHP with the --with-mysql option?

# yum -y install php-mysql

memcached導入

セッション

memcached

PORT="11211"
USER="memcached" → "nobody" (必要ある??)
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

php.ini

session.save_handler = 'memcache'
session.save_path = "192.168.10.139:11211"

LocalSettings.php

$wgSessionHandler = 'memcache'; (追加)

本体キャッシュ

LocalSettings.php

$wgMainCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = array('127.0.0.1:11211');

ソースコードメモ:自動リンク

mediawiki-core/DefaultSettings.php at master · wikimedia/mediawiki-core · GitHub

/**
 * URL schemes that should be recognized as valid by wfParseUrl().
 * @see wfParseUrl
 */
$wgUrlProtocols = array(
    'bitcoin:', 'ftp://', 'ftps://', 'geo:', 'git://', 'gopher://', 'http://',
    'https://', 'irc://', 'ircs://', 'magnet:', 'mailto:', 'mms://', 'news:',
    'nntp://', 'redis://', 'sftp://', 'sip:', 'sips:', 'sms:', 'ssh://',
    'svn://', 'tel:', 'telnet://', 'urn:', 'worldwind://', 'xmpp:', '//'
);

mediawiki-core/GlobalFunctions.php at 60ae7c8d3d63fdb87105ce2f70ea5f739f3a93f0 · wikimedia/mediawiki-core · GitHub

/**
 * Returns a regular expression of url protocols
 *
 * @param bool $includeProtocolRelative If false, remove '//' from the returned protocol list.
 *        DO NOT USE this directly, use wfUrlProtocolsWithoutProtRel() instead
 * @return string
 */
function wfUrlProtocols( $includeProtocolRelative = true ) {

mediawiki-core/GlobalFunctions.php at 60ae7c8d3d63fdb87105ce2f70ea5f739f3a93f0 · wikimedia/mediawiki-core · GitHub

/**
 * parse_url() work-alike, but non-broken.  Differences:
 *
 * 1) Does not raise warnings on bad URLs (just returns false).
 * 2) Handles protocols that don't use :// (e.g., mailto: and news:, as well as
 *    protocol-relative URLs) correctly.
 * 3) Adds a "delimiter" element to the array, either '://', ':' or '//' (see (2)).
 *
 * @param string $url A URL to parse
 * @return string[] Bits of the URL in an associative array, per PHP docs
 */
function wfParseUrl( $url ) {

mediawiki-core/Parser.php at e6ca4c3b7fdbae2f2dbcf32c8d9f8d3e4f70777f · wikimedia/mediawiki-core · GitHub

/**
 * Get an associative array of additional HTML attributes appropriate for a
 * particular external link.  This currently may include rel => nofollow
 * (depending on configuration, namespace, and the URL's domain) and/or a
 * target attribute (depending on configuration).
 *
 * @param string|bool $url Optional URL, to extract the domain from for rel =>
 *   nofollow if appropriate
 * @return array Associative array of HTML attributes
 */
public function getExternalLinkAttribs( $url = false ) {

mediawiki-core/Parser.php at e6ca4c3b7fdbae2f2dbcf32c8d9f8d3e4f70777f · wikimedia/mediawiki-core · GitHub

/**
 * Make a free external link, given a user-supplied URL
 *
 * @param string $url
 *
 * @return string HTML
 * @private
 */
public function makeFreeExternalLink( $url ) {

mediawiki-core/Parser.php at e6ca4c3b7fdbae2f2dbcf32c8d9f8d3e4f70777f · wikimedia/mediawiki-core · GitHub

/**
 * Replace external links (REL)
 *
 * Note: this is all very hackish and the order of execution matters a lot.
 * Make sure to run tests/parserTests.php if you change this code.
 *
 * @private
 *
 * @param string $text
 *
 * @throws MWException
 * @return string
 */
public function replaceExternalLinks( $text ) {

これはどこだか忘れた。

function wfSpecialLinkSearch( $par ) {

mediawiki-core/Linker.php at 83561c5ca7059889bb68ee7b8f6540f4690a830e · wikimedia/mediawiki-core · GitHub

/**
 * Make an external link
 * @param string $url URL to link to
 * @param string $text Text of link
 * @param bool $escape Do we escape the link text?
 * @param string $linktype Type of external link. Gets added to the classes
 * @param array $attribs Array of extra attributes to <a>
 * @param Title|null $title Title object used for title specific link attributes
 * @return string
 */
public static function makeExternalLink( $url, $text, $escape = true,
    $linktype = '', $attribs = array(), $title = null
) {