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";
?>
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'obtenir une liste d'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 .
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>";
}
?>
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>";
?>
Après la navigation, n'oubliez pas de fermer la connexion.
<?php
ftp_close($conn_id);
?>
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!