FTP関連アプリケーションを開発するときは、リモートFTPサーバーでディレクトリ構造情報を取得し、さらに解析して処理する必要があることがよくあります。 PHPでは、 FTP_RAWLIST関数は、FTPサーバーからディレクトリリストを取得する元の機能を提供します。この記事では、エクスプロイト関数を組み合わせて、必要なディレクトリ構造データをすばやく取得するために、 FTP_RAWLISTのリターン結果を効率的に分解する方法を導入します。
FTP_RAWLISTは、FTP操作のPHPの関数です。その機能は、FTPサーバーにリストコマンドを送信し、返されたディレクトリまたはファイル情報を配列に返すことです。各配列要素は、生のFTPディレクトリアイテム情報です。
サンプルコードは次のとおりです。
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");
$list = ftp_rawlist($conn, "/path/to/directory");
ftp_close($conn);
print_r($list);
このコードは、FTPサーバーgitbox.netに接続して、指定されたディレクトリ内のすべてのファイルとサブディレクトリのリストを取得します。
返された$リストアレイは、次のようになります。
Array
(
[0] => drwxr-xr-x 2 user group 4096 May 20 14:34 folder1
[1] => -rw-r--r-- 1 user group 1234 May 20 14:35 file1.txt
)
各行は、ファイル許可、所有者、ファイルサイズ、変更の日付、およびその他の情報を含むスペース分離の文字列です。
気になるフィールド(ファイル名、ファイルサイズ、ディレクトリなど)を抽出するために、各アイテムをエクスプロイト関数を使用して分解できます。
サンプルコード:
foreach ($list as $item) {
$parts = preg_split("/\s+/", $item, 9); // 最もシェア9部品,ファイル名のスペースの切り捨ては避けてください
$type = $parts[0][0] === 'd' ? 'directory' : 'file';
$size = $parts[4];
$name = $parts[8];
echo "Type: $type, Size: $size, Name: $name\n";
}
preg_splitと規則性を組み合わせることにより、通常のエクスプロイトを使用する際の一貫性のないスペースによる解析の解析を避けるために、さまざまな形式でスペースを柔軟に処理できます。
再利用するために、解析ロジックを関数にカプセル化できます。
function parseFtpRawList($rawList) {
$result = [];
foreach ($rawList as $item) {
$parts = preg_split("/\s+/", $item, 9);
$result[] = [
'type' => $parts[0][0] === 'd' ? 'directory' : 'file',
'size' => $parts[4],
'name' => $parts[8],
];
}
return $result;
}
// 使用の例
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "username", "password");
$rawList = ftp_rawlist($conn, "/");
$parsed = parseFtpRawList($rawList);
ftp_close($conn);
print_r($parsed);
この方法で処理した後、その後の論理処理または表示を簡単にするために、ディレクトリリストの構造化された配列を取得します。
FTP_RAWLISTとExploit (またはpreg_Split )関数を組み合わせることにより、PHPプログラマーは、FTPサーバーによって返されたRAWディレクトリデータを有用な構造化された情報にすばやく解析できます。この方法はシンプルで効率的で、ほとんどのFTPディレクトリ解析シナリオに適しています。
実際の開発では、ファイルの変更時間の解析を追加したり、ディレクトリ構造の再帰取得などをサポートして、機能的な完全性とユーザーエクスペリエンスを改善するなど、プロジェクトのニーズに応じてさらに最適化することもできます。