L'extension PHP Ziparchive offre aux développeurs la possibilité de faire fonctionner des fichiers ZIP dans PHP. Pour s'assurer que le projet est sûr et fiable, certaines meilleures pratiques doivent être suivies pour éviter des erreurs inattendues ou des risques de sécurité potentiels.
Ziparchive ne vérifie pas l'intégrité des fichiers ZIP par défaut, ce qui peut entraîner des fichiers malveillants extraits ou des fichiers existants écrasés. Le mode sûr peut être activé de la manière suivante:
<span class="fun">$ zip-> open ("archive.zip", ziparchive :: Create | ziparchive :: recouvrir | ziparchive :: checkCons);</span>
Par défaut, Ziparchive permet d'accéder à n'importe quel fichier ou répertoire. Pour une sécurité accrue, vous pouvez spécifier les fichiers et les répertoires à emballer:
$zip->setArchiveComment("Archives sûres");
$zip->addFromPath("files/important.txt");
Vérifiez l'intégrité des archives pour éviter d'extraire des fichiers corrompus avant d'extraire:
if ($zip->statusSys === ZIPARCHIVE::ER_OK) {
// Archivé en entier,Peut être extrait
} else {
// Archive corrompue,Rejeter le retrait
}
La protection des mots de passe doit être utilisée pour les archives contenant des données sensibles:
<span class="fun">$ zip-> setpassword ("je suis en sécurité");</span>
Définissez la taille maximale du fichier pour un seul fichier ou des archives entières pour empêcher les téléchargements malveillants ou les fichiers surdimensionnés:
<span class="fun">$ zip-> setMaxSize (1024000); // limite à 1 Mo</span>
Par défaut, Ziparchive ne suit pas les liens symboliques. Les méthodes suivantes peuvent être utilisées:
<span class="fun">$ zip-> setExternalAttributesName ("sym.link", ziparchive :: opsys_unix, ziparchive :: opsys_unix_symLink);</span>
Lors de la création ou de l'extraction d'archives, il est recommandé d'utiliser des répertoires temporaires pour éviter de créer des fichiers inutiles sur le serveur:
<span class="fun">$ zip-> setTempdir (sys_get_temp_dir ());</span>
Après avoir terminé l'opération, l'objet ziparchive et les ressources connexes doivent être libérés à l'aide de la méthode Close () pour empêcher la fuite des ressources:
<span class="fun">$ zip-> close ();</span>
Une erreur peut se produire pendant le processus d'utilisation de ziparchive. Vous pouvez obtenir les informations d'erreur via getStatusstring () et les gérer:
if ($zip->getStatusString() === ZIPARCHIVE::ER_INCONS) {
// Les archives sont incohérentes,Rejeter le fonctionnement
}
Avant d'utiliser Ziparchive dans un environnement de production, vous devez tester pleinement le code, vérifier la sécurité, la fiabilité et les performances, et enregistrer la mise en œuvre en détail pour que l'équipe comprenne.
L'exemple suivant montre comment utiliser Ziparchive pour emballer les fichiers par les meilleures pratiques:
<?PHP
$zip = new ZipArchive();
$zip->open("archive.zip", ZipArchive::CREATE | ZipArchive::OVERWRITE | ZipArchive::CHECKCONS);
$zip->setArchiveComment("Archives sûres");
$zip->addFromPath("files/important.txt");
$zip->setExternalAttributesName("sym.link", ZipArchive::OPSYS_UNIX, ZipArchive::OPSYS_UNIX_SYMLINK);
$zip->setMaxSize(1024000);
$zip->setTempDir(sys_get_temp_dir());
$zip->close();
?>
Suite à ces meilleures pratiques, les développeurs peuvent utiliser PHP Ziparchive pour étendre l'emballage sécurisé et fiable et l'extraction des données, empêchant efficacement les vulnérabilités de sécurité, la perte de données et les problèmes de performances.