Annonce ToutSurTout

Bienvenue sur toutsurtout.biz

Déjà 15 ans !

Radio TST

Si vous souhaitez participer vous aussi aux discussions sur le forum, il faut vous inscrire ou vous identifier.

Le Thème TST Automne est maintenant en place.

Les inscriptions sont actuellement OUVERTES.

Message 1 Discussion postée le 22-12-2013 à 10:43:06

Philippe
Avatar de Philippe


Titre: Banni
Avancement: Niveau 3
Date d'inscription: 26-09-2009
Messages: 3 660

Téléchargement de fichiers par lots

Je viens de me réaliser un petit script de "batch download" en PHP (téléchargement par lot, en bon français) et me disais qu'il pourrait être intéressant de vous le partager avec quelques petites explications.

L'histoire

Comme vous le savez peut-être déjà, le site Wallbase.cc ==> http://wallbase.cc/ (merveilleux site de wallpapers, sans pub, très agréable à naviguer et très bien fourni) est en train de mourir depuis quelques mois, du fait de la disparition de son administrateur.

De plus, depuis peu quelqu'un (par le biais d'un bot ?) est en train de supprimer tous les fonds d'écran du site, et les modérateurs galèrent à freiner ce problème ==> http://wallbase.cc/forum/topic/5863/60 . Ils conseillent donc de télécharger les wallpapers qu'on a mis en favoris avant que ceux-ci ne disparaissent.

C'est donc ce que j'ai fait, aidé d'un script Greasemonkey ==> http://userscripts.org/scripts/show/180620 pour récupérer plus rapidement les liens de téléchargement. Ensuite, j'aurais pu donner un petit coup de DownThemAll! et le tour était joué. Mais j'ai préféré scripter ça et envoyer direct sur mon propre serveur.

Edit 2013-12-22 : j'ai même l'impression que c'est pire que cela. Le forum ne semble plus accessibles (certains fichiers manquants ?). Mais si c'est effectivement une attaque, elle me semble plutôt étrange...

Le principe

En réalité, tout repose sur une fonction PHP bien simple nommée copy() ==> http://www.php.net/manual/en/function.copy.php . Celle-ci permet, comme vous vous en doutez, de copier un fichier d'un emplacement à un autre, et ce même depuis une URL (du moins depuis PHP 4.3).

Ainsi, pour copier une image d'un autre serveur vers le votre, il suffit de faire :

$result = copy(
    'http://www.example.com/image.jpg', /* other server */
    '/var/www/my-images/image.jpg'      /* your server */
);

Le reste de mon script n'est en fait qu'un ensemble de commodités :

    . multiples URLs : saisie dans un textarea des URLs de tous les fichiers à récupérer (une URL par ligne)
    . Erreurs : affichage d'un log des réussites et échecs de téléchargement
    . Téléchargement groupé : compression de tous les fichiers dans un ZIP pour pouvoir les télécharger en une fois

Vous pouvez vous-même choisir le nom du zip généré. Si vous demandez à regénérer un zip du même nom, l'ancien sera écrasé. Ainsi, si vous avez besoin d'en créer plusieurs en vue de les récupérer plus tard, c'est possible.
Configuration requise

    PHP 4.3 ou supérieur (à vérifier, PHP 5 conseillé)
    Droits d'écriture sur le dossier où vous placerez le script. A noter que des sous-dossier et des fichiers zips seront créés et supprimés, il est donc préférable de donner au script son propre dossier.

Le code complet :

http://pastebin.com/tGCfSPvR

Edit : J'ai créé un pastebin, où je pourrai faire d'éventuelles révisions, et où vous pourrez me faire vos remarques.

Conclusion

Certes, le code est encore un peu grossier ( j'ai envie de dire). Mais à défaut de la vie, il m'aura au moins sauvé mes favoris Wallbase.cc. Comme toujours, si vous avez des critiques ou questions, je suis à votre écoute smile


https://www.world-lolo.com/images/uploads/image.num1445754529.of.world-lolo.com.jpg
Des stades aux entrées payantes sont pleins de gens qui pensent que ceux qu'ils applaudissent sont trop payés, et les bibliothèques à l'entrée gratuite sont vides des gens qui pensent que les livres sont trop chers ...