Obtention du répertoire d'un fichier à partir de son nom sur un FTP distant

Résolu
zefagi Messages postés 4 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 30 juin 2011 - 22 juin 2011 à 15:31
zefagi Messages postés 4 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 30 juin 2011 - 30 juin 2011 à 08:02
Bonjour,

Après un bon triturage de cerveau de plus de 4heures comprenant de multiples recherches Google sur les principaux forums traitant du problème, je m'adresse en dernier recours à vous.

J'ai écrit une fonction (basée sur un listing de répertoire) pour obtenir le répertoire complet à partir du nom du fichier. Celui-ci fonctionne mais c'est le return qui pose problème. Mon return ne retourne rien, en revanche, si je le remplace par un echo, c'est mon résultat qui apparaît.

J'ai lu la doc concernant return mais j'ai surement zappé quelque chose...

Voici ma fonction :

function FTP_CibleFile($conn_id,$rep_cible,$cible) {
$liste_contenu = ftp_nlist($conn_id, $rep_cible);
foreach ($liste_contenu as $element){
$element_cut = explode("\", $element);
$end_element = sizeof($element_cut);
$end_element--;

$fichier = strpos($element_cut[$end_element],".");
if ($fichier === false) {
$rep_cible = $rep_cible.'\\'.$element_cut[$end_element];
FTP_CibleFile($conn_id,$rep_cible,$cible);
$end_cut = "\".$element_cut[$end_element];
$rep_cible = str_replace ($end_cut,"",$rep_cible);
$rep_cible = str_replace ("\","/",$rep_cible);
}
else {
if($element_cut[$end_element]==$cible){
$chemin = str_replace ("\","/",$rep_cible);
return $chemin;
}
}
}
}


Je l'appelle de la manière suivante :

$chemin = FTP_CibleFile($conn_id,$rep_cible,$modele);
echo $chemin;




$conn_id = ftp_connect($host)
$rep_cible = mon répertoire
$modele = mon nom de fichier

En somme, celle-ci fonctionne mais je n'arrive pas à récupérer son résultat. C'est le principe de récursivité qui me bloque. C'est le classique d'une mauvaise utilisation de return.

J'espère que vous pourrez m'aider, en vous remerciant d'avance,

Jef'

2 réponses

zefagi Messages postés 4 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 30 juin 2011
30 juin 2011 à 08:02
Avec beaucoup d'aide, le problème a été résolu ailleurs.
Voici la fonction finale pour les intéressés :

Définition :

Fonction PHP servant à retourner le chemin d'accès d'un fichier sur un serveur distant
à partir de son nom.


Appel :

<?php 
$conn_id = ftp_connect($host);
$login_result = ftp_login($conn_id, $user, $passwd);
$chemin = FTP_CibleFile($conn_id,$rep_cible,$modele); 
?>



$conn_id : est égale à la fonction ftp_connect() où $host est égal à votre serveur (exemple $host="SERVEUR08";)
$login_result : est égale à la fonction ftp_login()
$rep_cible : répertoire où l'on recherche le fichier depuis la racine du serveur. (Exemple : "/bibliothèque/grand dossier contenu quelque part mon fichier")
$modele : le nom de votre fichier. L'extension est obligatoire.
$chemin : Vaudra le retour de la fonction FTP_CibleFile($conn_id,$rep_cible,$modele) (voir en dessous) sous la forme :
"(valeur de $rep_cible)/Dossier 1/Dossier 2/..."


Code de la fonction :

<?php
function FTP_CibleFile($conn_id,$rep_cible,$cible) {
static $pastPath = array();
$path = explode('/',$rep_cible);
$gotDir = 0;
$liste_contenu = ftp_nlist($conn_id, $rep_cible);
foreach($liste_contenu as $elem){
$clear_elem = explode('\\',$elem);
$end_clear_elem = count($clear_elem) - 1;
$elem = $clear_elem[$end_clear_elem];
if(strpos($elem,".") === false){
if(!in_array($elem,$pastPath)){
$pastPath[] = $elem;
return FTP_CibleFile($conn_id,$rep_cible.'/'.$elem,$cible);
}else{
$gotDir++;
}

}else{
if($elem == $cible){
return $rep_cible;
}
}
}
$tmp = count($path) - 1;
if($gotDir == 0 || in_array($path[$tmp], $pastPath)){
$b = strlen($rep_cible) - strlen($path[$tmp]) - 1;
$rep_cible = substr($rep_cible,0,$b);
return FTP_CibleFile($conn_id,$rep_cible,$cible);
}
}
?>
3
zefagi Messages postés 4 Date d'inscription lundi 26 mai 2008 Statut Membre Dernière intervention 30 juin 2011
24 juin 2011 à 11:16
Bonjour,

Je ne suis pas friand de up mais dans l'urgence je m'autorise...

Personne ? N'as d'idée... même rien qu'une piste...

J'ai tenté la sortie de boucle avec une variable booléenne mais sans succès.

Salutations
0
Rejoignez-nous