Position actuelle: Accueil> Derniers articles> Implémentez le navigateur de fichiers FTP à l'aide de ftp_login + ftp_rawlist

Implémentez le navigateur de fichiers FTP à l'aide de ftp_login + ftp_rawlist

gitbox 2025-05-26

1. Connectez-vous et connectez-vous au serveur FTP

Tout d'abord, utilisez FTP_Connect pour établir une connexion au serveur FTP, puis connectez-vous à la fonction FTP_LOGIN .

 <?php
// connecter FTP serveur
$ftp_server = "gitbox.net";
$conn_id = ftp_connect($ftp_server);

if (!$conn_id) {
    die("无法connecter到 FTP serveur $ftp_server");
}

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

echo "成功connecter并Se connecter到 $ftp_server\n";
?>

2. Obtenez la liste des répertoires

Après avoir enregistré avec succès, nous utilisons FTP_RAWLIST pour obtenir les informations de fichier et de dossier dans le répertoire.

 <?php
// Obtenez la liste des répertoires actuels
$directory = "/";
$file_list = ftp_rawlist($conn_id, $directory);

if ($file_list === false) {
    die("Impossible d&#39;obtenir une liste d&#39;annuaire");
}

// Informations sur le répertoire de sortie
foreach ($file_list as $file) {
    echo $file . "<br>";
}
?>

Voici un tableau contenant des détails de fichier, similaire à la sortie de la commande Linux LS -L .


3. Analyser la liste des répertoires

Afin de le rendre plus facile à afficher, nous devons analyser la chaîne renvoyée par FTP_RAWLIST pour distinguer les fichiers et les répertoires.

 <?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. Implémentez la fonction de navigation simple

Nous pouvons changer de chemin en fonction du nom du répertoire cliqué par l'utilisateur et prendre en charge la navigation récursive.

 <?php
// passer GET Paramètres pour obtenir le répertoire actuel
$current_dir = isset($_GET['dir']) ? $_GET['dir'] : "/";

// Évitez les attaques de passage à la voie
$current_dir = str_replace(["..", "//"], "", $current_dir);

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

echo "<h2>Table des matières: " . htmlspecialchars($current_dir) . "</h2>";
echo "<ul>";

// 上级Table des matières链接
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. Débrancher FTP

Après la navigation, n'oubliez pas de fermer la connexion.

 <?php
ftp_close($conn_id);
?>

Résumer

Grâce aux étapes ci-dessus, nous terminons un simple navigateur de fichiers FTP basé sur PHP:

  • Connectez-vous et connectez-vous au serveur FTP

  • Utilisez ftp_rawlist pour obtenir du contenu d'annuaire

  • Analyser et distinguer les fichiers des répertoires

  • Implémenter la navigation de commutation de répertoire

Vous pouvez étendre davantage les fonctions en fonction de cette base, telles que le téléchargement de fichiers, la suppression, le téléchargement, etc. J'espère que cet article pourra vous aider à démarrer rapidement avec la programmation FTP PHP!