当方でも再現しました。なるほど、この問題はかなり奥が深いですね...
とにかくいろいろな要素が絡んでいます。
まず第一にPHP側がMAX_FILE_SIZEのPOSTを(若干)越えたもののアップロードを
許容している点があります。これにより$_FILESに該当ファイルが入って処理が
続行されます。(PHPのバグでしょうか)
そして先にも書きましたが、以下のコードが正常に動作していないので処理が
続行されます
if (strlen($content) > EWIKI_IMAGE_MAXSIZE) {
ewiki_die(ewiki_t("BIN_IMGTOOLARGE"), $return);
return;
}
これは$contentが空なので常に無視されるのですが、それよりも問題なのが
その前の処理です。
#-- resize image
if (strpos($mime,"image/")!==false) {
if ($pf_a = $ewiki_plugins["image_resize"]) {
foreach ($pf_a as $pf) {
if (EWIKI_IMAGE_RESIZE && (filesize($filename) > EWIKI_IMAGE_MAXSIZE)) {
$pf($filename, $mime, $return);
clearstatcache();
}}}}
ここでGDを使ったリサイズを行っているのは良いのですが、tmpファイルを
勝手にリネームしてしまっています(resize imageが走る前と後で$filenameを
プリントしてみるとわかりやすいです)
/tmp/phpoIHD4E こういったtmpファイルが
/tmp/phpoIHD4E.jpeg このように.jpegの拡張子を付けられてリネームされて
しまっています。
リサイズした後でファイルサイズのチェックをしても正確な値が取れる
わけがないのはおいておいて、tmpファイルがリネームされてしまって
いますから、実際にアップロードされたファイルを処理するmove_uploaded_fileという
関数がlib/uploadlib.phpにあるのですが、これが正常に動作せず、falseを返しています。
(指定されたtmpfileを取りにいっているにもかかわらず見つけられないためと思われます)
if (move_uploaded_file($this->files[$i]['tmp_name'], $destination.'/'.$this->files[$i]['name'])) {}
これによりエラーになっているようですが、エラーメッセージがログうんぬんのような
あやしい原因までは見れていません。
解決策という解決策も見当たらないですが、とりあえずewikiのイメージリサイズは
moodleと相当相性がよくないようなのでこれをコメントアウトしてしまっても良い
かもしれません。
さらには、filesizeを正確に調べるのであればstrlen()ではなくfilesize()を
使うように修正します(本来はPHPが提供している$_FILESの中身の数値を見た方が
楽なのですが、この関数内だとキーが取れないのでちょっと厳しそうです)
#-- resize image
/*
if (strpos($mime,"image/")!==false) {
if ($pf_a = $ewiki_plugins["image_resize"]) {
foreach ($pf_a as $pf) {
if (EWIKI_IMAGE_RESIZE && (filesize($filename) > EWIKI_IMAGE_MAXSIZE)) {
$pf($filename, $mime, $return);
clearstatcache();
}}}}
*/
#-- reject image if too large
if (filesize($filename) > EWIKI_IMAGE_MAXSIZE) {
ewiki_die(ewiki_t("BIN_IMGTOOLARGE"), $return);
return;
}
とりあえず応急処置的ですが、もうちょっとスマートなfixがあればよろしくお願いします。