Déterminer la composition d'un dossier Zip

Eléphant du PHP | 256 Messages

08 juil. 2010, 09:45

Bonjour,

J'aimerai savoir comment connaître la composition d'un répertoire Zip avant sa décompression...

En effet, les dossier Zip sont généralement sous deux formes :
-> répertoire -> fichiers (cas 1),
-> répertoire -> sous-répertoire -> fichiers (cas 2),
selon la méthode utilisée.

Or, quand on demande la décompression avec Php, dans le cas 2, les fichiers décompressés le seront sous le nom du répertoire... Mais, dans le cas 1, les fichiers seront décompressés à la racine du site.

Au cas particulier, j'use de la syntaxe...
exec("unzip $tmp_file");
Comment pallier à cet inconvénient pour le dossier s'extrait *toujours* sous un répertoire spécifique ?

Ou ai-je raté quelque chose ? :mrgreen:

Merci pour votre aide.

Cordialement,

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 10:19

tu peux voir avec l'extension zip
$zip 	= zip_open('D:\viewvc-1.1.6.zip');	
$file 	= zip_read($zip);
	
var_dump(zip_entry_name($file));

Eléphant du PHP | 256 Messages

08 juil. 2010, 11:12

Bonjour,

Merci encore une fois, Stealth, pour ta disponiblité.

Bon, j'arrive au résultat suivant, passablement moche...
$zip    = zip_open('foo.zip');     
$file   = zip_read($zip);
if (preg_match("/jpg|png|gif/i", zip_entry_name($file))) // Mon dossier est composé exclusivement d'images, et je prévois le cas 'JPG' et 'jpg'
{
echo 'ok';
}
else
{
echo 'nok';
}
Voilà, voilà, mais bon... :D

Merci.

Cordialement,

Gaspard

Eléphant du PHP | 256 Messages

08 juil. 2010, 12:19

Re...

Bon, sur Wampp, ça fonctionnait parfaitement. :D

Hélas, sur mon serveur de production, Zip n'est pas activé. :(

Dommage. Je continue à chercher.

Edit.

Avec la classe "zip.ib.php", la syntaxe est la même ? Car, même en l'incluant, ça ne fonctionne pas.

Merci.

Cordialement,

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 13:16

Re...

Bon, sur Wampp, ça fonctionnait parfaitement. :D

Hélas, sur mon serveur de production, Zip n'est pas activé. :(

Dommage. Je continue à chercher.

Edit.

Avec la classe "zip.ib.php", la syntaxe est la même ? Car, même en l'incluant, ça ne fonctionne pas.

Merci.

Cordialement,

Gaspard
t'es chez quel herbergeur ?

Eléphant du PHP | 256 Messages

08 juil. 2010, 15:14

Bonjour,

Pour répondre à ta question (ne te moque pas !), je suis mon propre hébergeur avec Kimsufi. :mrgreen:

Cordialement,

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 15:15

Bonjour,

Pour répondre à ta question (ne te moque pas !), je suis mon propre hébergeur avec Kimsufi. :mrgreen:

Cordialement,

Gaspard
tien mieux tu peux donc installer l'extension zip ;)

Eléphant du PHP | 422 Messages

08 juil. 2010, 15:16

bas tu n'as qu'a activer l'extension sur ton serveur

sur tu linux ou microsoft ?
toujours faire une recherche sur http://www.php.net et/ou sur http://www.google.fr :)
utiliser http://ideone.com/ pour vos codes :)

Eléphant du PHP | 256 Messages

08 juil. 2010, 15:57

Bonjour,

Assurément, Messieurs, j'ai la main sur mon serveur en totalité. Je peux même utiliser des commandes barbares comme rm -rf /*. Mais, bon, je ne suis un grand spécialiste de l'administration de système, et je veux laisser mon serveur opérationnel.

De plus, l'inconvénient de la solution .Zip est qu'elle n'est pas vraiment portable.

Aussi m'achemine-je vers une solution plus simple, qui sent bon la bricole :
- décompresser l'archive ;
- compter les éléments qui composent l'archive ;
- s'il y a un seul élément, les images sont dans le sous-dossier ---> traitement 1 ;
- s'il y a plusieurs éléments, alors les images sont dans le dossier ----> traitement 2.

Jusque là, ma solution fonctionne. Maintenant, je dois domestiquer le passage du sous-dossier à une autre répertoire.

Je vous tiens au courant. :wink:

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 16:01

un simple

Code : Tout sélectionner

sudo pecl install zip
:wink:

Eléphant du PHP | 256 Messages

08 juil. 2010, 16:04

Hi !

Si je plante mon serveur avec ta commande (qui me semble néanmoins de bon aloi), je te donne mes codes, et tu réinstalles le serveur. :D

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 16:08

Hi !

Si je plante mon serveur avec ta commande (qui me semble néanmoins de bon aloi), je te donne mes codes, et tu réinstalles le serveur. :D

Gaspard
en plus ca depend du serveur :D
si t'es sous un type debian c'est une autre commande

Eléphant du PHP | 256 Messages

08 juil. 2010, 16:32

Re...

Oui, c'est une autre commande, "emerge", car mon serveur est sous Gentoo, une "Release 2" dans le jargon d'Ovh... Enfin, d'après ce que viens de lire à droite et à gauche, il est assez difificle d'installer et de recompiler, car l'installation d'origine n'est pas merveilleuse... Donc, je vais revenir à mon comptage de fichiers, et je te raconte.

Gaspard

ViPHP
ViPHP | 5462 Messages

08 juil. 2010, 16:33

Re...

Oui, c'est une autre commande, "emerge", car mon serveur est sous Gentoo, une "Release 2" dans le jargon d'Ovh... Enfin, d'après ce que viens de lire à droite et à gauche, il est assez difificle d'installer et de recompiler, car l'installation d'origine n'est pas merveilleuse... Donc, je vais revenir à mon comptage de fichiers, et je te raconte.

Gaspard

pas besion de recompiler c'est juste l'ajout d'une extension :wink:
sinon essaye avec une lib

Eléphant du PHP | 256 Messages

08 juil. 2010, 17:52

Re...

En fait, la lib est installée, j'ai eu l'indication en voulaire faire une nouvelle installation. :)

Code : Tout sélectionner

pecl/zip 1.10.2 A zip management extension
Cependant, j'ai modifié mon php.ini ainsi (ligne 470)...

Code : Tout sélectionner

; Directory in which the loadable extensions (modules) reside. ;extension_dir = "./" extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/" extension=zip.so
mais le serveur ne prend rien en compte.

Merci.

Cordialement,

Gaspard