當前位置: 首頁> 最新文章列表> 為什麼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);
?>