當前位置: 首頁> 最新文章列表> 【用ftp_login 和ftp_rawlist 打造一個簡單的PHP FTP 文件瀏覽器】

【用ftp_login 和ftp_rawlist 打造一個簡單的PHP FTP 文件瀏覽器】

gitbox 2025-05-26

1. 連接並登錄FTP 服務器

首先,使用ftp_connect建立與FTP 服務器的連接,然後用ftp_login函數登錄。

 <?php
// 連接 FTP 伺服器
$ftp_server = "gitbox.net";
$conn_id = ftp_connect($ftp_server);

if (!$conn_id) {
    die("无法連接到 FTP 伺服器 $ftp_server");
}

// 登入
$ftp_user = "your_username";
$ftp_pass = "your_password";
if (!ftp_login($conn_id, $ftp_user, $ftp_pass)) {
    die("FTP 登入失败");
}

echo "成功連接并登入到 $ftp_server\n";
?>

2. 獲取目錄列表

登錄成功後,我們使用ftp_rawlist獲取目錄中的文件和文件夾信息。

 <?php
// 獲取當前目錄列表
$directory = "/";
$file_list = ftp_rawlist($conn_id, $directory);

if ($file_list === false) {
    die("無法獲取目錄列表");
}

// 輸出目錄信息
foreach ($file_list as $file) {
    echo $file . "<br>";
}
?>

這裡返回的是一個包含文件詳細信息的數組,類似Linux ls -l命令的輸出。


3. 解析目錄列表

為了更方便顯示,我們需要對ftp_rawlist返回的字符串進行解析,分辨文件和目錄。

 <?php
function parseFtpRawList($raw_list) {
    $items = [];
    foreach ($raw_list as $line) {
        $chunks = preg_split("/\s+/", $line, 9);
        if (count($chunks) === 9) {
            list($permissions, $number, $owner, $group, $size, $month, $day, $timeOrYear, $name) = $chunks;
            $items[] = [
                'permissions' => $permissions,
                'size' => $size,
                'name' => $name,
                'is_dir' => $permissions[0] === 'd',
                'raw' => $line,
            ];
        }
    }
    return $items;
}

$parsed_list = parseFtpRawList($file_list);
foreach ($parsed_list as $item) {
    echo ($item['is_dir'] ? "[DIR] " : "[FILE] ") . htmlspecialchars($item['name']) . "<br>";
}
?>

4. 實現簡單的瀏覽功能

我們可以根據用戶點擊的目錄名來切換路徑,支持遞歸瀏覽。

 <?php
// 通過 GET 參數獲得當前目錄
$current_dir = isset($_GET['dir']) ? $_GET['dir'] : "/";

// 避免路徑穿越攻擊
$current_dir = str_replace(["..", "//"], "", $current_dir);

$file_list = ftp_rawlist($conn_id, $current_dir);
$parsed_list = parseFtpRawList($file_list);

echo "<h2>目錄: " . htmlspecialchars($current_dir) . "</h2>";
echo "<ul>";

// 上级目錄链接
if ($current_dir !== "/") {
    $parent_dir = dirname($current_dir);
    if ($parent_dir == "\\") $parent_dir = "/";
    echo '<li><a href="?dir=' . urlencode($parent_dir) . '">[..]</a></li>';
}

foreach ($parsed_list as $item) {
    if ($item['is_dir']) {
        echo '<li>[DIR] <a href="?dir=' . urlencode(rtrim($current_dir, "/") . "/" . $item['name']) . '">' . htmlspecialchars($item['name']) . '</a></li>';
    } else {
        echo '<li>[FILE] ' . htmlspecialchars($item['name']) . '</li>';
    }
}
echo "</ul>";
?>

5. 斷開FTP 連接

瀏覽完畢,別忘了關閉連接。

 <?php
ftp_close($conn_id);
?>

總結

通過上述步驟,我們完成了一個基於PHP 的簡單FTP 文件瀏覽器:

  • 連接並登錄FTP 服務器

  • 使用ftp_rawlist獲取目錄內容

  • 解析並區分文件與目錄

  • 實現目錄切換瀏覽

你可以根據這個基礎,進一步擴展功能,比如文件下載、刪除、上傳等。希望本文能幫助你快速上手PHP FTP 編程!

  • 相關標籤:

    FTP