downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ZipArchive::statName> <ZipArchive::setCommentName
[edit] Last updated: Fri, 25 May 2012

view this page in

ZipArchive::statIndex

(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)

ZipArchive::statIndexインデックスを使用してエントリの詳細を取得する

説明

mixed ZipArchive::statIndex ( int $index [, int $flags ] )

この関数は、インデックスを使用してエントリの詳細情報を取得します。

パラメータ

index

エントリのインデックス。

flags

ZIPARCHIVE::FL_UNCHANGED を OR で連結すると、 アーカイブ内に最初に記録された際の情報を取得します。 変更内容は無視されます。

返り値

エントリの詳細を含む配列を返します。失敗した場合に FALSE を返します。

例1 エントリの情報の出力

<?php
$zip 
= new ZipArchive;
$res $zip->open('test.zip');
if (
$res === TRUE) {
    
print_r($zip->statIndex(3));
    
$zip->close();
} else {
    echo 
'失敗、コード:' $res;
}
?>

上の例の出力は、 たとえば以下のようになります。

Array
(
    [name] => foobar/baz
    [index] => 3
    [crc] => 499465816
    [size] => 27
    [mtime] => 1123164748
    [comp_size] => 24
    [comp_method] => 8
)


add a note add a note User Contributed Notes ZipArchive::statIndex
Chris Lewis 20-Dec-2011 09:15
Note that the signed-integer CRC result is only true on 32-bit systems. 64-bit systems return correct CRCs.

A safer way (as recommended by crc32() function page) might be:

if ($file['crc'] < 0)
   $file['crc'] = sprintf("%u",$file['crc']);
Anonymous 16-Nov-2011 05:20
The CRC returned from this method is a signed number and so can be negative. This isn't how most CRC's are represented and so can cause problems. Another thing to know is that the standerd CRC algorithm used for zip files is CRC32b.

So to put this together lets say that you wanted to extract the first file from a zip and then compare the original CRC with the CRC for the extracted file this is what you would need to do. (proper error checking is omitted for simplicity).

<?php
 $zip
= new ZipArchive();

 
$zip->open("myZip.zip");

 
$stat = $zip->statIndex( 0 );

 
$name = $stat['name'];

 
$oldCrc = $stat['crc'];

 
$zip->extractTo("myPath", $name);

 
$newCrc = hexdec(hash_file("crc32b", "myPath/" . $name));

 
// Have to test both cases as the unsigned CRC from within the zip might appear negative as a signed int.
 
if($newCrc !== $oldCrc && ($oldCrc + 4294967296) !== $newCrc) {
    echo
"The files don't match!";
 }
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites