トータルで2GBを越えるようなコースファイルを含むコースのバックアップに関しては,現状,PHPの制限により正しくバックアップが取れない可能性が高いことが分かってきました.
バックアップをZIPファイルに圧縮する点に関しては外部ZIPプログラムを利用することで問題を回避できますが,バックアップしたzipファイルをコースに書き戻す処理(copy())で問題が生じます.この書き戻す処理はcopy()関数の代わりにrename()関数を用いることで回避できます.以下にMoodle1.9でのソースコードの変更点を示します(完全に確認をとった訳ではありません).
backup/backuplib.php, function copy_zip_to_course_dir()
//Copy zip file
if ($status) {
// (TEST): 以下コメントアウト
// $status = backup_copy_file ($from_zip_file,$to_zip_file);
// (TEST): ここから追加
umask(0000);
if (rename($from_zip_file,$to_zip_file)) {
chmod($to_zip_file,$CFG->directorypermissions);
$status = true;
} else {
$status = false;
}
// (TEST): ここまで追加
}
return $status;
}
これで2GBを越えるバックアップファイルを作成できると思われますが,まだそれだけで問題は終わりません.Moodleのファイルエディタでこの作成されたバックアップファイルのサイズを表示すると,実体よりも小さな値(正直な話,ムチャクチャな値)が表示されます.多分,ブラウザ経由でのダウンロードにも失敗するでしょう.”リスト”でzip書庫の中身をリスト表示するのもうまくいかない可能性があります.”展開”や”リストア”も失敗すると思います.
ただし,”展開”や”リストア”はunzipプログラムのパスを指定して外部zipプログラムを利用すれば機能する可能性があります.未確認です.
#もし2GBを越えるファイルをPHPが正しくコピーできないのであるとすると,ブラウザ経由でアップロードしたり,ダウンロードしたりする作業も一見正しく行えていて,実はファイルを壊している可能性がありますね.できるだけ早く調査したいと思います.Linux利用者の方も,チェック頂けると助かります.