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

Signaler
Messages postés
4
Date d'inscription
lundi 26 mai 2008
Statut
Membre
Dernière intervention
30 juin 2011
-
Messages postés
4
Date d'inscription
lundi 26 mai 2008
Statut
Membre
Dernière intervention
30 juin 2011
-
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

Messages postés
4
Date d'inscription
lundi 26 mai 2008
Statut
Membre
Dernière intervention
30 juin 2011

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);
}
}
?>
Messages postés
4
Date d'inscription
lundi 26 mai 2008
Statut
Membre
Dernière intervention
30 juin 2011

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