これがzipファイルで機能することは知っていますが、xlsxファイルについてはよくわかりません。それは試みに値します:
zip アーカイブ内のファイルを一覧表示するには:
$zip = new ZipArchive;
$res = $zip->open('test.zip');
if ($res === TRUE) {
for ($i=0; $i<$zip->numFiles; $i++) {
print_r($zip->statIndex($i));
}
$zip->close();
} else {
echo 'failed, code:' . $res;
}
これにより、すべてのファイルが次のように出力されます。
Array
(
[name] => file.png
[index] => 2
[crc] => -485783131
[size] => 1486337
[mtime] => 1311209860
[comp_size] => 1484832
[comp_method] => 8
)
ここでわかるように、アーカイブごとにsize
とが表示されます。comp_size
アーカイブ爆弾の場合、これら 2 つの数値の比率は天文学的なものになります。解凍したファイルの最大サイズをメガバイト単位で制限し、それを超える場合は、そのファイルをスキップしてユーザーにエラー メッセージを返します。それ以外の場合は、抽出を続行します。詳細については、マニュアルを参照してください。