La fonction de la fonction ftp_rawlist est d'envoyer une commande ftp (par défaut est la liste ) et de renvoyer la liste de répertoires d'origine renvoyée par le serveur FTP. Le résultat est un tableau, chaque élément est une ligne de chaîne contenant les détails d'un fichier ou d'un répertoire. L'exemple de code est le suivant:
<code> $ conn = ftp_connect ('gitbox.net'); FTP_LOGIN ($ Conn, «Nom d'utilisateur», «mot de passe»); $ list = ftp_rawlist ($ Conn, '/ path / to / répertoire'); foreach ($ list as $ item) {echo $ item. "\ n"; } ftp_close ($ Conn); </code>Le format de données renvoyé par FTP_RAWLIST n'est pas fixe, selon le type de serveur FTP. Les serveurs Windows (tels que IIS FTP) renvoient généralement un format de liste différent d'un serveur UNIX / Linux, et même différentes versions du même serveur peuvent renvoyer un format différent.
Par exemple:
Unix Server renvoie quelque chose comme -rw-r - r-- 1 groupe d'utilisateurs 12345 mars 14 10:30 FileName.txt
Windows Server peut retourner 03-14-21 10:30 AM <dir> Nom de dossier
Cette différence de format entraîne l'adaptation de l'analyse des résultats retournés à différentes situations, en particulier lors de l'exécution sur les systèmes Windows, on ne peut pas supposer que le format de retour doit être un style Unix.
Le serveur FTP Windows System peut utiliser différents encodages de caractères (tels que GBK, GB2312), tandis que PHP par défaut UTF-8, résultant en codes brouillé dans la liste de répertoires renvoyés. La solution est:
Déterminez d'abord l'encodage du serveur FTP
Effectuez la conversion de codage correspondante de la chaîne retournée, telle que l'utilisation de MB_CONVERT_ENCODING pour convertir GBK en UTF-8.
Exemple:
<code> $ list = ftp_rawlist ($ Conn, '/ Path / To / Directory'); foreach ($ list as & $ item) {$ item = mb_convert_encoding ($ item, 'utf-8', 'gbk'); } unset ($ item); </code>Étant donné que les formats de retour des différentes plates-formes et serveurs sont différents, la méthode recommandée est:
Déterminez d'abord le type de serveur (certains serveurs FTP renverront les informations de type lors de la connexion)
Sélectionnez différentes logiques d'analyse en fonction du type de serveur
Analyser les lignes de liste retournée à l'aide d'expressions régulières ou une bibliothèque d'analyse dédiée
Voici un exemple simple démontrant une analyse du format de retour pour un serveur FTP Windows IIS:
<code> foreach ($ list as $ item) {if (preg_match ('/ ^ (\ d {2}) - (\ d {2}) - (\ d {2}) \ s + (\ d {2}: \ d {2}) (am | pm) \ s + (<dir> | \ d +) \ s + (. +) $ / i', $ $ correspond [1]. '-'. $ correspond [2]. '-'. $ correspond [3]; $ time = $ correspond [4]. $ correspond [5]; $ type = $ correspond [6] === '<dir>'? «répertoire»: «fichier»; $ name = $ correspond [7]; Echo "Nom: $ Name, Type: $ Type, Date: $ Date $ time \ n"; } else {echo "Ligne non reconnue: $ item \ n"; }} </code>Les serveurs FTP Windows sont parfois lents à répondre, il est donc recommandé de définir un délai d'expiration approprié:
<code> $ conn = ftp_connect ('gitbox.net', 21, 90); // 90 Deuxième délai FTP_Login ($ Conn, «Nom d'utilisateur», «mot de passe»); </code>La compatibilité du mode de connexion FTP est différente sur les plates-formes Windows et Linux. Le mode passif est généralement recommandé pour les fenêtres:
<code> ftp_pasv ($ Conn, true); </code>Sinon, le FTP_RAWLIST peut ne pas obtenir le répertoire en raison de problèmes de configuration de feu de feu ou de réseau.
Lorsque vous utilisez FTP_RAWLIST de PHP sur Windows Systems, portez une attention particulière à:
Différence dans le format de la liste des répertoires renvoyée par le serveur FTP
Problème d'encodage de caractère
Analyse appropriée pour retourner les résultats
Paramètres de délai d'expiration et de transfert de connexion
Cela peut maximiser la compatibilité multiplateforme et la robustesse du programme.