Page 1 sur 1
compresser un repertoire (BZIP ou GZIP)
Posté : 21 mars 2006, 18:18
par Lorenzo
je me demande comment compresser directement un repertoire avec PHP sans etre obligé de gerer fichier par fichier a l'interieur de l'archive ...
le gros probleme c'est que j'ai pas loin de 100000 fichiers a compresser et ensuite a envoyer sur un serveur distant et a decompresser sur ce serveur
donc je me vois mal utiliser la soluce de la classe d'archive perso.
une idée ?
linux peut etre de la partie
merci
Posté : 21 mars 2006, 20:26
par rami
Tu as le droit d'exécuter des commandes sur le serveur? Genre tar par exemple?
Posté : 21 mars 2006, 22:03
par Hubert Roksor
À tout hasard, comment transfères-tu ces fichiers et pourquoi les archives-tu ?
Par exemple, si le transfert s'effectue par FTP tu pourrais probablement activer la compression de données et les uploader directement. Ça prendrait un petit peu plus de temps, mais guère plus que l'archivage/désarchivage.
Posté : 22 mars 2006, 00:14
par Lorenzo
-le serveur de destination est tres bouclé niveau sécu par contre j'ai le controle total du serveur de depart sur lequel les fichiers sont crées.
je ne suis pas certain pour le tar, je vais demander.
-il faut une archive pour que le transfert des 100000 fichiers ne dure pas pres de 18h (d'apres un test) ... avec ca ne va pas durer plus de 50mn.
l'archive permet aussi de contourner le probleme des noms de repertoires qui utilisent des caracteres japonais/arabe/hindie/.... le transfert par FTP detruit completement ces noms ou bloque dessus
donc l'archive est obligatoire !
la connexion SSH n'est pas dispo, donc juste une connexion FTP ...
-la compression auto des données pour le transfert FTP n'est surement pas la bonne solution, ce qui pose probleme c'est pas le poids des fichiers qui ne depasse pas les 135Mo mais le nombre de fichiers c'est ce qui utilise le plus de temps lors du transfert.
amuse toi a telecharger/envoyer 10000 fichiers de 0.1Ko ou 1 fichier de 1Mo ... tu vas voir la difference au niveau du temps pour la meme quantité de données-> c'est X10 !
Posté : 22 mars 2006, 11:12
par zigz4g
Salut.
Si Linux est une possibilite, pourquoi ne pas faire un script crontab pour faire la compression de tes fichiers. Il est aussi possible de lancer du php en ligne de commande dans une crontab.
Si tu peux utiliser tar, utilise exec() de php. Il faut bien faire attention aux droits de l'utilisateur qui lance ton script pour permettre les droits de faire un tar sur tes fichiers. J'avais utilisé sudo pour avoir une meilleure qualité de sécurité.
Un autre outil que je viens de mettre en place est dar que tu trouveras sur
http://dar.linux.free.fr/. Il est aussi simple d'utilisation que tar et à plusieurs avantages comme la compression en gzip ou bzip2, la possibilité de mettre dans l'archive le programme en lui même, de faire plusieurs archive pour être stockées sur cdrom et de faire des archives différentielles.
Je trouve cette outil bien pratique pour faire des backups de gros volumes sans faire du stockage inutile. Il permet aussi de ne pas inclure des répertoires et enlever des fichiers de certains types en fonction des extensions. Je crois même que l'on peut faire des backups de système windows, enfin c'est marquer dans la doc mais je n'ai pas essayé.
Posté : 23 mars 2006, 20:48
par Lorenzo
merci les gars !
la soluce utilisé sera un exec() sur la commande tar, ca donne quelque chose dans ce genre (de tete) :
Code : Tout sélectionner
exec("cd /data/htdocs/projet_lolo/; tar c alternate.tar ./");
il ne faut pas trop de temps pour faire la compression, a peine 20mn .
Posté : 23 mars 2006, 22:48
par Hubert Roksor
C'est bizarre, j'aurais pû jurer que j'avais posté deux fois dans ce thread. Content de voir que tu as trouvé une solution satisfaisante, c'est clair que vu le profil des fichiers les uploader un par un serait une mauvaise idée.
Posté : 24 mars 2006, 11:00
par Lorenzo
oui, je pense aussi

surtout que je viens de relancer une generation des fichiers apres avoir remarqué que j'avais tout simplement oublié d'activer certaines classes dans le fichier de config

.... ca vient de me rajouter + de 15000 fichiers ...
pour ceux que ca interesse, voici la bonne commande que j'utilise a la fin du PHP :
exec("cd ".DEST_DIR."../; tar -cf alternate.tar ./projet_lolo");
// ya aussi celle la pour tester les liens mais ne fonctionne pas comme je l'aurais voulu ...
exec("checklink -r -D 10 -b -q ".DEST_URL."' > ~/Desktop/checlink.log');
Posté : 24 mars 2006, 11:38
par Ripat
Avec les options -cf tu ne compresses pas. Tu ne fais que créer une archive qui occupe le même volume que l'original.
Essaye -czf (gzip) ou -cjf (bzip2 - plus rapide, mais pas supporté par toutes les distro).
Posté : 24 mars 2006, 15:01
par Lorenzo
ah exact, je viens de faire un test et la difference avec ou sans le "v" est enorme ... par contre avec le "j" je vois pas de vraie difference avec le "v", la taille de l'archive est juste inferieur de 1%
Posté : 24 mars 2006, 15:49
par Hermès
Le j c'est pas pour avoir du bzip2 justement, comme la souligné Ripat ?
Posté : 24 mars 2006, 20:52
par Lorenzo
si si, mais je pensais avoir un difference bien visible au niveau de la taille de l'archive ... hors les 2 compressions sont equivalentes .
Posté : 25 mars 2006, 00:02
par zigz4g
Sous bzip2, tu peux choisir un niveau de compression. Lis le man mais normallement ca vas de 0 a 9 ou 9 est le plus compresser et le 0 le moins. C'est peut etre l'inverse. Bien sur si tu compresse plus, tu prendra plus de temps.