Naeh.net Le mémo du développeur

16mar/0826

Extraire le contenu d’un zip directement sur son FTP chez free

Dans cette article nous allons voir comment procéder pour dézippé le contenu d'une archive directement sur son FTP free. Ceci peut être très intéressant si on a plusieurs (beaucoup) fichiers à envoyer sur le ftp, parfois ce genre d'upload peut s'avérer très difficile en fonction de la connexion, du logicile client FTP, mais aussi de l'humeur du serveur FTP de chez free. On peut se retrouver avec un certain nombre de fichiers qui ne seront pas envoyé (perdus en route ?!).

L'astuce consiste à mettre tous ses fichiers dans ZIP, uploader le zip sur le FTP et l'extraire sur place avec script PHP. Parce que envoyer UN SEUL fichier quelque soit sa taille, est toujours plus simple que d'en envoyer 36 000.

Pour commencer il faut savoir que Free ne propose aucune librairie PHP pour gérer les archives, donc nous utiliserons une classe de substitution, pour l'exemple, on va utiliser pclzip.

Maintenant, il faut créer un fichier ZIP (test.zip pour l'exemple) dans lequel on mettra tous nos fichiers à uploader sur le FTP.

Ensuite, il faut créer un fichier php (extract.php pour l'exemple) dans lequel on mettra le code suivant (à adapter selon votre cas) :

//Extrait de la documentation de la class.
require_once('pclzip.lib.php');
$archive = new PclZip('test.zip'); //METTRE LE VRAI NOM DU ZIP ;)
//Extrait dans le repertoire courant.
if ($archive->extract() == 0) {
      die("Error : ".$archive->errorInfo(true));
}

maintenant on se retrouve avec 3 fichiers :

  1. extract.php
  2. pclzip.lib.php
  3. test.zip

On peut maintenant envoyer nos 3 fichiers dans le répertoire sensé accueillir les fichiers finaux (contenus dans le zip) sur le FTP.

maintenant prendre son navigateur et aller à l'url http://adresse_du_site.free.fr/repertoire/extract.php

et le tour est joué :-)

N.B. Cette procédure et valable pour tout hébergement mutualisé (ou pas) ne proposant pas les extensions PHP Zlib ou équivalent.

Commentaires (26) Trackbacks (0)
  1. thx it seems to work

  2. Les dossier ne sont pas décompresser par contre ? Il décompresse tous les fichier dans un seul endroit sans tenir compte de leur dossier d’origine !

  3. heu… J’avoue avoir fait un test rapide, j’ai pas souvenir d’un traitement particulier des dossiers/sous-dossier.

  4. la fontion

    function extract($p_path= »./ », $p_remove_path= »")

    permet de spécifier en premier parametre le répertoire où les fichiers sont extraits.
    DAns la version du pclzip.lib.php que j’ai téléchargé, j’ai simplement eu à modifier l’entête de cette fonction.

  5. Heu désoler mais ça marche pas!

  6. Essayez encore, vous verrez que ça marche :-)

  7. bas dans mon fichier extract je fais un copier coller de ce que vous avez fait, ensuite je clique sur extract sur mon site free et il me met ce qui est écrit dans le fichier extract.

  8. le code cité dans le billet est un exemple.

    est-ce que vous avez bien téléchargé la libraire pclzip ? l’avez vous mise sur votre hébergement free ?

    et ensuite le code ci-dessus n’est a prendre telquel, il faut déjà l’entourer de balises < ?php et ?> pour qu’il soit interprété et non pas affiché.

  9. Désoler mais là je ne comprend pas trop!

  10. Ha oui mais les balises je vois pas où les mettre la dessus! Je suis qu’un amateur du HTML!^^

  11. je vous conseille d’aller poser une question su un forum hardware.fr vous trouverez surement plus d’explications.

    bonne chance.

  12. merci bokou, ça marche

  13. Bien plus simple et sans code, chap 3:
    http://mobiloweb.la-metro.org/IMG/pdf/7zip.pdf

  14. @Matt : je connais (et utilise) 7zip mais notre probleme ici est de déposer un grand nombre de fichiers sur le ftp sans en perdre au moment du transfert, d’où la proposition d’envoyer sur le ftp un zip (fait avec 7zip ou autre, peu importe) et de dezipper directement sur le ftp avec php :)

  15. Désolé j’ai parlé un peu vite… EN effet oui

  16. Vu le fonctionnement catastrophique des serveurs ftp de Free.fr, cette idée de script m’a beaucoup aidé. Merci.

  17. je viens d’essayer votre méthode, mais j’ai ce message sur mon site…

    extract() == 0) { die(« Error : « .$archive->errorInfo(true)); } ?>

  18. @renaud :
    le code que je donne plus haut est a mettre dans un fichier php donc un fichier qui commence par

    <?php

    je pense que c’est ça qui vous manque ou bien un commentaire pas fermé, sinon on verrait pas le code source php dans le message d’erreur.

    cf commentaire #8

  19. Super ça fonctionne nikel !

    ps: il ne faut pas oublier les

  20. Pour les gens qui ne sont pas habitué avec le php, il faut rajouter les balises spécifiques au début et à la fin du code :

    < ?php
    //Extrait de la documentation de la class.
    require_once('pclzip.lib.php');
    $archive = new PclZip('test.zip'); //METTRE LE VRAI NOM DU ZIP ;)
    //Extrait dans le repertoire courant.
    if ($archive->extract() == 0) {
    die(« Error : « .$archive->errorInfo(true));
    }
    ?>

    PS merci à la modération d’effacer les messages 20 à 22

  21. Bonjour,

    Mon fichier extract.php est comme ceci

    extract() == 0) {
    die(« Error : « .$archive->errorInfo(true));
    }
    ?>

    j’ai bien telecharger sur mon serveur free :
    - la libraire pclzip.lib.php
    - mon fichier test.zip ( qu est monsite compressé avec izarc )
    - et donc le fihcier extract.php

    le tout mis dans un dossier ’site’ sur mon hebergeur free.
    lorsque ej rentre, avec mozilla sur mon site : http://monsite.free.fr/site
    je vois bien les 3 fichiers
    je clic sur extract.php, et la je vois son contenu.
    et rien ne se passe, aucune décompression…

    Pouvais vous m’aider ???
    Merci.

  22. Ok, j’ai trouvé l’erreur, il faut supprimer l’espace entre <?php le tout collé.

    Mais j'ai cet erreur qui apparait dans mon navigateur :

    Parse error: syntax error, unexpected T_STRING in monsite/site/extract.php on line 7

    Pouvais vous m'aider ??
    merci.

  23. les « posent probleme, il faut remplacer par  » (une double côte => touche 3 et # du clavier) ou ‘ (simple côte => touche 4 du clavier).

    il faut mettre :

    die("Error : " .$archive->errorInfo(true));

    ou :

    die('Error : ' .$archive->errorInfo(true));

    c’est la même chose.

  24. Donc pour nous résumer, voici un exemple de la page extract.php complète (créée avec Dreamweaver) :

    Document sans nom

    hello
    extract() == 0) {
    die(‘Error : ‘ .$archive->errorInfo(true));
    }
    ?>
    world

  25. attention, le code complet de la page que j’ai donné précédemment semble avoir été mangé par l’interface du forum !! glups !!

  26. Bonjour,

    si tu mets du code php dans ton commentaire, il faut l’entourer de :
    < pre lang="php" >CODE PHP < /pre >

    remplacer CODE PHP par le code en question :)

    sans les espaces dans la balise pre

    Bon courage.


Laisser un commentaire


Security Code:

Aucun trackbacks pour l'instant