,根据不同服务器返回格式写不同的解析逻辑。
使用 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);
?>