私が理解しているように、ステータスは汎用ビットフラグを含むアーカイブ暗号化です。これを ZipArchive::statname() で確認してみるのですが、この方法では情報を取得できないようです。
他に何ができますか?アーカイブを読んでヘッダーを解析しますか? system() を呼び出すことができることはわかっていますが、その特異性のためにこのメソッドを使用したくありません (この関数をホストしている一部は無効になっています)。
私が理解しているように、ステータスは汎用ビットフラグを含むアーカイブ暗号化です。これを ZipArchive::statname() で確認してみるのですが、この方法では情報を取得できないようです。
他に何ができますか?アーカイブを読んでヘッダーを解析しますか? system() を呼び出すことができることはわかっていますが、その特異性のためにこのメソッドを使用したくありません (この関数をホストしている一部は無効になっています)。
ZIPファイルヘッダー:(暗号化されたファイルと通常のファイル)
09
暗号化フラグのようです。
7番目のバイトが0x09
function zip_is_encrypted($filename) {
$handle = fopen($filename, "rb");
$contents = fread($handle, 7);
fclose($handle);
return $contents[6] == 0x09;
}
ZIP 標準は次のとおりです: http://www.pkware.com/documents/casestudies/APPNOTE.TXT。
セクション 4.3.7 から:
4.3.7 Local file header:
local file header signature 4 bytes (0x04034b50)
version needed to extract 2 bytes
general purpose bit flag 2 bytes
compression method 2 bytes
...
セクション 4.4.4 から:
4.4.4 general purpose bit flag: (2 bytes)
Bit 0: If set, indicates that the file is encrypted.
...
したがって、バイト全体ではなく、7 番目のバイトの FIRST BIT をチェックする必要があります。各ファイルは個別に暗号化できるため、各ファイルのチェックを行う必要があります (セクション 4.3.6)。