Aktueller Standort: Startseite> Neueste Artikel> Was ist die detaillierte Methode zum Implementieren von FTP -Datei -Hochladen über die FSOCCKOPEN -Funktion? Welche wichtigsten Punkte sollten beachtet werden?

Was ist die detaillierte Methode zum Implementieren von FTP -Datei -Hochladen über die FSOCCKOPEN -Funktion? Welche wichtigsten Punkte sollten beachtet werden?

gitbox 2025-08-25

In PHP ist der Prozess der Verwendung der Funktion fSoccKopen () zum Implementieren von FTP-Datei-Upload relativ niedrig, was manuelle Vorgänge im FTP-Protokoll umfasst. Obwohl PHP FTP_* -Serie von Funktionen zur Vereinfachung des FTP -Upload -Prozesses bereitstellt, können Sie manchmal auf spezielle Bedürfnisse stoßen oder den Upload -Prozess körniger steuern, und wählen Sie diese direkt über fSockKopen () implementieren. In diesem Artikel wird detailliert eingeführt, wie das FTP -Datei hochladen und über fSoccKopen () () auf einige wichtige Punkte hinweist, die besondere Aufmerksamkeit erfordern.

1. Grundkonzepte

FTP (Dateitransferprotokoll) ist ein häufig verwendetes Netzwerkprotokoll, das zum Übertragen von Dateien zwischen Clients und Servern verwendet wird. Mit der Funktion fSockKopen () können Sie eine Socket -Verbindung zum FTP -Server in PHP öffnen, um mit dem FTP -Server zu interagieren und Upload-, Download- und andere Vorgänge durchzuführen.

2. Der grundlegende Prozess beim Hochladen von Dateien über fSoccKopen ()

  1. Eine Verbindung herstellen <br> Zunächst müssen wir fSoccKopen () verwenden, um die Verbindung zum FTP -Server zu öffnen. In der Regel beträgt der Standardport des FTP -Servers 21.

     <span><span><span class="hljs-variable">$ftp_server</span></span><span> = </span><span><span class="hljs-string">'ftp.example.com'</span></span><span>;
    </span><span><span class="hljs-variable">$ftp_port</span></span><span> = </span><span><span class="hljs-number">21</span></span><span>;
    </span><span><span class="hljs-variable">$ftp_user</span></span><span> = </span><span><span class="hljs-string">'username'</span></span><span>;
    </span><span><span class="hljs-variable">$ftp_pass</span></span><span> = </span><span><span class="hljs-string">'password'</span></span><span>;
    
    </span><span><span class="hljs-comment">// Erstellen zuFTPSerververbindung</span></span><span>
    </span><span><span class="hljs-variable">$ftp_socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-variable">$ftp_server</span></span><span>, </span><span><span class="hljs-variable">$ftp_port</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$ftp_socket</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"FTPVerbindung ist fehlgeschlagen: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)");
    }
    </span></span>
  2. Empfangen Sie Serverantwort
    FTP sendet normalerweise eine willkommene Nachricht, wenn die Verbindung hergestellt wird. Wir müssen die Antwort des Servers lesen und überprüfen, um eine erfolgreiche Verbindung zu gewährleisten.

     <span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'220'</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: <span class="hljs-subst">$response</span></span></span><span>");
    }
    </span></span>
  3. Senden Sie Benutzername und Passwort <br> Im FTP -Protokoll erfolgt der Anmeldevorgang durch Senden von Befehlen von Benutzername (Benutzer) und Passwort (Pass). Wir können die Funktion fputs () verwenden, um diese Befehle zu senden.

     <span><span><span class="hljs-comment">// Benutzername senden</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"USER <span class="hljs-subst">$ftp_user</span></span></span><span>\r\n");
    </span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'331'</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Fehler im Benutzernamen: <span class="hljs-subst">$response</span></span></span><span>");
    }
    
    </span><span><span class="hljs-comment">// Passwort senden</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"PASS <span class="hljs-subst">$ftp_pass</span></span></span><span>\r\n");
    </span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'230'</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Fehlerkennwort: <span class="hljs-subst">$response</span></span></span><span>");
    }
    </span></span>
  4. Setzen Sie den passiven Modus (optional)
    In einigen Netzwerkumgebungen ist die Verwendung des passiven Modus (PASV) stabiler. Der passive Modus öffnet einen neuen Port auf der FTP -Serverseite, und der Client stellt eine Verbindung zu diesem Port für die Datenübertragung her.

     <span><span><span class="hljs-comment">// Geben Sie den passiven Modus ein</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"PASV\r\n"</span></span><span>);
    </span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'227'</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Geben Sie den passiven Modus ein失败: <span class="hljs-subst">$response</span></span></span><span>");
    }
    </span></span>

    Die vom Server zurückgegebene Antwort enthält Informationen zu einem Datenport. Sie müssen diese Antwort analysieren, um den Datenport zu erhalten.

  5. Datei hochladen <br> Um eine Datei hochzuladen, müssen Sie einen STOR -Befehl senden, um den Aufladungsort der Datei hochzuladen und den Dateiinhalt dann per Block in den Serverblock zu übertragen.

     <span><span><span class="hljs-variable">$local_file</span></span><span> = </span><span><span class="hljs-string">'local_file.txt'</span></span><span>;
    </span><span><span class="hljs-variable">$remote_file</span></span><span> = </span><span><span class="hljs-string">'remote_file.txt'</span></span><span>;
    
    </span><span><span class="hljs-comment">// Lokale Datei öffnen</span></span><span>
    </span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$local_file</span></span><span>, </span><span><span class="hljs-string">'rb'</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$file</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"无法Lokale Datei öffnen: <span class="hljs-subst">$local_file</span></span></span><span>");
    }
    
    </span><span><span class="hljs-comment">// schicken STOR Befehls -Upload beginnt</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"STOR <span class="hljs-subst">$remote_file</span></span></span><span>\r\n");
    </span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$response</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>) != </span><span><span class="hljs-string">'150'</span></span><span>) {
        </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Nicht hochladen: <span class="hljs-subst">$response</span></span></span><span>");
    }
    
    </span><span><span class="hljs-comment">// Dateiinhalte Block nach Block hochladen</span></span><span>
    </span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
        </span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);
        </span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
    }
    
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
    </span></span>
  6. Schließen Sie die Verbindung <br> Schließen Sie nach dem Hochladen der Datei die FTP -Verbindung.

     <span><span><span class="hljs-title function_ invoke__">fputs</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>, </span><span><span class="hljs-string">"QUIT\r\n"</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$ftp_socket</span></span><span>);
    </span></span>

3. Schlüsselpunkte und Vorsichtsmaßnahmen

  1. Fehlerbehandlung
    Das FTP -Protokoll umfasst mehrere Befehle und Antworten, daher ist die Fehlerbehandlung sehr wichtig. Die Antwort jedes FTP-Befehls enthält einen dreistelligen Statuscode (z. B. 220 , 230 , 331 usw.). Durch die Überprüfung dieser Statuscodes können Sie feststellen, ob der Vorgang erfolgreich ist.

  2. Passiver Modus und aktiver Modus <br> In einigen Netzwerkumgebungen kann die Verwendung des passiven Modus die Blockierung von NAT -Geräten (Netzwerkadressenübersetzungen) und Firewalls vermeiden. Wenn der Standardmodus nicht geeignet ist, denken Sie daran, in den passiven Modus zu wechseln.

  3. Binärer und ASCII -Modus <br> Beim Hochladen von Dateien müssen Sie die richtigen Einstellungen des Dateiübertragungsmodus sicherstellen. Für Binärdateien (wie Bilder, Videos, Druckdateien usw.) sollte der binäre Modus (d. H. Typ I ) verwendet werden. Verwenden Sie für Textdateien den ASCII -Modus (d. H. Typ A ).

  4. Puffergröße <br> Während des Hochladens des Datei können Sie beim Lesen und Schreiben von Vorgängen die Hochladenleistung verbessern, indem Sie die Puffergröße anpassen. Die Puffergrößen von Fread () und Fputs () beeinflussen die Geschwindigkeit der Datenübertragung.

  5. Ressourcenleckage verhindern <br> Denken Sie nach dem Erstellen einer Socket -Verbindung über fSocopen () unbedingt daran, die Verbindung nach Abschluss des Uploads zu schließen, um Ressourcenleckage zu vermeiden.

4. Zusammenfassung

Obwohl es relativ gering ist, das Hochladen von FTP-Dateien über fSoccKopen () zu implementieren, gibt es den Entwicklern mehr Kontrolle über die Dateiübertragung. Durch die manuelle Implementierung jedes Schritts des FTP -Protokolls können wir maßgeschneiderte Operationen in komplexen Szenarien ausführen. Bei der Verwendung müssen Sie jedoch auf die Details des Protokolls, der Fehlerbehandlung, des Übertragungsmodus und anderer Probleme achten, um den reibungslosen Fortschritt des Upload -Prozesses sicherzustellen. Für regelmäßige Anforderungen an das Datei-Upload kann die integrierte FTP-Funktion von PHP verwendet werden, um den Vorgang zu vereinfachen, während benutzerdefinierte Upload-Vorgänge über fSoccKopen () für Szenarien geeignet sind, die eine detailliertere Steuerung erfordern.

  • Verwandte Tags:

    FTP