当前位置: 首页> 最新文章列表> 为什么 ftp_rawlist 显示的文件权限不准确?

为什么 ftp_rawlist 显示的文件权限不准确?

gitbox 2025-05-26

解决方案建议

  • ,根据不同服务器返回格式写不同的解析逻辑。

  • 使用 PHP 内置函数 ftp_rawlist 获取信息后,可以结合正则表达式灵活解析,避免死板匹配。

  • 如果条件允许,使用 FTP 服务器支持的其他命令或协议(比如 SFTP 或 FTP 扩展命令),以获取更准确的文件权限信息。

  • 测试不同用户权限下的返回结果,确认匿名和普通用户权限返回是否一致。

  • 考虑使用第三方 FTP 库,如 phpseclib,这些库通常有更强大的协议支持和更健壮的解析机制。


示例代码:基于 ftp_rawlist 简单解析 Unix 风格权限

<?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);
?>