現在,WindowsXP SP3上で,PHP5.2.0を利用しています.
何気なくbackupdataフォルダの中を見てみたところ,ファイルサイズの表示が添付ファイルのような状態になっていました.マイナス! ちなみにbackupdataフォルダ自体のサイズは2GBと表示されました.2GB + 2GB + 2GB - 2GB - 2GB + 108バイトで2GBなのでしょうか...
ファイルシステムにNTFSを使用していますので2GBだろうと4GBだろうと問題無いのですが,多分,これはWindows版PHPが2GBを越えるファイルに対応できていないということでしょうか...一応,ZIPファイルが作成され,それがコピーできたということだとは思うのですが...filesize()の戻り値がおかしいだけだと祈ります.
以下のようなPHPプログラムを作成して動作確認を行ったところ,
function display_size($size) {
static $gb, $mb, $kb, $b;
if (empty($gb)) {
$gb = 'GB';
$mb = 'MB';
$kb = 'KB';
$b = 'byte';
}
if ($size >= 1073741824) {
$size = round($size / 1073741824 * 10) / 10 . $gb;
} else if ($size >= 1048576) {
$size = round($size / 1048576 * 10) / 10 . $mb;
} else if ($size >= 1024) {
$size = round($size / 1024 * 10) / 10 . $kb;
} else {
$size = $size .' '. $b;
}
return $size;
}
$size = 4;
for ($i = 1; $i <= 5; $i++) {
echo $size.'-> '.display_size($size).'<br/>';
$size *= 1024;
}
出力結果は,
4-> 4 byte
4096-> 4KB
4194304-> 4MB
4294967296-> 4GB
4.3980465111E+012-> 4096GB
ご覧の通りに正しく表示されますので,整数値がオーバーフローしている訳では無さそうです.少なくとも4294967296が整数値として取り扱い可能な訳ですから.
そろそろPHP5.2.0からPHP5.2.6へ変える潮時でしょうか.