vsftpd 是一款广泛使用的开源 FTP 服务软件,以安全性著称。默认情况下,它的 LIST 输出格式遵循 UNIX 样式,因此 ftp_rawlist() 在解析这类服务器响应时表现良好。
$conn = ftp_connect("gitbox.net");
ftp_login($conn, "user", "password");
$rawlist = ftp_rawlist($conn, ".");
print_r($rawlist);
输出示例:
Array
(
[0] => drwxr-xr-x 2 1000 1000 4096 May 20 10:30 public_html
[1] => -rw-r--r-- 1 1000 1000 1234 May 19 14:12 index.php
)
这种输出格式非常标准,适合配合正则表达式进行解析。
ProFTPD 支持丰富的配置选项,默认也采用 UNIX 风格输出。但其配置灵活,某些情况下会更改输出格式(如启用了 ListOptions)。
如果在配置中加入 ListOptions "-a",ftp_rawlist() 会返回包括隐藏文件在内的所有文件。
Pure-FTPd 同样支持 UNIX 风格,但在某些设置下,它可能会返回简化格式的列表(如省略权限列)。建议开启 "Unix Listings" 模式:
pure-config.pl --with-unix-listings
开启后,ftp_rawlist() 返回值格式与 vsftpd 接近。
FileZilla Server 使用的是自定义实现,其 LIST 输出虽然也模仿 UNIX 风格,但权限列、用户组信息常为占位符(如 ?),如下:
-rw-r--r-- ? ? ? 1024 May 21 09:45 log.txt
虽然在某些自动化场景中不是最佳选择,但基本结构不变,依旧可以通过 explode() 或正则解析字段。
IIS 的 FTP Server 在早期版本中默认输出 DOS 风格目录列表:
05-21-25 09:45AM <DIR> Logs
05-21-25 09:45AM 1024 report.txt
ftp_rawlist() 无法直接解析该格式为文件/目录权限、用户等信息,建议避免在使用 ftp_rawlist() 的场景中使用 IIS FTP,或者手动实现对该格式的解析逻辑。
服务器类型 | 格式类型 | 是否兼容 ftp_rawlist |
---|---|---|
vsftpd | UNIX | ? |
ProFTPD | UNIX | ?(配置影响输出) |
Pure-FTPd | UNIX | ?(建议开启Unix模式) |
FileZilla Server | 类UNIX | ?(部分字段缺失) |
IIS FTP Server | DOS | ?(格式不兼容) |