Coder un ftp en php

Bonjour,

Je veux afficher les dossiers et fichiers de mon FTP. J’arrive à les afficher mais je n’arrive pas à faire de redirection pour “voyager” dans l’arborescence. Quelqu’un aurait-il une piste ?

Merci.

<?php
  
// Mise en place d'une connexion basique.
$connexion=ftp_connect($server) or die ("Ce serveur n'existe pas. Veuillez vérifier l'adresse utilisée.");

// Identification avec un nom d'utilisateur et un mot de passe
$login = ftp_login($connexion,$user,$password);

// Récupération du contenu d'un dossier
$ftp_nlist = ftp_nlist($connexion, ".");

// Récupère la liste des fichiers de /
$ftp_rawlist = ftp_rawlist($connexion, '/');

sort($ftp_nlist);
foreach ($ftp_nlist as $v) 
{
	//1. Size is '-1' => directory
	if (ftp_size($connexion, $v) == -1) 
	{
		//output as [ directory ]
		echo "[ " . $v . " ]<br />\n";
	}
}
foreach ($ftp_nlist as $v) 
{
	//2. Size is not '-1' => file
	if (!(ftp_size($connexion, $v) == -1)) 
	{
		//output as file
		echo "" . $v . "<br />\n";
	}
}

// Fermeture de la connexion
ftp_close($connexion);
?>

Ben je suppose que tu devras faire un lien HTML qui avec une variable GET quelconque positionnera le dossier courant (http://fr2.php.net/manual/fr/function.ftp-chdir.php) en fonction d’un chemin.

Par contre, cette façon de faire (ie: émuler un client FTP avec du HTTP) n’est pas très performante. Je ne sais pas pourquoi tu veux le faire, mais au choix :

  1. Soit tu as un FTP qui varie peu, et dans ce cas tu peux mettre en place une tâche quotidienne pour mettre en cache l’arborescence du FTP et ainsi éviter de faire trop de connexions FTP (elles ne serviraient qu’à charger les fichiers). Éventuellement, tu peux même mettre les fichiers en cache et dans ce cas, cela fera un (sacré) proxy.
  2. Si tu fais un proxy de telle sorte à ce que ton FTP (local) ne soit pas accessibles par l’extérieur, je pense que tu as plus vite fait de mettre en place un partage réseau (si bien sûr tu as la main sur le matos ;))

Merci pour ta réponse. Désolé pour le retard !

Je veux afficher le FTP car sur mon site internet je veux pouvoir avoir accès à certaines informations en fonction de mon login/pass. Et vu que tout est stocké sur mon FTP, j’affiche l’arborescence FTP et je peux “voyager” dedans et quand un fichier m’intéresse, je le télécharge :slight_smile:

Okay. Mais tu ouvres quand même la porte à ton FTP. Je veux dire, la sécurité “je passe par HTTP pour cacher le mot de passe de FTP” (si c’est ce que tu veux faire) n’en est pas une.

Par contre, regarde du côté de la fonction ftp_chdir que je t’indique si dessus.

Pour la suite, à toi de voir, mais je te conseille de faire un proxy PHP vers ton FTP, ce qui permettra de faire ce que tu veux en minimisant les problèmes de performances, et ça pourra même mettre un bon exercice de code :slight_smile:

Je comprends pas ce que tu veux dire sur la sécurité. Mes login/mots de passe seront enregistrés dans la base de données donc je pense pas qu’il y est de problème, ils seront cryptés etc…

Sinon je vois même pas comment faire un proxy PHP. Si tu as de la doc à me faire parvenir, je suis ouvert :slight_smile:

Ben en gros, tu précharges les dossiers : quand tu fais une connexion FTP, ça a un coût. Du coup, quand tu lis un dossier FTP tu peux très bien garder le résultat de ta lecture FTP en cache (tu peux aussi le mettre en session) et éviter de relire ce que tu connais déjà.

Je n’ai pas d’exemples réelles de doc, mais en gros, ça consiste à stocker en local (sur ton serveur HTTP) la hiérarchie de ton serveur FTP.