,根據不同服務器返回格式寫不同的解析邏輯。
使用PHP 內置函數ftp_rawlist獲取信息後,可以結合正則表達式靈活解析,避免死板匹配。
如果條件允許,使用FTP 服務器支持的其他命令或協議(比如SFTP 或FTP 擴展命令),以獲取更準確的文件權限信息。
測試不同用戶權限下的返回結果,確認匿名和普通用戶權限返回是否一致。
考慮使用第三方FTP 庫,如phpseclib,這些庫通常有更強大的協議支持和更健壯的解析機制。
<?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)) {
die("FTP 登入失败");
}
// 獲取目錄列表
$rawlist = ftp_rawlist($conn_id, "/path/to/directory");
if ($rawlist === false) {
die("獲取目錄列表失败");
}
// 解析權限信息
foreach ($rawlist as $line) {
// Unix 風格權限字符串一般是第一個字段
// 例如:-rw-r--r-- 1 user group 1234 May 20 12:00 example.txt
$parts = preg_split('/\s+/', $line, 9);
if (count($parts) === 9) {
$permissions = $parts[0];
$filename = $parts[8];
echo "文件: $filename ,權限: $permissions\n";
}
}
ftp_close($conn_id);
?>