cs_sjon
Messages postés861Date d'inscriptionmardi 26 mars 2002StatutMembreDernière intervention29 novembre 2006
-
1 mars 2006 à 04:16
titanserver
Messages postés8Date d'inscriptionlundi 3 mars 2003StatutMembreDernière intervention31 janvier 2011
-
28 août 2010 à 12:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
jsfouss
Messages postés14Date d'inscriptiondimanche 2 juillet 2006StatutMembreDernière intervention17 février 2011 25 janv. 2008 à 12:28
J'ai moi aussi le même problème avec mon hébergeur.
Fatal error: Call to undefined function zip_open() in /home/bisouren/public_html/unzip.php on line 11
cs_max35
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention13 juin 2009 20 nov. 2007 à 15:52
ryu2005 ta version de PHP ne prend pas en charge cette fonction. ;)
M@x.
ryu2005
Messages postés2Date d'inscriptionmercredi 21 décembre 2005StatutMembreDernière intervention 4 novembre 2007 4 nov. 2007 à 13:54
Fatal error: Call to undefined function zip_open() in C:\Program Files\EasyPHP 2.0b1\www\unzip.php on line 11
c'est nulll
cs_max35
Messages postés15Date d'inscriptionlundi 13 mars 2006StatutMembreDernière intervention13 juin 2009 2 nov. 2007 à 17:23
Bonjour,
Ce script fonctionne correctement seulement j'aimerais conserver l'arborescence de mon fichier zip (Répertoires)
Merci de votre aide.
djmoa
Messages postés39Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention27 mai 2009 18 juin 2007 à 02:58
petite réaction sur ce qu'a dit "toover le 19/06/2006 21:44:53"
Tu dis que généralement, l'hébergeur limite l'espace mémoire à 16Mo, mais généralement aussi il limite la taille d'envoie de fichiers à 2Mo, donc ca ne devrai te réstreinde que si tu envoie ton zip par FTP...
Sinon pour la limite des 2Mo, j'ai posé une source, il manque encore a faire un programme Java pour le coté client, mais ca semble marcher
Pour la limite des 16Mo, dans la librairie zip.lib.php, il semble que les fichiers sont codés indépendament les uns des autres, donc tu pourrais charger les fichiers un a un au lieu de charger tout le zip. au lieu d'avoir la limite ZIP + Dézipé < 16Mo ca ne s'appliquerai qu'a chaque fichier compressé... ca devrai permetre d'envoyer des zip des plusieurs dizaines au centaines de Mo, mais n'ayant pas de fichier indiciduels jusqu'à 8Mo: photos et courtes videos!!
enfin, il me semble, j'espère que vous aurez au moins compri l'idée plus ou moins :D
jdeheyn
Messages postés23Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention14 janvier 2010 23 févr. 2007 à 17:19
Bonjour,
La source de Darkduck ne semble pas fonctionne en PHP5.
Quelqu'un peut me dire si le code donné par Larr fonctionne avec le version 5 de PHP ?
cs_lesucces
Messages postés8Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention20 août 2011 1 déc. 2006 à 17:47
Bonjour
J'éssaie votre script ( script de darduck ) sous easyphp 1.8 mais j'ai cette erreure:
Fatal error: Call to undefined function: zip_open() in c:\program files\easyphp1-8\www\maxime\essaie.php on line 9
Merci de me dire où se trouve le problème et comment savoir si mon serveur dont je n'ai accès qu'au php info accepte la fonction zip_open.
Je viens souvent voir cette page en attente d'une réponse
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 25 juin 2006 à 14:17
Pour les header je vais me debrouiller.
Je viens de faire un test et ca passe :)
toover
Messages postés4Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention25 juin 2006 25 juin 2006 à 12:49
Ca devrait être possible, il suffit que ton php retourne $data, qui contient les données décompressées du fichier.
(rajoute "return $data" à la place de tous les trucs qui servent à écrire le fichier)
Mais pour ce qui est des headers php je ne saurais pas trop quoi mettre pour être sûr que ce soit interprété comme il faut.
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 25 juin 2006 à 12:35
ca marche nikel merci toover !
Je vais essayer d'adapter ca. Je me demande si on peux inclure l'extraction directement dans un force-download sans passer par un fichier sur le serveur ca evite de devoir faire le menage :)
toover
Messages postés4Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention25 juin 2006 25 juin 2006 à 11:04
J'aimerais énormément aussi, ça c'est sûr. J'ai bien cherché sur php.net et rien ne montre que c'est possible. Toutes les fonctions zip du php travaillent sur des "ressources zip", c'est à dire qu'il faut obligatoirement lancer zip_open() pour y accéder. Et c'est là le problème parce que zip_open() ne fonctionne pas si le fichier à décompresser est plus gros que la limite d'allocation de mémoire.
Sinon pour décompresser un seul fichier en général je pense que tu peux faire ça:
function extraireFichier($fichier_zip,$a_extraire,$dossier_destination) {
if(file_exists($fichier_zip)) {
if($ressource_zip = zip_open($fichier_zip)) {
while($zip_entry = zip_read($ressource_zip)) {
if (zip_entry_open($ressource_zip, $zip_entry, "r")) {
if($a_extraire == zip_entry_name($zip_entry)) {
$trouve = true;
$data = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$fichier_extrait = "$dossier_destination/$a_extraire";
$stream = fopen($fichier_extrait, "w");
fwrite($stream, $data);
echo'extraction de: '.$a_extraire;
zip_close($ressource_zip);
}
} else echo "pas d'entrée correspondante";
}
} else echo "fichier zip invalide";
} else echo "fichier zip inexistant!";
if(!$trouve) echo "fichier à extraire absent du zip!";
}
Je viens de le faire il peut y avoir des bugs mais je l'ai testé pour un cas et c t opé.
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 25 juin 2006 à 06:39
J'aimerais connaitre la methode pour decompresser un seul fichier moi :s
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 23 juin 2006 à 11:56
Si je ne me trompe pas, le code permet de decompresser l'archive en totalité. Pourquoi ne pas l'adapter pour extraire un seul fichier du ZIP (un peu à la maniere CodeS-SourceS quand on est membres Club ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 20 juin 2006 à 10:21
Hello,
Toover => encore faut-il que ton hébergeur t'autorise à utiliser des exec (), system() et cie, ce dont je doute fort. A moins que ce ne soit un hébergement pro dédié, évidemment.
toover
Messages postés4Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention25 juin 2006 19 juin 2006 à 21:44
lol;
Mais ça perd tout le côté pratique qui était de n'avoir à sélectionner qu'un seul fichier... Et il n'existe pas de méthode pour intéragir du côté du client pour lister tout le contenu d'un dossier! Donc j'insiste sur ma question finalement, après avoir fouiné un peu partout.
Qu'en est-il du dézippage par les commandes linux via le php?
(i.e http://fr3.php.net/manual/fr/function.zip-open.php#56434) Ces commandes n'utilisent sûrement pas la mémoire allouée au php... Cela semble-t-il possible de dézipper directement avec le linux de l'hébergeur via php?
Arrêtez-moi si je dis des bêtises...
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 19 juin 2006 à 21:27
Bah t'envoie plusieurs fichiers... :p
toover
Messages postés4Date d'inscriptionmercredi 5 octobre 2005StatutMembreDernière intervention25 juin 2006 19 juin 2006 à 20:52
Bonjour.
La source de php.net est au poil, c'est celle que je conseillerais.
Cependant il reste un problème: dans le cas d'un gros fichier zip, ce script met en mémoire tout le zip. Or certains serveurs limitent l'allocation en mémoire pour le php à 16MO. Et impossible d'accéder au php.ini.
Donc comment faire pour dézipper un gros fichier sans saturer la mémoire? Une question encore un peu "dans le vent" étant donné que je ne me suis pas encore vraiment pris la tête sur ce problème.
cs_laurentmars
Messages postés6Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention11 mai 2006 11 mai 2006 à 09:57
Salut tous,
j'ai un problème de droit avec le dezippage. Je suis sur un serveur dédié fedora dont je n'ai pas les droits root. Lorsque je dézippe un fichier sur le serveur, tout fonctionne (j'utilises une librairie pclzip), mais je suis sur un serveur plesk.
Mon groupe est "psacln", et les fichiers dezippés sont du groupe "apache". Il m'est donc impossible de modifier ou supprimer les répertoires et fichiers créés. Y a t'il une technique pour pouvoir au moment du dezippage faire executer le script avec comme groupe psacln (sans avoir recours à un suexec ou suphp vu que je n'ai pas les droits root?)
Quelqu'un a t'il été confronté à ce problème?
pumbaak
Messages postés9Date d'inscriptionmardi 30 mars 2004StatutMembreDernière intervention17 avril 2006 17 avril 2006 à 02:45
Honnetement je n'en sais rien...c'est un hébergement chez OVH mutualisé...
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 16 avril 2006 à 20:39
La je t'avoue que je suis perplexe, tu tournes sur quel serveur ?
pumbaak
Messages postés9Date d'inscriptionmardi 30 mars 2004StatutMembreDernière intervention17 avril 2006 16 avril 2006 à 15:53
Effectivement, je viens de tout passer en chmod "777" et j'ai ce message, différent donc du 1er... :
"Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request."
pumbaak
Messages postés9Date d'inscriptionmardi 30 mars 2004StatutMembreDernière intervention17 avril 2006 16 avril 2006 à 15:50
Effectivement, je viens de tout passer en chmod "777" et j'ai ce message, différent donc du 1er... :
"Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request."
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 16 avril 2006 à 15:26
Bah dans un sens si, sinon il ne dirais pas "Cannot open zip archive", c'est peut être un problème au niveau des permissions...
cs_darkduck
Messages postés138Date d'inscriptionvendredi 28 février 2003StatutMembreDernière intervention29 février 20081 16 avril 2006 à 15:08
Le module de décompression de fichier zip ne doit pas etre installé sur le serveur que tu utilises
pumbaak
Messages postés9Date d'inscriptionmardi 30 mars 2004StatutMembreDernière intervention17 avril 2006 16 avril 2006 à 12:33
Franchement, je n'arive pas à m'en servir, comment faire ? j'ai Uploader un fichier "archive.zip" et "unzip.php" sur mon FTP....j'appelle la page unzip.php dans mon explorer...
rien ne se passe : "Warning: zip_open() Cannot open zip archive util.zip in /home.2/monsite/www/unzip.php on line 11
Le fichier zip contenait 0 fichier(s) :"
????
Help please...
larr
Messages postés38Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 3 février 2010 17 mars 2006 à 17:56
essais de changer le chmod du script
Mezmerize
Messages postés1Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention17 mars 2006 17 mars 2006 à 16:52
J'ai essayé d'utiliser le script fourni par Larr, seulement j'ai 3 types d'erreurs qui me sont renvoyées :
Warning: mkdir(...): Permission denied in ... on line 40
Warning: fopen(...): failed to open stream: No such file or directory in ... on line 52
Warning: fwrite(): supplied argument is not a valid stream resource in ... on line 53
extracting: ...
Les points de suspensions étant les noms de fichiers bien entendu.
D'où cela peut il provenir?
Merci d'avance.
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 12 mars 2006 à 22:43
Si tu as Easyphp va dans le répertoire ou tu l'a installé et lance phpini.exe et la tu active zlib.dll (tout en bas de la liste) et voilà, t'as l'extention Zip !
nemoDreamer
Messages postés5Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention12 mars 2006 12 mars 2006 à 17:39
mon build de php n'inclut pas le support zip, seulement gz et tar... tu peux me dire quelles extensions dll tu as activé dans ton php.ini pour que cela marche?
merci d'avance!
larr
Messages postés38Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 3 février 2010 12 mars 2006 à 16:25
normalement y'a pas besoin de changer dans la conf d'apache j'ai testé sur des version de php 4.* et 5.* j'ai pas eu besoin de changer qqchose dans le php.ini
nemoDreamer
Messages postés5Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention12 mars 2006 12 mars 2006 à 16:22
aaaaah!
solide.
malheureusement, je n'ai toujours pas pu installer le support zip sur mon apache/php... :(
larr
Messages postés38Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 3 février 2010 10 mars 2006 à 19:30
---
pour deziper
$dir = "" ; ## ou alors /home/votresite/www
$file = "nomdufichier" ; ## sans metre .zip il s'en charge tout seul
unzip($dir, $file, 1);
de source php.net
nemoDreamer
Messages postés5Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention12 mars 2006 10 mars 2006 à 18:39
et pour des noms de fichier avec plus qu'un point?! :)
non, il doit y avoir une manière de parcourir les répertoires du ZIP recursivement, pour ensuite créer les DIR's requis. faudra probablement recommencer la source à zéro, en pensant aussi aux divers cas d'erreurs...
aze555666
Messages postés208Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention26 janvier 2009 10 mars 2006 à 18:28
il faut ajouter une fonction ajoutant des / à la place des . , sauf si c'est le point de l'extension.
larr
Messages postés38Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 3 février 2010 9 mars 2006 à 19:28
Bah dans mon zip il y avait plein de sous repertoire
et ton scripte a en faite crée des fichiers nomé
repertoire.fichier.php
au lieu de creer un repertoire et d'y inclure le fichier.php
cs_darkduck
Messages postés138Date d'inscriptionvendredi 28 février 2003StatutMembreDernière intervention29 février 20081 9 mars 2006 à 19:20
Salut, comment ça la gestion des sous répertoires ?
Il suffit de mettre dans $path le chemin du sous-répertoire de destination et s'il n'est pas créé, il y a une création automatique.
Ex : si $path 'repertoire/sous1/sous2/';> Ne pas oublié le slash / à la fin
Il y aura création (s'ils n'existent pas) des répertoires "repertoire", "sous1" et "sous2"
larr
Messages postés38Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention 3 février 2010 9 mars 2006 à 17:39
je trouve cette source pratique mais il manque la gestion des sous repertoire
nemoDreamer
Messages postés5Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention12 mars 2006 7 mars 2006 à 11:40
yes, je viens de m'en rendre compte...
aussi:
"Zip File Functions (Read Only Access): zip_open(): This module uses the functions of the » ZZIPlib library by Guido Draheim. You need ZZIPlib version >= 0.10.6."
et en télechargeant la dll requise (zzip-1.dll de http://zziplib.sourceforge.net/), je n'arrive pas à la faire accepter par PHP. apparement, le packet à aussi besoin de zlib-1.dll, qui n'est pas inclus dans cette distribution...
le recherche continue...
le comble: mon serveur distant ne veut rien savoir de zip_open()... :(
cs_darkduck
Messages postés138Date d'inscriptionvendredi 28 février 2003StatutMembreDernière intervention29 février 20081 7 mars 2006 à 10:50
Cela reviens a activer l'extension php_zip mais ça ne prend pas en compte les ZIP uniquement les archives TAR ou GZ je crois
nemoDreamer
Messages postés5Date d'inscriptiondimanche 16 mai 2004StatutMembreDernière intervention12 mars 2006 7 mars 2006 à 10:32
pour activer zip_open():
décommenter la ligne
extension=php_zip.dll
dans php.ini....
mais cela me donne qd même un "Warning: zip_open() Cannot open zip archive ...". Je suis en train de voir si je peux résoudre ça par un update de mon extension...
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 6 mars 2006 à 23:54
y'a une source sur ce site qui zippe les fichiers sur serveurs, je ne sais plus laquelle c'est mais ca ne doit pas être très compliqué de la retrouver...
aller @+
aze555666
Messages postés208Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention26 janvier 2009 6 mars 2006 à 19:48
c'est vrai que ce serait pratique de pouvoir ziper, par exmeple pour pouvoir récupérer plusieurs fichiers sur son site si on n'a as accès au ftp (si je veux modifier mon site à partirs du lycée, par exemple).
Pour la fonction open_zip, il y a surement moyen de la reprogrammer. Il faut bien sur les spécifications du format zip mais ça doit se trouver.
WhiteDwarf
Messages postés510Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention23 mai 2008 3 mars 2006 à 16:29
Ca peu servir effectivement, j'ai développé un code comme celui ci pour mon web FTP, ca permet d'uploader des fichier zip, et ensuite le serveur les décompresse et remplace les fichiers du site par ceux présents dans le zip, c'est pas mal et rapide... donc je pense que c'est un code qui peut avoir une bonne utilitée :)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 1 mars 2006 à 09:26
Hello,
je suis d'accord pour le niveau 'initié', c'est un peu élevé pour le niveau du source.
D'autant plus que la programmation pourrait être perfectible...
while ($zip_entry = zip_read($zip)) : tu n'as pas tenu compte de ce que je t'ai déjà dit sur le forum.
Le principe est le même que readdir() :
while (false !($zip_entry zip_read ($zip)))
Ici : $zip zip_open($file); puisque tu testes $zip après, tu devrais mettre un $zip @zip_open ($file);
Et retourner false, ou un message d'erreur, si le fichier n'a pas pu être ouvert (plutôt qu'un tableau vide...).
Ensuite, tu utilises 2 fois zip_entry_name (), ce qui est inutile, tu pourrais ne l'appeler qu'une fois, le stocker dans une variable et réutiliser cette variable par la suite.
Ces détails mis à part (j'en ai sans doute oublié), pourquoi pas, on a peu de sources de ce genre.
cs_sjon
Messages postés861Date d'inscriptionmardi 26 mars 2002StatutMembreDernière intervention29 novembre 20061 1 mars 2006 à 05:21
Niveau solution windows : WAMP ...
cs_sjon
Messages postés861Date d'inscriptionmardi 26 mars 2002StatutMembreDernière intervention29 novembre 20061 1 mars 2006 à 04:19
PS : Notez que je ne juge point la valeur " codesque " ici j'en suis incapable ...
cs_sjon
Messages postés861Date d'inscriptionmardi 26 mars 2002StatutMembreDernière intervention29 novembre 20061 1 mars 2006 à 04:16
Généralement on cherche plutöt à compresser les fichiers côté serveur pour gagner de l'espace disque
et notament lors d'un upload ...
28 août 2010 à 12:01
Marche nikel, cependant j'aimerais exclure certaines extension de fichiers lors du désippage, par exemple interdire les .php et .exe
Une idée ?
13 oct. 2008 à 07:55
ya pas de quoi :)
A+
13 oct. 2008 à 07:50
Merci,
17 avril 2008 à 13:36
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/mon/dossier/destination/');
$zip->close();
echo 'ok';
} else {
echo 'échec';
}
?>
25 janv. 2008 à 12:28
Fatal error: Call to undefined function zip_open() in /home/bisouren/public_html/unzip.php on line 11
20 nov. 2007 à 15:52
M@x.
4 nov. 2007 à 13:54
c'est nulll
2 nov. 2007 à 17:23
Ce script fonctionne correctement seulement j'aimerais conserver l'arborescence de mon fichier zip (Répertoires)
Merci de votre aide.
18 juin 2007 à 02:58
Tu dis que généralement, l'hébergeur limite l'espace mémoire à 16Mo, mais généralement aussi il limite la taille d'envoie de fichiers à 2Mo, donc ca ne devrai te réstreinde que si tu envoie ton zip par FTP...
Sinon pour la limite des 2Mo, j'ai posé une source, il manque encore a faire un programme Java pour le coté client, mais ca semble marcher
Pour la limite des 16Mo, dans la librairie zip.lib.php, il semble que les fichiers sont codés indépendament les uns des autres, donc tu pourrais charger les fichiers un a un au lieu de charger tout le zip. au lieu d'avoir la limite ZIP + Dézipé < 16Mo ca ne s'appliquerai qu'a chaque fichier compressé... ca devrai permetre d'envoyer des zip des plusieurs dizaines au centaines de Mo, mais n'ayant pas de fichier indiciduels jusqu'à 8Mo: photos et courtes videos!!
enfin, il me semble, j'espère que vous aurez au moins compri l'idée plus ou moins :D
23 févr. 2007 à 17:19
La source de Darkduck ne semble pas fonctionne en PHP5.
Quelqu'un peut me dire si le code donné par Larr fonctionne avec le version 5 de PHP ?
1 déc. 2006 à 17:47
J'éssaie votre script ( script de darduck ) sous easyphp 1.8 mais j'ai cette erreure:
Fatal error: Call to undefined function: zip_open() in c:\program files\easyphp1-8\www\maxime\essaie.php on line 9
Merci de me dire où se trouve le problème et comment savoir si mon serveur dont je n'ai accès qu'au php info accepte la fonction zip_open.
Je viens souvent voir cette page en attente d'une réponse
25 juin 2006 à 14:17
Je viens de faire un test et ca passe :)
25 juin 2006 à 12:49
(rajoute "return $data" à la place de tous les trucs qui servent à écrire le fichier)
Mais pour ce qui est des headers php je ne saurais pas trop quoi mettre pour être sûr que ce soit interprété comme il faut.
25 juin 2006 à 12:35
Je vais essayer d'adapter ca. Je me demande si on peux inclure l'extraction directement dans un force-download sans passer par un fichier sur le serveur ca evite de devoir faire le menage :)
25 juin 2006 à 11:04
Sinon pour décompresser un seul fichier en général je pense que tu peux faire ça:
function extraireFichier($fichier_zip,$a_extraire,$dossier_destination) {
if(file_exists($fichier_zip)) {
if($ressource_zip = zip_open($fichier_zip)) {
while($zip_entry = zip_read($ressource_zip)) {
if (zip_entry_open($ressource_zip, $zip_entry, "r")) {
if($a_extraire == zip_entry_name($zip_entry)) {
$trouve = true;
$data = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$fichier_extrait = "$dossier_destination/$a_extraire";
$stream = fopen($fichier_extrait, "w");
fwrite($stream, $data);
echo'extraction de: '.$a_extraire;
zip_close($ressource_zip);
}
} else echo "pas d'entrée correspondante";
}
} else echo "fichier zip invalide";
} else echo "fichier zip inexistant!";
if(!$trouve) echo "fichier à extraire absent du zip!";
}
Je viens de le faire il peut y avoir des bugs mais je l'ai testé pour un cas et c t opé.
25 juin 2006 à 06:39
23 juin 2006 à 11:56
20 juin 2006 à 10:21
Toover => encore faut-il que ton hébergeur t'autorise à utiliser des exec (), system() et cie, ce dont je doute fort. A moins que ce ne soit un hébergement pro dédié, évidemment.
19 juin 2006 à 21:44
Mais ça perd tout le côté pratique qui était de n'avoir à sélectionner qu'un seul fichier... Et il n'existe pas de méthode pour intéragir du côté du client pour lister tout le contenu d'un dossier! Donc j'insiste sur ma question finalement, après avoir fouiné un peu partout.
Qu'en est-il du dézippage par les commandes linux via le php?
(i.e http://fr3.php.net/manual/fr/function.zip-open.php#56434)
Ces commandes n'utilisent sûrement pas la mémoire allouée au php... Cela semble-t-il possible de dézipper directement avec le linux de l'hébergeur via php?
Arrêtez-moi si je dis des bêtises...
19 juin 2006 à 21:27
19 juin 2006 à 20:52
La source de php.net est au poil, c'est celle que je conseillerais.
Cependant il reste un problème: dans le cas d'un gros fichier zip, ce script met en mémoire tout le zip. Or certains serveurs limitent l'allocation en mémoire pour le php à 16MO. Et impossible d'accéder au php.ini.
Donc comment faire pour dézipper un gros fichier sans saturer la mémoire? Une question encore un peu "dans le vent" étant donné que je ne me suis pas encore vraiment pris la tête sur ce problème.
11 mai 2006 à 09:57
j'ai un problème de droit avec le dezippage. Je suis sur un serveur dédié fedora dont je n'ai pas les droits root. Lorsque je dézippe un fichier sur le serveur, tout fonctionne (j'utilises une librairie pclzip), mais je suis sur un serveur plesk.
Mon groupe est "psacln", et les fichiers dezippés sont du groupe "apache". Il m'est donc impossible de modifier ou supprimer les répertoires et fichiers créés. Y a t'il une technique pour pouvoir au moment du dezippage faire executer le script avec comme groupe psacln (sans avoir recours à un suexec ou suphp vu que je n'ai pas les droits root?)
Quelqu'un a t'il été confronté à ce problème?
17 avril 2006 à 02:45
16 avril 2006 à 20:39
16 avril 2006 à 15:53
"Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request."
16 avril 2006 à 15:50
"Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request."
16 avril 2006 à 15:26
16 avril 2006 à 15:08
16 avril 2006 à 12:33
rien ne se passe : "Warning: zip_open() Cannot open zip archive util.zip in /home.2/monsite/www/unzip.php on line 11
Le fichier zip contenait 0 fichier(s) :"
????
Help please...
17 mars 2006 à 17:56
17 mars 2006 à 16:52
Warning: mkdir(...): Permission denied in ... on line 40
Warning: fopen(...): failed to open stream: No such file or directory in ... on line 52
Warning: fwrite(): supplied argument is not a valid stream resource in ... on line 53
extracting: ...
Les points de suspensions étant les noms de fichiers bien entendu.
D'où cela peut il provenir?
Merci d'avance.
12 mars 2006 à 22:43
12 mars 2006 à 17:39
merci d'avance!
12 mars 2006 à 16:25
12 mars 2006 à 16:22
solide.
malheureusement, je n'ai toujours pas pu installer le support zip sur mon apache/php... :(
10 mars 2006 à 19:30
$dir_path = "$dir$file";
$zip_path = "$dir$file.zip";
$ERROR_MSGS[0] = "OK";
$ERROR_MSGS[1] = "Zip path $zip_path doesn't exists.";
$ERROR_MSGS[2] = "Directory $dir_path for unzip the pack already exists, impossible continue.";
$ERROR_MSGS[3] = "Error while opening the $zip_path file.";
$ERROR = 0;
if (file_exists($zip_path)) {
if (!file_exists($dir_path)) {
mkdir($dir_path);
if (($link = zip_open($zip_path))) {
while (($zip_entry = zip_read($link)) && (!$ERROR)) {
if (zip_entry_open($link, $zip_entry, "r")) {
$data = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$dir_name = dirname(zip_entry_name($zip_entry));
$name = zip_entry_name($zip_entry);
if ($name[strlen($name)-1] == '/') {
$base = "$dir_path/";
foreach ( explode("/", $name) as $k) {
$base .= "$k/";
if (!file_exists($base))
mkdir($base);
}
}
else {
$name = "$dir_path/$name";
if ($verbose)
echo "extracting: $name
";
$stream = fopen($name, "w");
fwrite($stream, $data);
}
zip_entry_close($zip_entry);
}
else
$ERROR = 4;
}
zip_close($link);
}
else
$ERROR = "3";
}
else
$ERROR = 2;
}
else
$ERROR = 1;
return $ERROR_MSGS[$ERROR];
}
---
pour deziper
$dir = "" ; ## ou alors /home/votresite/www
$file = "nomdufichier" ; ## sans metre .zip il s'en charge tout seul
unzip($dir, $file, 1);
de source php.net
10 mars 2006 à 18:39
non, il doit y avoir une manière de parcourir les répertoires du ZIP recursivement, pour ensuite créer les DIR's requis. faudra probablement recommencer la source à zéro, en pensant aussi aux divers cas d'erreurs...
10 mars 2006 à 18:28
9 mars 2006 à 19:28
et ton scripte a en faite crée des fichiers nomé
repertoire.fichier.php
au lieu de creer un repertoire et d'y inclure le fichier.php
9 mars 2006 à 19:20
Il suffit de mettre dans $path le chemin du sous-répertoire de destination et s'il n'est pas créé, il y a une création automatique.
Ex : si $path 'repertoire/sous1/sous2/';> Ne pas oublié le slash / à la fin
Il y aura création (s'ils n'existent pas) des répertoires "repertoire", "sous1" et "sous2"
9 mars 2006 à 17:39
7 mars 2006 à 11:40
aussi:
"Zip File Functions (Read Only Access): zip_open(): This module uses the functions of the » ZZIPlib library by Guido Draheim. You need ZZIPlib version >= 0.10.6."
et en télechargeant la dll requise (zzip-1.dll de http://zziplib.sourceforge.net/), je n'arrive pas à la faire accepter par PHP. apparement, le packet à aussi besoin de zlib-1.dll, qui n'est pas inclus dans cette distribution...
le recherche continue...
le comble: mon serveur distant ne veut rien savoir de zip_open()... :(
7 mars 2006 à 10:50
7 mars 2006 à 10:32
décommenter la ligne
extension=php_zip.dll
dans php.ini....
mais cela me donne qd même un "Warning: zip_open() Cannot open zip archive ...". Je suis en train de voir si je peux résoudre ça par un update de mon extension...
6 mars 2006 à 23:54
aller @+
6 mars 2006 à 19:48
Pour la fonction open_zip, il y a surement moyen de la reprogrammer. Il faut bien sur les spécifications du format zip mais ça doit se trouver.
3 mars 2006 à 16:29
1 mars 2006 à 09:26
je suis d'accord pour le niveau 'initié', c'est un peu élevé pour le niveau du source.
D'autant plus que la programmation pourrait être perfectible...
while ($zip_entry = zip_read($zip)) : tu n'as pas tenu compte de ce que je t'ai déjà dit sur le forum.
Le principe est le même que readdir() :
while (false !($zip_entry zip_read ($zip)))
Ici : $zip zip_open($file); puisque tu testes $zip après, tu devrais mettre un $zip @zip_open ($file);
Et retourner false, ou un message d'erreur, si le fichier n'a pas pu être ouvert (plutôt qu'un tableau vide...).
Ensuite, tu utilises 2 fois zip_entry_name (), ce qui est inutile, tu pourrais ne l'appeler qu'une fois, le stocker dans une variable et réutiliser cette variable par la suite.
Ces détails mis à part (j'en ai sans doute oublié), pourquoi pas, on a peu de sources de ce genre.
1 mars 2006 à 05:21
1 mars 2006 à 04:19
1 mars 2006 à 04:16
et notament lors d'un upload ...
Par ailleurs je ne vois pas en quoi cette source est au niveau initié en vu de la documentation : http://fr.php.net/manual/fr/function.zip-read.php par exemple ...
ou encore :
http://fr.php.net/manual/fr/ref.zip.php pour être plus général ...
Mais cela n'appartient qu'à moi ...