Lorsque vous utilisez PHP pour traiter les fichiers ZIP, la fonction zip_read est une interface couramment utilisée pour lire les entrées de fichiers dans un élément de package compressé par élément. Cependant, nous rencontrons parfois des dossiers ou des entrées de fichiers indésirables, tels que le répertoire __MACOSX généré par le système MacOS ou d'autres fichiers cachés. Ces entrées n'ont généralement aucun sens à notre logique métier et peuvent même interférer avec le flux de traitement de fichiers, ils doivent donc être sautés pendant la traversée.
Cet article expliquera comment filtrer ces entrées de fichiers spécifiques lors de l'utilisation de la fonction zip_read .
Voici un exemple simple montrant comment ouvrir un fichier zip et itérer sur les entrées de fichier:
<?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
echo "Found entry: $entryName\n";
}
zip_close($zip);
} else {
echo "Failed to open ZIP file.";
}
?>
Nous devons déterminer le nom de l'entrée actuelle pendant la traversée et exclure les dossiers commençant par __macosx et des entrées non valides similaires.
La clé ici est d'utiliser StrPos de fonction String de Php pour détecter le préfixe du nom d'entrée:
<?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
// franchir __MACOSX Toutes les entrées dans le dossier
if (strpos($entryName, '__MACOSX/') === 0) {
continue;
}
// 还可以franchir其他不想traiter avec的隐藏document,Par exemple .DS_Store
if (basename($entryName) === '.DS_Store') {
continue;
}
// Code de traitement normal
echo "Fichiers de traitement: $entryName\n";
// Vous pouvez ouvrir une entrée pour la lecture des opérations,Par exemple:
if (zip_entry_open($zip, $zipEntry)) {
$contents = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
// traiter avec $contents,Par exemple保存document
zip_entry_close($zipEntry);
}
}
zip_close($zip);
} else {
echo "Impossible d'ouvrir ZIP document";
}
?>
Lorsque vous utilisez ZIP_READ pour lire les entrées ZIP une par une, vérifiez le nom de l'entrée.
Utilisez STRPOS pour déterminer si le nom d'entrée commence par __macosx / et sautez tous les fichiers de ce répertoire.
Dans le même temps, le filtrage peut être effectué pour des noms de fichiers spécifiques (tels que .ds_store ).
Cela peut éviter efficacement le traitement des fichiers système macOS inutiles et améliorer la robustesse et l'efficacité du code.