Die Funktion der Funktion ftp_rawlist besteht darin, einen FTP -Befehl zu senden ( Standardliste ) und die vom FTP -Server zurückgegebene ursprüngliche Verzeichnisliste zurückgeben. Das Ergebnis ist ein Array. Jedes Element ist eine Zeichenfolge, die Details einer Datei oder eines Verzeichnisses enthält. Der Beispielcode lautet wie folgt:
<code> $ conn = ftp_connect ('gitbox.net'); ftp_login ($ conn, 'userername', 'password'); $ list = ftp_rawlist ($ conn, '/path/to/verzeichnis'); foreach ($ liste als $ item) {echo $ item. "\N"; } ftp_close ($ conn); </code>Das von FTP_RAWLIST zurückgegebene Datenformat ist abhängig vom FTP -Server nicht behoben. Windows -Server (wie IIS FTP) geben normalerweise ein Listenformat zurück, das sich von einem UNIX/Linux -Server unterscheidet, und selbst verschiedene Versionen desselben Servers können ein anderes Format zurückgeben.
Zum Beispiel:
UNIX Server gibt so etwas wie -rw-r-R-- 1 Benutzergruppe 12345 März 10:30 Dateiname.txt zurück
Windows-Server kann 03-14-21 10:30 Uhr <Dir> Folkername zurückgeben
Dieser Formatunterschied führt dazu, dass die Analyse der zurückgegebenen Ergebnisse an verschiedene Situationen angepasst wird, insbesondere wenn man auf Windows -Systemen ausgeführt wird, kann nicht angenommen werden, dass das Rückgabeformat einen Unix -Stil sein muss.
Der Windows-System FTP-Server kann unterschiedliche Zeichencodierungen (wie GBK, GB2312) verwenden, während PHP-Standard-Standard-Codes in der Liste der zurückgegebenen Verzeichnisse zu UTF-8 führt. Die Lösung ist:
Bestimmen Sie zuerst die FTP -Server -Codierung
Führen Sie die entsprechende Codierungskonvertierung der zurückgegebenen Zeichenfolge durch, z.
Beispiel:
<Code> $ list = ftp_rawlist ($ conn, '/path/to/verzeichnis'); foreach ($ list as & $ item) {$ item = mb_convert_encoding ($ item, 'utf-8', 'gbk'); } uneingestellter ($ item); </code>Da die Rückgabeformate verschiedener Plattformen und Server unterschiedlich sind, lautet die empfohlene Methode:
Bestimmen Sie zunächst den Servertyp (einige FTP -Server geben die Typinformationen zurück, wenn Sie eine Verbindung herstellen).
Wählen Sie unterschiedliche Parsen -Logik gemäß Servertyp aus
Analysieren
Hier ist ein einfaches Beispiel, das eine Analyse des Rückgabeformats für einen Windows IIS -FTP -Server demonstriert:
<Code> foreach ($ list as $ item) {if (preg_match ('/^(\ d {2})-(\ d {2})-(\ d {2}) \ s+(\ d {2}: \ d {2}) (Am | pm) \ s+(| $ Matches)) {$ DATE = $ Matches [1]. '-'. $ Matches [2]. '-'. $ Matches [3]; $ time = $ Matches [4]. $ Matches [5]; $ type = $ Matches [6] === '<dir>'? 'Verzeichnis': 'Datei'; $ name = $ Matches [7]; Echo "Name: $ Name, Typ: $ type, Datum: $ Datum $ Zeit \ n"; } else {echo "unerkannte Zeile: $ item \ n"; }} </code>Windows FTP -Server reagieren manchmal langsam, sodass ein geeignetes Timeout festgelegt wird:
<code> $ conn = ftp_connect ('gitbox.net', 21, 90); // 90 Second Timeout ftp_login ($ conn, username ',' password '); </code>Die Kompatibilität des FTP -Verbindungsmodus ist unter Windows- und Linux -Plattformen unterschiedlich. Der passive Modus wird normalerweise für Windows empfohlen:
<Code> ftp_pasv ($ conn, true); </code>Andernfalls kann der FTP_RAWLIST das Verzeichnis aufgrund von Firewall- oder Netzwerkkonfigurationsproblemen nicht erhalten.
Wenn Sie FTP_RAWLIST von PHP unter Windows -Systemen verwenden, achten Sie besondere Aufmerksamkeit auf:
Unterschied im Format der Verzeichnisliste, die vom FTP -Server zurückgegeben wurde
Charakter -Codierungsproblem
Angemessene Parsen zur Rückgabe der Ergebnisse
Einstellungen für Timeout- und Übertragungsmodus von Verbindungen
Dies kann die plattformübergreifende Kompatibilität und die Robustheit der Programme maximieren.