richtige Benutzer der STOR-Befehl
Ich brauche, um die response-Nachrichten von einem ftp-server bin ich zur Fehlerbehebung eine Verbindung zu, so bin ich mit Hilfe von PHP - ftp_raw
Funktion, die mir erlaubt, zu senden, roh ftp-Befehle an den remote-server, und bekommen die Antwort-string zurück. (Den built-in-PHP-ftp-Befehle nicht zurück Antworten 🙁
Folgenden diese akzeptierte Antwort, Die Befehl ich sende, ist
PASV
STOR /local/path/to/file.txt
Und die Antwort des Servers ist
500 /local/path/to/file.txt: The system cannot find the path specified.
Und ich dachte mir "natürlich, der remote-host hat keine Ahnung von meiner lokalen Datei-system." Meine Vermutung ist, dass ich das öffnen einer socket-Angabe einer remote-Datei-Namen, und ich habe noch eine pipe mit Daten durch. Aber ich habe nicht gefunden was schlüssig Dokumentation in meiner Suche.
Was ist das komplette set von roh ftp-Befehle, um eine Datei hochzuladen? An welcher Stelle und wie muss ich eigentlich beginnen, das senden von Daten an den remote-server? Kann ich die Verbindung einrichten von ftp_connect()
als der sockel?
InformationsquelleAutor user151841 | 2012-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haftungsausschluss: Die erste Sache, die Sie wissen sollten ist, dass RFC959 geschrieben wurde, eine Weile nach dem FTP-wurde immer beliebter und es gibt immer noch einige kaputte software, die auf das fehlen der Spezifikation gab es vor (und noch einige Zeit danach) RFC959 veröffentlicht wurde. Viele ältere (und stabiler) FTP-Bibliotheken müssen einige spezielle Behandlung für einige Server, um sicherzustellen, dass es funktioniert die Weise, die Sie wollen zu 99,9% der Zeit. Dies ist insbesondere häufiger mit der Verarbeitung von Erweiterungen für das FTP-Protokoll.
Den rest meiner Antwort davon ausgegangen server RFC959-konform.
Beachten Sie auch, dass unter Umgehung von FTP-client-Bibliothek, die auf höherer Ebene, request/response-management bedeutet, dass Sie brauchen, um re-implementieren einen Teil der Bibliothek selbst. Das heißt, Sie sollte bequem mit der Spezifikation, da Sie brauchen werden, zu verweisen. Wo möglich, werde ich beziehen sich auf die entsprechenden Abschnitte, so dass Sie umgehen können.
In einem Fall, empfehle ich dringend, dass Sie Debuggen der Probleme, die durch die Verstärkung in der PHP-FTP-client-Bibliothek anstelle der Implementierung all dieser sich selbst. Es ist möglich, Sie sollte wirklich Wunsch, dass die Bibliothek die Ausgabe aller Befehle die es verwendet. Alle, dass gesagt wird, ich werde weiterhin führen Sie durch das Verfahren zu helfen, Ihr problem diagnostizieren.
Verwaltung der FTP-Daten-Verbindung ist etwas umständlich. Es ist nicht so einfach, wie es auf den ersten Blick aussieht, wenn Sie wollen, um alle optionalen Teile der Spezifikation. Genau, wie Sie die übertragung von Dateien hängt von dem aktuellen Zustand der folgenden Optionen:
Achten Sie auf die Spezifikation, weil einige Konfigurationen ermöglichen es Ihnen, die Daten-Verbindung öffnen, während andere erfordern Sie, um es zu schließen (z.B. stream-Modus). Wenn die Daten-Verbindung ist bereits geöffnet, dann werden Sie nicht brauchen, um wieder eine Verbindung zum server bei jeder übertragung.
Scheint das alles sehr kompliziert, aber es ist einfach informativ. Es kann in handliches kommen, während Sie gerade Debuggen. Es gibt eigentlich nur zwei beliebte Möglichkeiten, um Dateien über FTP übertragen:
Der server eine Verbindung zum client auf einem zweiten port und sendet die Datei im image (binary) Datentyp mithilfe der file-Datenstruktur.
Konfigurieren Sie den Datentyp (erforderlich):
Konfigurieren Sie die Daten-Struktur (optional, default):
Konfigurieren Sie das transfer-Modus (optional, default):
Wählen Sie einen verfügbaren port (dies kann auch etwas subtiler, als man denkt) und starten Sie hören. Wenn Sie die Standard-port (20), überspringen Sie den nächsten Schritt.
Dem server mitteilen, werden wir hören, auf einen bestimmten port (optional, wenn default-port ist aktiviert, aber es tut nicht weh, vorsichtig zu sein):
Sagen, der server erwartet ein file-transfer:
Warten eingehenden Verbindung vom server.
Senden Sie den Inhalt der Datei
Schließen Sie die Daten-Verbindung
Der client eine Verbindung zum server auf einem zweiten port und sendet die Datei im image (binary) Datentyp mithilfe der file-Datenstruktur.
Konfigurieren Sie den Datentyp (erforderlich):
Konfigurieren Sie die Daten-Struktur (optional, default):
Konfigurieren Sie das transfer-Modus (optional, default):
Dem server mitteilen, werden wir hören, auf einen bestimmten port (erforderlich):
Lesen Sie die
PASV
Befehl-Antwort mit IP-Adresse und Portnummer, die der server abhört.Sagen, der server erwartet ein file-transfer:
Verbindung:
Senden Sie den Inhalt der Datei
Schließen Sie die Daten-Verbindung
Gibt es einige lästige Probleme mit der ersten Methode, da die Auswahl ein port ist ein wenig tricky (nach der Anwendung einen port benötigen, müssen Sie warten, für eine kurze Zeit, bevor Sie es wieder verwenden) und Ihre firewall oder Internetdienstanbieter blockieren möglicherweise eingehende verbindungen auf einige ports, etc. Die zweite Methode ist die einfachste und sollte bevorzugt werden, es sei denn, der server lehnt Sie ab.
eigentlich, wenn Sie Lesen, der Fragesteller hat die post bis zum Ende, die Fragen "Was ist der Satz von roh ftp-Befehle, um eine Datei hochzuladen? An welcher Stelle und wie muss ich eigentlich beginnen, das senden von Daten an den remote-server? Kann ich die Verbindung einrichten von ftp_connect() die Steckdose?". Antwortete ich die ersten beiden ganz explizit und die 3. Antwort ist implizit (Nein, Sie können nicht die gleiche Verbindung).
Ich sehe. Ich sollte beim Lesen der poster die Frage wieder.
InformationsquelleAutor André Caron
Funktionierende Lösung (vollständiger rewrite der früheren Lösung mit PORT). Die richtige Reihenfolge ist
Code
PASV
undPORT
für den gleichen transfer (höchstwahrscheinlich, je nachdem was der zweite überschreibt den ersten). Außerdem, wenn die client-Fragen, diePASV
Befehl, der server wartet auf eine Verbindung (und "fungiert als server"). DiePORT
Befehl macht das Gegenteil, es sagt, dass der server eine Verbindung zum client an einem bestimmten port.Danke. Ich habe gelesen und gefunden PASV ist der Weg zu gehen, wie es nicht erforderlich, einen listening-port, so dass in der Regel einfacher.
InformationsquelleAutor Adam