extracción corrupta con ZipArchive en PHP

msoutopico:

Tengo un script PHP que debe descomprimir algunos archivos. Las subidas son carpetas para llevar, básicamente los archivos zip con una extensión personalizada.

Estoy teniendo problemas con algunos archivos zip empaquetados en una sola máquina, pero no con la misma carpeta envasados ​​en otra máquina. En ambos casos, la compresión se realiza con la misma biblioteca de Java.

Este es el resultado esperado, que entonces PHP adicionales Procesos: la extracción correcta

Este es el resultado dañada, lo que hace PHP estrangulador: extracción dañado

Si miro a sus permisos, esto es lo que veo ( 01_Origno está mal, 02_Modifestá dañado):permisos

Si miro a los dos paquetes con unzip -l(el primero está bien, el segundo es corrupto):descomprimir -l

Y esta es mi función de PHP (que es el mismo en ambos casos):

$uploads = "uploads_dir/";
$dir = new DirectoryIterator("uploads_dir/");

foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {
        $filename = $fileinfo->getFilename();
        $zip = new ZipArchive;
        $res = $zip->open($uploads . $fileinfo);
        if ($res === TRUE) {
            $zip->extractTo($uploads . $filename . "_extracted");
            $zip->close();
        } else {
            echo "Unable to unzip";
        }
    }
}

Both uploads look fine when I manually unzip or open them with 7zip in my Windows machine.

If I create two hex dumps of both zip files and compare them, this is what I get: https://gist.github.com/msoutopico/22a9ef647381c2e4d26313f135c526e2

Thanks a lot in advance for any tips.

UPDATE:

In case it's relevant, the zip files are created (saved) in a linux server, and both machines where this is done (the one that works, and the one that corrupt the package) run Windows 10.

msoutopico :

Ordenado. La versión 2 del complemento fue ajustado para transformar separadores de ruta a partir \de /nombres de archivo. Ahora, a pesar de que la versión 3 del plugin se ha instalado en ambas máquinas, en la máquina defectuosa había también una más antigua (versión 1, anterior a ese pellizco), que es la que se estaba utilizando en lugar de la versión 3. Justo retirar el duplicado versión 1 ha solucionado el problema. @pmqs tenía razón. Gracias a todos por ayudarme a resolver rápidamente este!

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=277830&siteId=1
Recomendado
Clasificación