Comment transférer plus rapidement un site Web sur un hébergement mutualisé

Sur une connexion béninoise, j’ai réduit mon temps de déploiement d’un site Web de quatre heures à trente minutes.

Trois problèmes, une solution…

Lors de l’upload d’un site Web, les connexions à bas débits posent plusieurs problèmes et le premier est l’intégrité des fichiers. Je prends l’exemple d’un projet à base de WordPress classique : plus de mille trois cents fichiers et dossiers. En les transférant directement par un logiciel client FTP sur une connexion un peu faible, le risque que l’un des fichiers n’arrive pas entier est élevé.

Les problèmes suivants sont la bande passante et le temps de transfert. Transférer des centaines de petits fichiers demande de nombreuses commandes FTP. Les transférer en une seule opération est moins couteux en bande passante et en temps. Le site est en outre composé de nombreux fichiers textuels qui gagneraient à être compressés le temps de l’upload.

Nous allons donc compresser tout le site Web avant de le transférer.

Il nous faudra ensuite le décompresser sur le serveur distant. En hébergement mutualisé nos n’avons pas accès au shell distant via SSH. Notre seul outil est le langage PHP. Utilisons-le.

PHP donne accès au shell du serveur au travers des commandes exec, passthru et system. La dernière affiche la sortie de la commande et donc les éventuels messages d’erreurs, c’est elle que nous utiliserons. Certains hébergeurs proposent aussi un module ZipArchive. Nous avons donc l’embarras du choix.

La procédure à suivre

  1. Compresser le site Web en un seul fichier « deploy.tar.bz2 » ou « deploy.tar.gz ».
  2. Depuis le client FTP (par exemple FileZilla), sur l’hébergement distant, créer un dossier caché .tmp1234 (pour une plus grande sécurité, remplacer « tmp1234 » par un code de votre choix). Puis y transférer le fichier compressé ainsi que le fichier PHP chargé de la décompression. Je donne plus bas les codes PHP pour les différents formats.
  3. Depuis un navigateur, charger la page PHP de décompression. Par exemple : www.votre-site-web.com/.tmp1234/uncompress-tarbz2.php.
  4. Depuis le client FTP, rafraichir l’affichage du contenu du dossier caché. Le site Web décompressé s’y trouve. Le déplacer à la racine ou au bon endroit dans le site via un glisser-déplacer sur le dossier parent ...
  5. Depuis le client FTP toujours, supprimer le dossier caché et son contenu (le fichier compressé et la PHP de décompression).

Codes PHP de décompression

Vous choisirez le fichier PHP qu’il vous faut selon le format de compression.

Décompresser le format .tar.bz2

Le contenu du fichier uncompress-tarbz2.php :

<?php
$res = system('tar -xjf deploy.tar.bz2');
echo $res === false ? 'failed' : 'ok';

Décompresser le format .tar.gz

Le contenu du fichier uncompress-targz.php :

<?php
$res = system('tar -xzf deploy.tar.gz');
echo $res === false ? 'failed' : 'ok';

Décompresser le format .zip par le module PHP

Le contenu du fichier uncompress-zip.php ne fonctionnera pas sur tous les hébergeurs. Il s’appuie sur le module ZipArchive de PHP :

<?php
$zip = new ZipArchive();
$res = $zip->open('deploy.zip');
if ($res === true) {
	$zip->extractTo('./');
	$zip->close();
	echo 'ok';
} else
	echo 'failed';

Décompresser le format .zip par la commande Shell

Si l’utilitaire unzip est installé chez l’hébergeur, on peut tenter de décompresser les fichiers .zip par le shell. Voici le contenu de uncompress-zip-alt.php :

<?php
$res = system('unzip deploy.zip');
echo $res === false ? 'failed' : 'ok';

One Response to Comment transférer plus rapidement un site Web sur un hébergement mutualisé

  1. luattic says:

    Merci, cet article m’a bien aidé pour la décompression d’une archive d’un site contenant dossiers et sous dossiers.
    Toutes les méthodes que j’avais essayé ne voulaient pas reproduire l’arborescence de l’archive, jusqu’à cette page.

    cordialement, H.F.M@3aC

Leave a Reply

Your email address will not be published. Required fields are marked *

Mesure anti-spam. Merci de copier le code « 007MaI » dans le champ ci-dessous :