MPEG2形式の画像と無圧縮のWAV形式の音声データを多く含むコースがあります.フォルダ内のファイルの合計が20GBを超えます.
cronによる定期的なバックアップが未完(どうやら失敗)するコースがあるので調べたらこのコースでした.多分,今後もzip化を限界まで試みて諦めるのでしょう...
そこで考えたのは,config.php(fs_moodleならばfsconfig.php)で指定した拡張子のファイルが指定されたサイズを超えるならばバックアップを行なわない,という機能です.手動でのバックアップも失敗すると思いますので,自分でファイルを指定してzip書庫化をする場合以外はzip書庫のリストから強制的に排除する.
たとえば拡張子mpgでファイルサイズが100MBを越えるとか,拡張子*(全てのファイル.拡張子が存在しないファイルも含む)でファイルサイズが500MBを越えるとか.このような指定をArray()に入れて指定する.
$nobackup['ext'] = 'mpg'; $nobackup['size'] = '100MB';
$nobackups[] = $nobackup;
$nobackup['ext'] = '*'; $nobackup['size'] = '500MB';
$nobackups[] = $nobackup;
このように設定したら,
speach1.mpg (90MB)はバックアップするが speach2.mpg(120MB)はバックアップしない.
spaech3.wav (200MB)はバックアップするが,speach4.wav(600MB)はバックアップしない.
もし,サイズに'0'を指定,あるいはサイズが指定されていない場合はサイズとは無関係に該当する拡張子のファイルはバックアップしない.
一応,どの辺りに仕掛ければ良いのかのメドは立っています.
困ったことに,zip_files()でpclzipライブラリを呼び出す前にリストから削除する手は使えません.zip_files()にはzip書庫化を行なうカレントフォルダのファイル/フォルダ群の名前しか渡しません.サブディレクトリ内のファイルを含む全リストの取得はpclzip内で行ないます.したがって改造はpclzipのfunction create()内です.コースファイルのバックアップを行なうためにzip_files()を呼んだときだけ拡張子/ファイル名をチェックするように,フラグをセットしてからzip_files()を呼ぶという方針です.
このような機能は需要があるものでしょうか? そもそもバックアップに失敗するようなサーバが脆弱すぎる,と言われれば仕方はありません--; 皆さんの管理しているサイトでこのようなコースのバックアップに失敗している事例というものはあるでしょうか?
もちろん,1GBを越える複数のファイルはブラウザ経由ではなくサーバに直接,私がコピーしました.小さなサイズのファイル群ならば手元でzip書庫化してからアップロードし,Moodle上で展開をするのですが.Moodle2.0からこの手が使えなくなると困る,まさにそんな実例です.