2010-04-07 11 views
3

J'ai écrit une petite classe FTP que j'ai utilisée pour déplacer des fichiers d'un serveur local vers un serveur distant. Il le fait en vérifiant un tableau de fichiers locaux avec un tableau de fichiers sur le serveur distant. Si le fichier existe sur le serveur distant, il ne prendra pas la peine de le télécharger. Le script fonctionne très bien pour de petites quantités de fichiers, mais j'ai remarqué que le serveur local peut avoir plus de 3000 fichiers image à transférer, cela semble provoquer le flop de script et transférer seulement 100 ou plus .PHP FTP Télécharger des milliers de fichiers

Comment puis-je modifier le script pour gérer potentiellement des milliers de fichiers de transfert d'image?

Répondre

0

Ce qui pourrait arriver est que vous preniez trop de temps pour exécuter le script (ceci ne s'applique pas à php de commandline) si cela arrive votre script sera arrêté par le serveur web. Vous pouvez modifier les paramètres PHP pour corriger cela, mais cela ne sera pas très bien adapté (car votre navigateur finira par expirer). Peut-être que l'exécution du script à partir de la ligne de commande (appelée cli php) fonctionnera.

Il me semble que vous mettez en œuvre quelque chose qui existe déjà. Vous devriez jeter un oeil à rsync (pour Linux) si vous avez le contrôle des deux serveurs.

+0

Non, je n'ai pas le contrôle des deux serveurs et je n'ai malheureusement pas l'option de ligne de commande. Le script s'exécutera en fonction d'un travail Cron. –

+0

J'ai ajouté set_time_limit (0); et le script semble toujours s'arrêter après une centaine de téléchargements. –

3

Exécutez cron plus fréquemment et limitez le script à un téléchargement de 80 images par cycle.

0

Si le problème est avec php ou le délai d'expiration du navigateur, vous pouvez créer un fichier (exemple ci-dessous) et cronez-le ou appelez d'un navigateur.

<? 
echo "Running cli syncfiles.php"; 
system("&php syncfiles.php"); // & pushes file to background processing on linux 
?> 

Si vous rencontrez un problème parce que le ftp étrangle vos connexions, ou étrangle vos uploads/téléchargements simultanés dans une quantité x de temps, alors vous pouvez probablement jeter une sorte de minuteries dans le code.

<? 
$counter=0; 
for($i=0;$i<$numftpfiles;$i++) 
{ 
    syncfile($i); // this represents your sync code 
    usleep(250000); // sleep for 1/4 second 
    $count++; 
    if($count>50) 
    { 
    usleep(30000000); // sleep for 30 seconds 
    $count=0; 
    } 
} 
?> 
0

Vous pouvez zip alors d'abord en php http://www.php.net/manual/en/book.zip.php

ensuite télécharger un fichier zip plus grand. La taille totale du fichier est peu susceptible de changer, mais j'ai constaté que lorsque je transférais beaucoup de fichiers sur mon WAN, c'était plus rapide de toute façon.

-Will