ConFoo: Call for paper is now Open

ZipArchive::statIndex

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

ZipArchive::statIndexRécupère les détails d'une entrée définie par son index

Description

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

Cette fonction obtient des informations d'une entrée définie par son index.

Liste de paramètres

index

Index de l'entrée

flags

ZipArchive::FL_UNCHANGED permet d'obtenir les informations du fichier original de l'archive, ignorant toutes les modifications effectuées

Valeurs de retour

Retourne un tableau contenant les détails de l'entrée ou FALSE si une erreur survient.

Exemples

Exemple #1 Récupère les informations d'une entrée

<?php
$zip 
= new ZipArchive;
$res $zip->open('test.zip');
if (
$res === TRUE) {
    
print_r($zip->statIndex(3));
    
$zip->close();
} else {
    echo 
'échec, code:' $res;
}
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

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 2 notes

up
0
Chris Lewis
2 years ago
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']);
up
0
Anonymous
2 years ago
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!";
}
?>
To Top