Dans la mémoire de télécharger et extraire l'archive zip
Je voudrais télécharger une archive zip et décompressez-le dans la mémoire à l'aide de PHP.
C'est ce que j'ai aujourd'hui (et c'est juste beaucoup trop de gestion des fichiers (pour moi 🙂 ):
//download the data file from the real page
copy("http://www.curriculummagic.com/AdvancedBalloons.kmz", "./data/zip.kmz");
//unzip it
$zip = new ZipArchive;
$res = $zip->open('./data/zip.kmz');
if ($res === TRUE) {
$zip->extractTo('./data');
$zip->close();
}
//use the unzipped files...
OriginalL'auteur dacwe | 2011-09-12
Vous devez vous connecter pour publier un commentaire.
Avertissement: Cela ne peut être fait dans la mémoire —
ZipArchive
ne peut pas travailler avec "les fichiers mappés en mémoire".Vous pouvez obtenir les données d'un fichier à l'intérieur d'un fichier zip dans une variable (de mémoire) avec
file_get_contents
Docs comme il prend en charge lazip://
gestionnaire de Flux Docs:Vous ne pouvez accéder à des fichiers locaux avec
zip://
ou via ZipArchive. Pour cela, vous pouvez d'abord copier le contenu d'un fichier temporaire et de travailler avec elle:$zipFile = 'http://..../bla.kmz';
?Non,
zip://
prend uniquement en charge les fichiers locaux (ainsi que ZipArchive). Vous devez l'avoir accessible via votre standard du système de fichiers. Sera mise à jour de la réponse à faire que cela soit visible pour votrehttp
url.Est-ce de travailler avec
php://memory
?Non, empilées les flux ne sont pas pris en charge, je pense que même
file://
ne fonctionne pas. Il doit être le chemin d'accès au système de fichiers. De même pour leZipArchive
classe, je suppose que cela se rapporte à chacun des autres. Les flux ne sont pas bien pris en charge dans le zip d'extension de PHP, qui est un peu dommage à mes yeux. Go pour le fichier temporaire pour travailler autour de cela, le deuxième exemple de code. Vous pouvez encapsuler dans une classe de son propre extension/décoration ZipArchive et de fournir un système de fichier wrapper qui est capable de avoir ce plus à l'aise.Si votre système de fichiers monte un ramdisk, il n'y a pas eu de problème pour avoir
ZipArchive
travail de mémoire - pour ce que c'est important 🙂OriginalL'auteur hakre
Aussi simple que:
OriginalL'auteur Pedro Lobito
Vous pouvez obtenir un flux de données à un fichier dans le zip et l'extraire dans une variable:
$zip
?OriginalL'auteur CodeCaster
Si vous pouvez utiliser les appels système, la façon la plus simple devrait ressembler à ceci (bzip2 cas). Il vous suffit d'utiliser la sortie standard stdout.
OriginalL'auteur user965748