Page 1 sur 1

Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 12:55
par roselmacsteve
Bonjour à tous,

J'ai une problématique assez urgente...(désolé)

J'essaye de faire une copie de fichier en masse d'une site A vers un site B, en sachant que les noms des fichiers sont contenus dans une table MYSQL que je parcours, puis j'effectue une commande PHP copy. Cela fonctionne mais le soucis est que ma copie comporte plus de 5000 fichiers et au bout de quelques minutes la page plante.

Auriez-vous un script ou un bout de code que je pourrai adapter (et comprendre) pour mon besoin et qui me permettrait depuis ma BDD de faire une copie des fichiers tout en suivant la progression (éviter le gel de la page jusqu'à la fin du script)

Par avance merci pour votre aide.

Cordialement

Steve

:(

Re: Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 13:30
par damien_55
Hello,

Peut etre devrais tu augmenter le temps d'exécution de ton script. Par defaut, ce temps est fixé à 30 secondes.
http://php.net/manual/fr/function.set-time-limit.php

Ensuite, peut etre devrais tu traiter la copy par paquet de 10 ou de 20 au fur et mesure.

Quand au suivi de la copy, une solution est d'éxécuter la copie sur ton autre site, parcourir le dossier dans lequel est placé la copie et vérifier si elle est bien réalisé.

Pour faire des copie massive hebdomadaire d'images, j'ai remarqué que le traitement par paquet, et le vérification des données et la relance de la copie du paquet suivant est plus sur. J'avais un probleme d'intégrité des fichiers copiés. le fichier existait mais soit vide soit partiellement copiés. Cela vient peut etre du fait de lire la source du fichier dans une bdd ensuite de faire la copie. je pense qu'a un moment donné il y a trop de fichiers en cours de copie par rapport à la lecture de la base. Le systeme se perd d'autant plus que le poids des fichiers n'est pas le meme partout.

Tu vois ce que je veux dire: temps de lecture base rapide, temps de copie depend du poids du fichier, trop de fichier dans la queue attente de copie, au bout d'un moment ça explose ou perte d'intégrité de tes données.

Re: Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 14:35
par roselmacsteve
Bonjour Damien et merci pour ta réponse,

J'ai effectivement déjà changé le délai du time-out, mais toujours trop court.

Par quelle méthode tu passes pour traiter par paquet, tu rafraîchis ta page au bout de quelques secondes en indiquant de reprendre à position + 20 par exemple ?

Merci

Steve

Re: Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 23:26
par niuxe
Ça lu,

pour que ton script soit traité indéfiniment, il faut paramétrer time limit à zéro. De mémoire :
ini_set('max_execution_time', 0);
Perso, je ferai comme ceci :
- prendre les données par paquet (10 - 20 - 30 - 40 -50),
- traiter les données (qui fait quoi et comment ) :
- - faire les manipulations nécessaires (copie A -> B),
- - tenir dans un log ou une table temporaire des données reçues (lignes de la table parsée) (est ce que le fichier existe ? est ce que la copie s'est bien déroulée ?),
- rediriger "la page" pour récupérer les 10 - 20 - 30 - 40 -50 prochains paquets

Re: Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 23:41
par damien_55
Re,

Je ne sais plus exactement comment j'avais fait mais il me semble que j'ai mis ça dans des tableaux à deux dimensions. Array(Array())

Le premier pour les paquets et le second pour les fichier a copier à prendre en consideration. et je verifie la condition de copie pour passer au lot suivant.

J'ai pas le script sous les yeux. désolé. :(

Re: Copier des fichiers en masse entre 2 sites

Posté : 12 févr. 2014, 23:48
par damien_55
Re,
je verifie la condition de copie pour passer au lot suivant.
:(
Si la condition n'est pas rempli je recommence la copie avant de passer au lot suivant.

J'oublais ta proposition de rafraichissement marcherai aussi. tu peux passer en parametre la valeur de ton dernier id par exemple ou reprendre à +20.

Comme le soulignais aussi niuxe, l'essentiel est de traité par paquet.

Re: Copier des fichiers en masse entre 2 sites

Posté : 13 févr. 2014, 11:00
par roselmacsteve
Merci pour vos retours,

Effectivement je vais faire un traitement par lot avec rafraîchissement de la page pour traiter les paquets suivants.

Je pense qu'avec du javascript et de l'ajax cela pourrait se faire sans rafraîchir la fenêtre mais dans un premier temps j'opte pour cette méthode un peu brutales mais qui à l'avantage de fonctionner.

Merci

Steve