Bonjour à tous,
Je travaille sur un script de migration entre un forum basé sur Connectix Boards et un PhpBB3.
Jusqu'ici mon script gère :
- importation et l'ordonnancement des forums, sous-forums et sous-sous-forums, avec leur description etc... OK.
- conversion des noms de fichiers d'avatar puis import des avatars, OK.
- import des utilisateurs, OK
Pour importer les utilisateurs, j'ai fait une boucle qui traite une quantité prédéfinie d'utilisateurs, avec à chaque tour de boucle, une pause dont la durée est paramétrable, pour laisser souffler le serveur et faire en sorte que le forum ne soit pas trop impacté pendant la manip. Il y a même plusieurs niveaux de pause (tous les 10, tous les 100...) avec des temps de "repos" plus longs.
Ensuite j'ai adapté la quantité d'utilisateurs à traiter au temps que mettait le lot à passer, avant que le timeout arrive. Je dis "timeout" mais je ne suis pas sûr du terme, mais en gros au delà d'une certaine durée, je me retrouve avec une erreur 500 et je dois recharger mon script pour reprendre.
Si l'import se passe assez vite pour éviter le "timeout", j'ai un bouton pour relancer.
Au final je passais mes utilisateurs par paquet de 500, et j'en avais 25000 à faire, à 20-40s le paquet, un peu long mais ça c'est bien passé.
Je vais refaire le même système pour l'import des sujets, par contre j'en ai 50000, j'aimerais bien ne pas avoir à déclencher à la main petit lot par petit lot.
Et surtout le pire ça sera les messages, là y'en a plus de 1,5 million, pas question de les passer par paquet de 500.
J'ai utilisé set_time_limit(0); et ignore_user_abort(1); mais ça ne semblait pas avoir d'impact significatif et j'avais toujours des erreurs 500 si je tentais des paquets trop gros ou utilisait des pauses un peu longues (ma grosse pause était réglée sur 2/10ème de seconde au final, pas si grosse pause que ça)
Mon idée actuelle serait de lancer l'exécution de mon script en arrière plan, en lui ajoutant un peu de log comme ça je peux me mettre en "tail -f" sur le fichier de log et observer ce qui se passe, et ajouter aussi des conditions d'interruption automatique (pas la peine qu'il bute 5min sur un enregistrement qui le bloque). Et surtout je veux un truc qui peut tourner tranquillement toute la nuit (ou plus) parce qu'il y a beaucoup de données à migrer et je ne veux pas avoir à agir pendant le traitement, juste avoir la possibilité de contrôler que ça avance bien.
Mais peut-être que vous aurez des conseils ou des idées plus lumineuses que moi sur la question.
Merci![]()
Partager