Maison > développement back-end > Problème PHP > Que faire si le zip de décompression php est tronqué

Que faire si le zip de décompression php est tronqué

藏色散人
Libérer: 2023-03-08 20:06:01
original
2884 Les gens l'ont consulté

Solution pour décompresser le code zip tronqué de PHP : ouvrez d'abord le fichier PHP correspondant ; puis utilisez le protocole d'encapsulation zip de PHP pour décompresser afin de résoudre le code tronqué de ZipArchive.

Que faire si le zip de décompression php est tronqué

L'environnement d'exploitation de cet article : système Windows7, version PHP7.1, ordinateur DELL G3

fichier zip décompressé php tronqué problème

Méthode de fonctionnement officielle :

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
$s = $zip->extractTo($toDir);
print_r(scandir($toDir));
Copier après la connexion

Problèmes existants

Si le zip est compressé sur la plate-forme Windows, l'exécution du code ci-dessus sur le serveur Linux entraînera caractères tronqués, et en même temps Les fichiers décompressés seront également manquants

Solution

Analyse du problème :

Les caractères tronqués de ZipArchive sont causés par des incohérences Encodage, le système de fichiers Windows est codé en gbk, tandis que les noms de fichiers dans PHP ZipArchive sont codés en UTF-8. Si le nom du fichier dans l'archive Zip contient des caractères spéciaux tels que le chinois, il est inévitable d'utiliser PHP ZipArchive pour décompresser les caractères tronqués. La même raison s'applique lorsque les fichiers compressés ZipArchive sont tronqués ou ne peuvent pas être compressés.

Solution

N'utilisez pas la méthode ZipArchive::extractTo() intégrée pour décompresser les fichiers ZipArchive, utilisez PHP à la place, le protocole d'emballage zip est décompressé pour résoudre le code tronqué de ZipArchive.

Résoudre le code

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
if(!file_exists($toDir)) {
   mkdir($toDir);
}
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
   $statInfo = $zip->statIndex($i);
   if($statInfo[&#39;crc&#39;] == 0) {
       //新建目录
       mkdir($toDir.&#39;/&#39;.substr($statInfo[&#39;name&#39;], 0,-1));
   } else {
       //拷贝文件
       copy(&#39;zip://&#39;.$zipfile.&#39;#&#39;.$statInfo[&#39;name&#39;], $toDir.&#39;/&#39;.$statInfo[&#39;name&#39;]);
   }
}
print_r(scandir($toDir));
Copier après la connexion

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal