当前位置: 首页> 最新文章列表> 如何将 ftp_rawlist 的结果转换为 JSON 格式

如何将 ftp_rawlist 的结果转换为 JSON 格式

gitbox 2025-05-26

1. 了解ftp_rawlist返回结果格式

ftp_rawlist返回的是一个字符串数组,每个字符串类似于Linux系统中ls -l命令的输出,例如:

-rw-r--r-- 1 user group 1234 May 10 10:00 file1.txt
drwxr-xr-x 2 user group 4096 May 09 09:00 folder1

每行包含的信息依次为:

  • 文件权限(如 -rw-r--r--

  • 硬链接数

  • 文件所属用户

  • 文件所属组

  • 文件大小(字节数)

  • 修改日期(通常包含月、日、时间或年份)

  • 文件名


2. 解析ftp_rawlist结果为数组

解析过程的重点是将每行字符串拆解成各个字段,并整理成键值对。示例代码如下:

<?php
function parseRawList(array $rawList): array {
    $files = [];
    foreach ($rawList as $line) {
        $chunks = preg_split('/\s+/', $line, 9);
        if (count($chunks) < 9) {
            continue; // 格式异常,跳过
        }
        list($permissions, $links, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $chunks;

        // 根据timeOrYear判断年份或时间
        if (strpos($timeOrYear, ':') !== false) {
            // 含时间,年份取当前年份
            $year = date('Y');
            $time = $timeOrYear;
        } else {
            $year = $timeOrYear;
            $time = '00:00';
        }

        // 拼接完整修改时间,转换为时间戳
        $dateStr = "$month $day $year $time";
        $timestamp = strtotime($dateStr);

        $files[] = [
            'name' => $name,
            'permissions' => $permissions,
            'links' => (int)$links,
            'owner' => $owner,
            'group' => $group,
            'size' => (int)$size,
            'modified' => date('Y-m-d H:i:s', $timestamp),
            'is_dir' => $permissions[0] === 'd',
        ];
    }
    return $files;
}
?>

3. 示例:连接FTP,获取列表并转换成JSON

完整示例展示如何连接FTP服务器,调用ftp_rawlist,然后使用上面的解析函数转换并输出JSON:

<?php
$ftpServer = 'gitbox.net';
$ftpUser = 'username';
$ftpPass = 'password';

// 建立FTP连接
$connId = ftp_connect($ftpServer);
if (!$connId) {
    die("无法连接到FTP服务器 $ftpServer");
}

// 登录
if (!ftp_login($connId, $ftpUser, $ftpPass)) {
    ftp_close($connId);
    die("FTP登录失败");
}

// 获取原始文件列表
$rawList = ftp_rawlist($connId, '.');
if ($rawList === false) {
    ftp_close($connId);
    die("获取FTP列表失败");
}

// 解析列表
$filesArray = parseRawList($rawList);

// 输出JSON格式
header('Content-Type: application/json');
echo json_encode($filesArray, JSON_PRETTY_PRINT);

// 关闭连接
ftp_close($connId);

// 解析函数同上,略
?>

4. 总结

通过以上方法,我们将ftp_rawlist函数的字符串列表结果转换成了结构化数组,并最终生成了JSON格式数据。这样,不仅方便PHP程序内部对FTP文件列表的操作,也方便将数据通过API传输给前端或其他系统。

这种方式特别适合构建基于FTP文件列表的管理后台或文件浏览功能,使数据处理更加直观和高效。