menu
書いてる野郎
orebike@gmail.com
sprintf() [function.sprintf]: Too few arguments in /hoge/piyo/fuga/lib/plugins/plugin/classes/ap_download.class.php on line 117
プラグインの管理をしようとして更新やインストールを行おうとすると、このようなエラーが出て落ちてしまう。
ap_download.class.php on line 117
を確かめる
内部では
msg(sprintf($this->lang['packageinstalled'], count($this->downloaded), join(',',$this->downloaded)), 1);
このような記述になっている。 この
$this-<lang['packageinstalled']
は値として「インストールが成功しました」的なものが入っていて。そこにはsprintfのプレースホルダである%から始まるものが3つ埋めこまれている。
確認してみる。lib/plugins/plugin/lang/ja/lang.php
には
$lang['packageinstalled'] = 'プラグインパッケージ(%d plugin%s: %s)は正しくインストールされました。';
上の記述と照らし合わせるとplugin
直後の%s
が明らかに不自然だ。これだと引数に取った文字列とpluginが連結してしまって意味がわからなくなってしまう。
確認のため英語版を見る。lib/plugins/plugin/lang/en/lang.php
には
$lang['packageinstalled'] = 'Plugin package (%d plugin(s): %s) successfully installed.';
こう書かれている。最後の%d
にはインストールしたプラグインの個数が入り、%s
にはプラグイン名のコンマ連結が入る。
pluginが複数形になるかもしれませんよの「s」だったのにどうまちがったかプレースホルダになってしまったというバグみたいだな。
このバグは
$lang['packageinstalled'] = '%d個のプラグインパッケージ %s は正しくインストールされました。';
に書き換えればなおる。