Maison >développement back-end >tutoriel php >Comment décompresser en toute sécurité des fichiers à partir d'une URL en PHP ?

Comment décompresser en toute sécurité des fichiers à partir d'une URL en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-10 21:42:21494parcourir

How to Safely Unzip Files from a URL in PHP?

Décompression de fichier en PHP

Vous souhaitez décompresser un fichier en PHP mais vous rencontrez des difficultés lorsque vous essayez de transmettre le nom du fichier via l'URL . Examinons le problème et vous proposons une solution.

Analyse des erreurs

Vous obtenez le nom du fichier via $_GET, mais le $HTTP_GET_VARS obsolète est utilisé dans le code, PHP recommande d'utiliser $_GET. De plus, vous utilisez system('unzip $master.zip') pour décompresser le fichier, ce qui est dangereux car cela nécessite l'exécution d'un appel système sur le serveur.

Solution recommandée

PHP fournit une extension spécialement conçue pour gérer les fichiers compressés, à savoir ZipArchive. Il est recommandé de l'utiliser comme ceci :

$zip = new ZipArchive;
$res = $zip->open('file.zip');
if ($res === TRUE) {
  $zip->extractTo('/myzips/extract_path/');
  $zip->close();
  echo '解压成功!';
} else {
  echo '解压失败!';
}

Gérer les chemins relatifs

Si vous souhaitez que le fichier soit extrait dans le même répertoire que le fichier, vous peut déterminer le fichier de Chemin absolu et spécifiez-le comme cible de décompression comme ceci :

$file = 'file.zip';
$path = pathinfo(realpath($file), PATHINFO_DIRNAME);
$zip = new ZipArchive;
$res = $zip->open($file);
if ($res === TRUE) {
  $zip->extractTo($path);
  $zip->close();
  echo "解压成功! $file 已解压到 $path";
} else {
  echo "解压失败!无法打开 $file";
}

Conseils de sécurité

Validez toujours les entrées de l'utilisateur pour empêcher l'injection de code malveillant. N'oubliez pas :

Validez toujours les entrées des utilisateurs !

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!

Déclaration:
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