l'utilisateur est correct de commande STOR
J'ai besoin d'obtenir les messages de réponse d'un serveur ftp, je suis dépannage d'une connexion, donc je suis à l'aide de PHP ftp_raw
fonction, ce qui me permet d'envoyer des premières commandes ftp vers le serveur distant, et obtenir une réponse de la chaîne de retour. (Le haut-PHP commandes ftp ne pas retourner les réponses 🙁
Suivantes cette accepté de répondre, La commande je suis l'envoi est
PASV
STOR /local/path/to/file.txt
Et la réponse du serveur est
500 /local/path/to/file.txt: The system cannot find the path specified.
Et je suis en train de penser à moi-même "bien sûr, l'hôte distant n'a aucune idée de mon système de fichiers local." Mon intuition est que je suis de l'ouverture d'un socket, en spécifiant une distance de nom de fichier, et j'ai encore à pipe, les données à travers. Mais je n'ai rien trouvé de concluant dans la documentation dans ma recherche.
Qu'est-ce que l'ensemble des premières commandes ftp pour télécharger un fichier? À quel moment, et comment je fait de commencer à envoyer des données vers le serveur distant? Puis-je utiliser la connexion de ftp_connect()
que le socket?
OriginalL'auteur user151841 | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Avertissement: La première chose que vous devez savoir est que RFC959 a été écrit après le FTP est devenu populaire et il y a encore quelques brisé logiciel basé sur l'absence de spécification, il y avait avant (et, quelque temps après) RFC959 a été publié. Beaucoup de vieux (et plus stable) FTP certaines bibliothèques ont un traitement spécial à certains serveurs pour s'assurer qu'il fonctionne comme vous le souhaitez 99,9% du temps. C'est surtout plus commun avec gestion des extensions du protocole FTP.
Le reste de ma réponse suppose que le serveur est RFC959 conforme.
Également garder à l'esprit que le contournement de votre client FTP de la bibliothèque de niveau supérieur de demande/réponse de la gestion, vous aurez besoin de re-mettre en œuvre une partie de cette bibliothèque vous-même. Cela signifie que vous devriez être à l'aise avec la spécification puisque vous aurez besoin de vous y référer. Si possible, je vais consulter les sections appropriées de sorte que vous pouvez obtenir autour de.
Dans un cas, je recommande fortement que vous déboguez vos problèmes en s'aventurant dans PHP FTP client de la bibliothèque plutôt que de la mise en œuvre de tous par vous-même. C'est possible, vous devriez vraiment demander à la bibliothèque de sortie de toutes les commandes en cours d'utilisation. Tout cela étant dit, je vais quand même vous guidera à travers la procédure pour aider à diagnostiquer votre problème.
La gestion de la connexion de données FTP est un peu la douleur. Ce n'est pas aussi facile qu'il y paraît au premier coup d'œil si vous voulez soutenir toutes les parties optionnelles de la spécification. Exactement comment vous transférez des fichiers dépend principalement de l'état actuel des options suivantes:
Prêter attention à la spécification car certaines configurations vous permettent de conserver les données de connexion ouverte, tandis que d'autres peuvent vous obliger à fermer (c'est par exemple le mode "stream"). Si la connexion de données est déjà ouvert, vous n'avez pas besoin de vous reconnecter au serveur sur chaque transfert.
Tout cela semble très compliqué, mais c'est juste informatif. Il pourrait venir dans maniable pendant que vous êtes de débogage. Il n'y a que deux façons de transférer des fichiers via FTP:
Le serveur se connecte au client sur un port et envoie le fichier dans l'image (binaire) type de données en utilisant le fichier de structure de données.
Configurer le type de données (obligatoire):
Configurer la structure de données (facultatif, par défaut):
Configurer le mode de transfert (facultatif, par défaut):
Choisir un port disponible (ce qui peut être un peu plus subtil que vous ne le pensez) et de commencer à écouter. Si vous choisissez le port par défaut (20), passez à l'étape suivante.
Dire au serveur que nous allons être à l'écoute sur un port donné (facultatif si le port par défaut est sélectionné, mais il ne fait pas de mal à être prudent):
Dire au serveur de s'attendre à un transfert de fichier:
Attente de connexion entrante sur le serveur.
Envoyer le contenu du fichier
Fermer la connexion de données
Le client se connecte au serveur sur un port et envoie le fichier dans l'image (binaire) type de données en utilisant le fichier de structure de données.
Configurer le type de données (obligatoire):
Configurer la structure de données (facultatif, par défaut):
Configurer le mode de transfert (facultatif, par défaut):
Dire au serveur que nous allons être à l'écoute sur un port donné (obligatoire):
Lire la
PASV
en réponse à la commande contenant l'adresse IP et numéro de port d'écoute du serveur.Dire au serveur de s'attendre à un transfert de fichier:
Établir la connexion:
Envoyer le contenu du fichier
Fermer la connexion de données
Il ya quelques inconvénients de problèmes avec la première méthode, car le choix d'un port est un peu délicat (après à l'aide d'un port, vous devez attendre pendant une courte période avant de l'utiliser à nouveau) et votre pare-feu ou un FAI peut bloquer les connexions entrantes sur certains ports, etc. La deuxième méthode est la plus simple et devrait être préféré à moins que le serveur rejette.
en fait, si vous lisez le sens de la poste jusqu'à la fin, les questions "qu'est-Ce que l'ensemble des premières commandes ftp pour télécharger un fichier? À quel moment, et comment je fait de commencer à envoyer des données vers le serveur distant? Puis-je utiliser la connexion de ftp_connect() comme le socket?". J'ai répondu à la première deux de façon très explicite et la 3ème réponse est implicite (non, vous ne pouvez pas utiliser la même connexion).
Je vois. J'aurais du lire l'affiche de la question à nouveau.
OriginalL'auteur André Caron
Solution de travail (réécriture complète de la précédente solution en utilisant le PORT). La séquence correcte est
Code
PASV
etPORT
pour le même transfert (le plus probable, selon le second remplace le premier). En outre, lorsque le client émet laPASV
commande, le serveur est à l'écoute pour une connexion (et "agit comme un serveur"). LePORT
commande fait le contraire, il indique au serveur pour vous connecter au client à un port spécifié.Merci. J'ai lu et trouvé PASV est le chemin à parcourir n'a pas besoin d'un port d'écoute donc généralement plus facile.
OriginalL'auteur Adam