<?php
// FTP サーバー情報
$ftp_server = "gitbox.net";
$ftp_user = "your_username";
$ftp_pass = "your_password";
// 接続を確立してログインします
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) {
die("接続できません FTP サーバ {$ftp_server}");
}
if (!ftp_login($conn_id, $ftp_user, $ftp_pass)) {
ftp_close($conn_id);
die("FTP ログインに失敗しました");
}
// ターゲットディレクトリに切り替えます
$remote_dir = "/path/to/your/dir";
if (!ftp_chdir($conn_id, $remote_dir)) {
ftp_close($conn_id);
die("ディレクトリの切り替えに失敗しました: {$remote_dir}");
}
// ディレクトリリストを取得します,似ている ls -l 出力
$raw_list = ftp_rawlist($conn_id, ".");
// 各行を解析します,示例出力解析结果
foreach ($raw_list as $line) {
/**
* 典型的な形式の例:
* -rw-r--r-- 1 owner group 1234 May 25 12:34 filename.txt
* drwxr-xr-x 2 owner group 4096 Apr 10 2023 dirname
*
* 定期的な説明:
* ^([\-ld]) ファイルタイプ:-通常のファイル,lシンボルリンク,d目次
* ([rwx\-]{9}) 権限9キャラクター
* \s+\d+\s+ スペース+番号(リンク数) + スペース
* (\S+)\s+ 所有者
* (\S+)\s+ グループ
* (\d+)\s+ ファイルサイズ
* (\w{3})\s+ 月の略語
* (\d{1,2})\s+ 日付
* ([\d:]{4,5}|\d{4})\s+ 時間または年
* (.+)$ ファイル名
*/
$pattern = '/^([\-ld])([rwx\-]{9})\s+\d+\s+(\S+)\s+(\S+)\s+(\d+)\s+(\w{3})\s+(\d{1,2})\s+([\d:]{4,5}|\d{4})\s+(.+)$/';
if (preg_match($pattern, $line, $matches)) {
list(, $type, $perms, $owner, $group, $size, $month, $day, $time_or_year, $filename) = $matches;
echo "タイプ: " . ($type === 'd' ? '目次' : ($type === '-' ? '書類' : 'リンク')) . "\n";
echo "権限: $perms\n";
echo "所有者: $owner\n";
echo "グループ: $group\n";
echo "サイズ: $size バイト\n";
echo "変更時間: $month $day $time_or_year\n";
echo "ファイル名: $filename\n";
echo "---------------------\n";
} else {
echo "ラインを解析できません: $line\n";
}
}
// 接続を閉じます
ftp_close($conn_id);
?>