FTP_RAWLIST関数の関数は、FTPコマンド(デフォルトはリスト)を送信し、FTPサーバーによって返された元のディレクトリリストを返すことです。結果は配列で、各要素はファイルまたはディレクトリの詳細を含む文字列の行です。サンプルコードは次のとおりです。
<code> $ conn = ftp_connect( 'gitbox.net'); ftp_login($ conn、 'username'、 'password'); $ list = ftp_rawlist($ conn、 '/path/to/directory'); foreach($ as $ item){echo $ item。 "\ n"; } ftp_close($ conn); </code>ftp_rawlistによって返されるデータ形式は、FTPサーバーのタイプに応じて固定されていません。 Windowsサーバー(IIS FTPなど)は通常、UNIX/Linuxサーバーとは異なるリスト形式を返し、同じサーバーの異なるバージョンでさえ異なる形式を返す場合があります。
例えば:
UNIXサーバーは-RW-Rのようなものを返します。
Windows Serverは03-14-21 10:30 AM <DIR> FolderNameを返す場合があります
この形式の違いにより、返された結果の解析が異なる状況に適合します。特にWindowsシステムで実行される場合、返品形式がUNIXスタイルでなければならないとは想定できません。
Windows System FTPサーバーは、異なる文字エンコーディング(GBK、GB2312など)を使用する場合があり、PHPはデフォルトでUTF-8になり、返されたディレクトリリストに文字化けされたコードが得られます。解決策は次のとおりです。
最初にFTPサーバーエンコードを決定します
MB_CONVERT_ENCODINGを使用してGBKをUTF-8に変換するなど、返された文字列の対応するエンコード変換を実行します。
例:
<code> $ list = ftp_rawlist($ conn、 '/path/to/directory'); foreach($ list as&$ item){$ item = mb_convert_encoding($ item、 'utf-8'、 'gbk'); } unset($ item); </code>異なるプラットフォームとサーバーの返品形式は異なるため、推奨される方法は次のとおりです。
最初にサーバータイプを決定します(一部のFTPサーバーは、接続時にタイプ情報を返します)
サーバータイプに従って、異なる解析ロジックを選択します
正規表現または専用の解析ライブラリを使用して、返されたリスト行を解析する
Windows IIS FTPサーバーのリターンフォーマットの解析を示す簡単な例を次に示します。
<code> foreach($ list as $ item){if(preg_match( '/^(\ d {2}) - (\ d {2}) - (\ d {2})\ s+(\ d {2}:\ d {2})(am | PM)\ $ matches)){$ date = $ matches [1]。 ' - '。 $マッチ[2]。 ' - '。 $マッチ[3]; $ time = $ matches [4]。 $ matches [5]; $ type = $ matches [6] === '<dir>'? 「ディレクトリ」:「ファイル」; $ name = $ matches [7]; echo "name:$ name、type:$ type、date:$ date $ time \ n"; } else {echo "認識されていない行:$ item \ n"; }} </code>Windows FTPサーバーの応答が遅い場合があるため、適切なタイムアウトを設定することをお勧めします。
<code> $ conn = ftp_connect( 'gitbox.net'、21、90); // 90秒のタイムアウトftp_login($ conn、 'username'、 'password'); </code>FTP接続モードの互換性は、WindowsプラットフォームとLinuxプラットフォームで異なります。通常、パッシブモードはWindowsに推奨されます。
<code> ftp_pasv($ conn、true); </code>それ以外の場合、 FTP_RAWLISTは、ファイアウォールまたはネットワーク構成の問題により、ディレクトリを取得できない場合があります。
WindowsシステムでPHPのFTP_RAWLISTを使用する場合、次のことに特に注意してください。
FTPサーバーによって返されるディレクトリリストの形式の違い
キャラクターエンコーディングの問題
結果を返すための適切な解析
接続タイムアウトおよび転送モード設定
これにより、クロスプラットフォームの互換性とプログラムの堅牢性を最大化できます。