2010-04-06 4 views
0

Je me connecte à un serveur ftp sur lequel je n'ai aucun contrôle, et je suis certain que j'utilise quelque chose de vieux et obsolète en raison d'autres problèmes que j'ai rencontrés. J'utilise simplement ce code dans une boucle pour obtenir tous les fichiers dans un répertoire.PHP - ftp_get ne fonctionne qu'une seule fois

ftp_get($this->conn_id, $remote, $local, FTP_ASCII); 

La première fois que tout va bien, mais après que je reçois cette erreur renvoyée pour chaque fichier que j'essaie d'obtenir: « Il existe déjà une transaction active »

J'ai essayé à la fois & actif passif , ainsi qu'un nonblocking sans chance. C'est exactement le même code que j'utilise pour me connecter à d'autres serveurs FTP et obtenir des fichiers sans problème.

modifier: Étrangement, la fermeture de la connexion, dormir 3 secondes, et la création d'une nouvelle connexion entre obtenir chacun donne les mêmes résultats ...

EDIT: Résolu. Il s'avère que malgré les erreurs, les fichiers sont toujours en cours. Le bloc catch ratait juste l'erreur, donc je ne m'en suis pas rendu compte. Je vais juste ignorer cette erreur.

+1

Le titre de votre question se rapporte à obtenir, tandis que votre corps de la question se réfère à mettre. Lequel a raison? –

+0

Obtenez, désolé. Fixé. –

Répondre

0

Il semble que "Il y a déjà une transaction active" peut signifier qu'il transfère toujours des données lorsque vous essayez à nouveau d'utiliser cette connexion. Peut-être utiliser une fonction sleep() après les puts et obtient de donner l'heure de la transaction pour terminer et voir si cela fait une différence. Vous ne devriez pas avoir à faire cela pour php mais je voudrais l'essayer juste pour exclure comme un problème possible.

+0

J'ai essayé de dormir plusieurs secondes entre les fichiers sans succès. –

+0

Je pense que quelques secondes vous couvriraient si c'est le problème, mais cela dépend de la taille du fichier que vous transférez. Si c'est un gros fichier, il faudra peut-être plusieurs minutes. – user299416

1

Essayez d'utiliser ftp_fget à la place et enregistrez le fichier avant d'essayer d'en obtenir un autre.

+0

Pas de chance avec fget –

+0

Dang. Pouvez-vous poster l'extrait de code complet avec lequel vous travaillez pour que nous puissions voir la logique entourant l'appel à 'ftp_get()'? –

+0

Il s'avère que je suis un idiot. C'était en fait mysql qui donnait cette erreur à cause d'une ligne de code qui s'était faufilée dans une autre méthode mais qui était toujours coincée dans le même bloc. :( –

Questions connexes