現在の位置: ホーム> 最新記事一覧> FTP_RAWLISTを使用して、タイムされたタスクで毎日更新ファイルを取得します

FTP_RAWLISTを使用して、タイムされたタスクで毎日更新ファイルを取得します

gitbox 2025-05-26

シーンの紹介

毎日ファイルを更新するリモートFTPサーバーがあるとします。私たちの目標は、毎朝の早い時間にPHPスクリプトを介してサーバーに自動的に接続し、その日に新しくアップロードされたファイルをチェックしてから、これらのファイルをローカルにダウンロードして後続の処理を行うことです。

ステップ1:FTPサーバーに接続します

まず、FTPサーバーに接続してログインする必要があります。

 $ftp_host = 'ftp.gitbox.net';
$ftp_user = 'username';
$ftp_pass = 'password';

$conn_id = ftp_connect($ftp_host);
if (!$conn_id) {
    die("接続できません FTP サーバ");
}

$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if (!$login_result) {
    ftp_close($conn_id);
    die("FTP ログインに失敗しました");
}

ステップ2:ディレクトリリストを取得します

ftp_rawlistを使用して、ターゲットディレクトリでファイル情報を取得します。

 $remote_dir = '/updates/';
$raw_list = ftp_rawlist($conn_id, $remote_dir);
if ($raw_list === false) {
    ftp_close($conn_id);
    die("ファイルリストを取得できません");
}

ステップ3:ファイルリストの解析

FTP_RAWLIST UNIX LS -Lコマンドの出力と同様の行のセットを返します。これらの行を解析し、ファイル名を抽出し、時間を変更する必要があります。

 $today = date('M d'); // e.g., "May 23"
$files_to_download = [];

foreach ($raw_list as $line) {
    $parts = preg_split("/\s+/", $line, 9);
    if (count($parts) < 9) continue;

    $month = $parts[5];
    $day = str_pad($parts[6], 2, '0', STR_PAD_LEFT);
    $file_time_or_year = $parts[7];
    $name = $parts[8];

    if ("$month $day" == $today) {
        $files_to_download[] = $name;
    }
}

ステップ4:ファイルをダウンロードします

次に、その日に更新されたファイルをダウンロードします。

 foreach ($files_to_download as $file) {
    $local_file = __DIR__ . "/downloads/$file";
    $remote_file = $remote_dir . $file;
    if (ftp_get($conn_id, $local_file, $remote_file, FTP_BINARY)) {
        echo "ファイルを正常にダウンロードしてください:$file\n";
    } else {
        echo "ダウンロードが失敗しました:$file\n";
    }
}

ステップ5:接続を閉じます

タスクが完了したら、FTP接続を閉じます。

 ftp_close($conn_id);

要約します

上記の手順を通じて、FTPサーバーに自動的に接続して毎日更新されたファイルをダウンロードできるPHPベースのタイミングタスクスクリプトを実装します。このスクリプトは、手動介入なしでLinuxのCronタイミングタスクシステムで毎日定期的に実行できます。この方法は、特にログファイル、データの同期、または静的リソースの更新を扱う場合、ファイルを定期的に更新する必要があるさまざまなシナリオに適しています。