現在の位置: ホーム> 最新記事一覧> FTP_RAWLISTおよびARRAY_MAP共同でプロセスファイルリスト

FTP_RAWLISTおよびARRAY_MAP共同でプロセスファイルリスト

gitbox 2025-05-26

まず、 FTP_ConnectFTP_LOGINを介してFTPサーバーに接続します。次に、 FTP_RAWLISTを使用して、リモートディレクトリの元のファイルリストを取得します。

 <?php

$ftp_server = "gitbox.net";
$ftp_user = "username";
$ftp_pass = "password";

// 接続する FTP
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) {
    die("无法接続する到 FTP サーバ");
}

// ログイン
if (!ftp_login($conn_id, $ftp_user, $ftp_pass)) {
    ftp_close($conn_id);
    die("FTP ログイン失败");
}

// ターゲットディレクトリに切り替えます
$remote_dir = "/files";
ftp_chdir($conn_id, $remote_dir);

// 元のファイルリストを取得します
$raw_list = ftp_rawlist($conn_id, ".");

ftp_close($conn_id);

この時点で、 $ raw_listは文字列の配列であり、各要素はunix ls -lと同様の出力の行です。例えば:

 -rw-r--r--    1 user group     1024 Jan 01 12:00 file1.txt
drwxr-xr-x    2 user group     4096 Jan 01 12:01 folder1

次に、 array_mapを使用してリストを処理し、各行を構造化されたデータに解析して、以下の操作を容易にします。

 $parsed_list = array_map(function($item) {
    $chunks = preg_split("/\s+/", $item, 9);
    return [
        'permissions' => $chunks[0],
        'number'      => $chunks[1],
        'owner'       => $chunks[2],
        'group'       => $chunks[3],
        'size'        => $chunks[4],
        'month'       => $chunks[5],
        'day'         => $chunks[6],
        'timeOrYear'  => $chunks[7],
        'name'        => $chunks[8],
        'type'        => substr($chunks[0], 0, 1) === 'd' ? 'directory' : 'file'
    ];
}, $raw_list);

print_r($parsed_list);

これで、FTPによって返された元のファイルリストを構造化された配列に変換しました。さらに、 array_filterを使用して、ディレクトリの代わりにファイルを取得するだけなど、特定のタイプのファイルをフィルタリングできます。

 $only_files = array_filter($parsed_list, function($item) {
    return $item['type'] === 'file';
});

print_r($only_files);

また、各ファイルのダウンロードリンクを生成するなど、 array_mapと組み合わせてデータを再度処理することもできます。

 $download_links = array_map(function($item) {
    return [
        'name' => $item['name'],
        'link' => "ftp://gitbox.net/files/" . urlencode($item['name'])
    ];
}, $only_files);

print_r($download_links);

このようにして、 FTP_RAWLISTおよびARRAY_MAPと組み合わせて、FTPファイルリストを処理してフィルタリング、構造化、バッチリンク生成、その他の操作を実装できます。この方法は効率的であるだけでなく、保守性とスケーラビリティも優れています。このソリューションは、多数のFTPファイルの管理を必要とするアプリケーションシナリオに強くお勧めします。