現在の位置: ホーム> 最新記事一覧> WindowsシステムでFTP_RAWLISTを使用することに関するメモ

WindowsシステムでFTP_RAWLISTを使用することに関するメモ

gitbox 2025-05-26

1。FTP_RAWLISTの紹介

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>

2。Windowsプラットフォームに関する特別な問題

2.1さまざまなFTPサーバーのリストコマンド形式の違い

ftp_rawlistによって返されるデータ形式は、FTPサーバーのタイプに応じて固定されていません。 Windowsサーバー(IIS FTPなど)は通常、UNIX/Linuxサーバーとは異なるリスト形式を返し、同じサーバーの異なるバージョンでさえ異なる形式を返す場合があります。

例えば:

  • UNIXサーバーは-RW-Rのようなものを返します。

  • Windows Serverは03-14-21 10:30 AM <DIR> FolderNameを返す場合があります

この形式の違いにより、返された結果の解析が異なる状況に適合します。特にWindowsシステムで実行される場合、返品形式がUNIXスタイルでなければならないとは想定できません。

2.2文字エンコードの問題

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>

3。FTP_RAWLISTによって返された結果を解析するための提案

異なるプラットフォームとサーバーの返品形式は異なるため、推奨される方法は次のとおりです。

  • 最初にサーバータイプを決定します(一部の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>

4。接続設定とタイムアウト

Windows FTPサーバーの応答が遅い場合があるため、適切なタイムアウトを設定することをお勧めします。

<code> $ conn = ftp_connect( 'gitbox.net'、21、90); // 90秒のタイムアウトftp_login($ conn、 'username'、 'password'); </code>

5。パッシブモード(PASV)およびアクティブモード(ポート)

FTP接続モードの互換性は、WindowsプラットフォームとLinuxプラットフォームで異なります。通常、パッシブモードはWindowsに推奨されます。

<code> ftp_pasv($ conn、true); </code>

それ以外の場合、 FTP_RAWLISTは、ファイアウォールまたはネットワーク構成の問題により、ディレクトリを取得できない場合があります。


要約します

WindowsシステムでPHPのFTP_RAWLISTを使用する場合、次のことに特に注意してください。

  • FTPサーバーによって返されるディレクトリリストの形式の違い

  • キャラクターエンコーディングの問題

  • 結果を返すための適切な解析

  • 接続タイムアウトおよび転送モード設定

これにより、クロスプラットフォームの互換性とプログラムの堅牢性を最大化できます。