xreaにインストールしたMediaWikiでサムネイルを表示する

提供: 何かしら図書館

xreaやCORESERVERにインストールしたMediaWikiに、画像をアップロードすると"サムネイルの作成中にエラーが発生しました: Unable to run external programs in safe mode."と表示されます。これはMediaWikiが標準でImageMagickを利用しようとしているからです。この問題を解決するには、

  1. ImageMagickを無理矢理使う
  2. GDライブラリを使う

の2つの方法があります。


目次

[編集] 準備

そもそもxreaはsafe modeで動いているので、MediaWiki自らディレクトリを作成できません。そこで、imageディレクトリ下に以下のフォルダを事前に作成しておいてください。

  • archive
  • temp
  • thumb
  • delete

作成したら、これらのパーミッションを777に変更してください。 また、アップロードフォルダのハッシュ化ができないので、

$wgHashedUploadDirectory = false;

LocalSettings.phpに書き込んでください。 そして、

$wgFileStore['deleted']['hash'] = 0;

も書き込んでください。MediaWikiでは、削除したファイルをdelete下に作った階層に保存する仕組みになっています。整数値の0は階層を作らないという意味です。


[編集] 出力ディレクトリが作成できない

"出力ディレクトリを作成できません(Unable to create destination directory)"と表示される場合。 一度images/temp/を削除して新たにtemp/を作成し、パーミッションを777に変更してみてください。 また、〜から〜への変更が出来ませんでした。と表示される場合も、該当フォルダにおいて同じ操作をしてみてください。


[編集] GDライブラリを使う

もっとも簡単な方法です。 LocalSettings.phpに、

$wgUseImageMagick = false;

と書く。これだけ。


[編集] 留意点

1.14x以降では動かないのかもしれない、、、。


[編集] ImageMagickを使う

xrea/CORESERVERでImageMagickを使うには、セーフモードの関係上"/usr/local/php/bin/convert"としなくてはいけないようなので、以下のように記述してください。

$wgUseImageMagick = true;
$wgUseImageResize = true;
$wgImageMagickConvertCommand = "/usr/local/php/bin/convert";

しかし、MediaWikiではsafe modeで動いている場合、この設定を無視するので、以下のようにファイルを書き換えないといけません。

[/includes/GlobalFunctions.php]

        if( ini_get( 'safe_mode' ) ) {
                wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
                $retval = 1;
                return "Unable to run external programs in safe mode.";
        }


        if( ini_get( 'safe_mode' ) ) {
               wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
	       $cmd = preg_replace('/2>&1$/','',$cmd);
	       $cmd = preg_replace('/^\'([^ ]+)\'/','$1',$cmd);
               if ( preg_match( '/^\/usr\/local\/php\/bin\/convert/', $cmd ) ) {
                       wfDebug( "BUT! I'll try it. (;p\n" );
               } else {
                        $retval = 1;
                        return "Unable to run external programs in safe mode2.$cmd";
               }
        }

なお、1.14xまでは以上のようにすれば動きましたが、1.15xからは以下の部分を置き換えなければなりません。

 	static $disabled;
	if ( is_null( $disabled ) ) {
		$disabled = false;
		if( wfIniGetBool( 'safe_mode' ) ) {
			wfDebug( "wfShellExec can't run in safe_mode, PHP's exec functions are too broken.\n" );
			$disabled = true;
		}
		$functions = explode( ',', ini_get( 'disable_functions' ) );
		$functions = array_map( 'trim', $functions );
		$functions = array_map( 'strtolower', $functions );
		if ( in_array( 'passthru', $functions ) ) {
			wfDebug( "passthru is in disabled_functions\n" );
			$disabled = true;
		}
	}
	if ( $disabled ) {
		$retval = 1;
		return "Unable to run external programs in safe mode.";
	}


[編集] 留意点

SVGの表示がうまくいかない。


[編集] 注意事項

  • 以上はすべてPHPでの動作に限定します。
  • PHPをCGIとして動作させる場合はMediaWikiを完全にCGIとして動かすを参照してください。
    • この方法でもSVGを表示することはできません。
    • なお、この方法を使用した場合、上記の"準備"をする必要はありません。
  • SVGのサムネイル作成には、
    • $wgMaxShellMemory = 131072;
  • をLocalSettings.phpに書けばいいよ、という話がある > [1]


[編集] 外部リンク

ブラウザ
Google AdSense
個人用ツール