xreaやCORESERVERにインストールしたMediaWikiに、画像をアップロードすると"サムネイルの作成中にエラーが発生しました: Unable to run external programs in safe mode."と表示されます。これはMediaWikiが標準でImageMagickを利用しようとしているからです。この問題を解決するには、
の2つの方法があります。
目次 |
そもそもxreaはsafe modeで動いているので、MediaWiki自らディレクトリを作成できません。そこで、imageディレクトリ下に以下のフォルダを事前に作成しておいてください。
作成したら、これらのパーミッションを777に変更してください。 また、アップロードフォルダのハッシュ化ができないので、
$wgHashedUploadDirectory = false;
をLocalSettings.phpに書き込んでください。
そして、
$wgFileStore['deleted']['hash'] = 0;
も書き込んでください。MediaWikiでは、削除したファイルをdelete下に作った階層に保存する仕組みになっています。整数値の0は階層を作らないという意味です。
"出力ディレクトリを作成できません(Unable to create destination directory)"と表示される場合。
一度images/temp/を削除して新たにtemp/を作成し、パーミッションを777に変更してみてください。
また、〜から〜への変更が出来ませんでした。と表示される場合も、該当フォルダにおいて同じ操作をしてみてください。
もっとも簡単な方法です。 LocalSettings.phpに、
$wgUseImageMagick = false;
と書く。これだけ。
1.14x以降では動かないのかもしれない、、、。
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の表示がうまくいかない。
$wgMaxShellMemory = 131072;