當前位置: 首頁> 最新文章列表> 如何將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文件列表的管理後台或文件瀏覽功能,使數據處理更加直觀和高效。