Récupérer chemin fichier local avec firefox

flashy38 Messages postés 8 Statut Membre -  
 polo -
Voici mon problème :

via un formulaire classique, je poste un fichier.
<form action="script.php" method="POST">
<p> 1er fichier de la série : <input type="FILE" name="namefile"></p>
<input type="SUBMIT" value="Envoyer !" style="cursor:hand;">
</form>


Dans le script php lancé à la validation du formulaire, je cherche à récupérer le nom et le chemin du fichier local (celui qui sur mon disque dur) pour faire ensuite un traitement.
Par exemple, avec le fichier "C:\Mon_Dossier\Nom_Du_Fichier.part03.rar", je souhaite récupérer une 1ère variable avec "C:\Mon_Dossier\Nom_Du_Fichier.part03.rar" (le nom du fichier), une 2ème avec "rar" (l'extension), une 3ème avec "3" (le numéro du fichier), une 4ème avec "2" (le nb de digit du numéro) et une 5ème avec "C:\Mon_Dossier\Nom_Du_Fichier.part" (la "racine" du nom du fichier)

Le code du script est le suivant :
$nom_fichier=$_POST['namefile'];

//Récupération de l'extension du 1er fichier
$ext_file=strrchr($nom_fichier,'.');
$ext_file=substr($ext_file,1);

//Récupération du numéro du fichier et du nombre de digit
$lg_name_file=strlen($nom_fichier);
$lg_ext_file=strlen($ext_file);
$num_file=substr(strrchr(substr($nom_fichier, 0,-($lg_ext_file+1)),'.'),5);
$nb_digit_num_file=strlen($num_file);
$num_file=$num_file+0; //passage du numéro en chiffre

//Récupération du chemin et de la racine du nom des fichiers à uploader
$lg_num_first_file=$nb_digit_num_file;
$racine_name_file=substr($nom_fichier, 0,-($lg_ext_file+1+$lg_num_first_file));

echo "1ère variable (nom fichier) : ".$nom_fichier."<br>";
echo "2ème variable (extension) : ".$ext_file."<br>";
echo "3ème variable (numéro fichier) : ".$num_file."<br>";
echo "4ème variable (nb digit) : ".$nb_digit_num_file."<br>";
echo "5ème variable (racine nom fichier) : ".$racine_name_file."<br>";


Dans le cas de IE, pas de pb, le script php me sort :
1ère variable (nom fichier) : C:\Mon_Dossier\Nom_Du_Fichier.part03.rar
2ème variable (extension) : rar
3ème variable (numéro fichier) : 3
4ème variable (nb digit) : 2
5ème variable (racine nom fichier) : C:\Mon_Dossier\Nom_Du_Fichier.part


Par contre, avec firefox, le script ne me sort pas le chemin :
1ère variable (nom fichier) : Nom_Du_Fichier.part03.rar
2ème variable (extension) : rar
3ème variable (numéro fichier) : 3
4ème variable (nb digit) : 2
5ème variable (racine nom fichier) : Nom_Du_Fichier.part


Pourtant je pense que mon code est bon. Ca doit venir des navigateurs !?!
Pour une fois que IE fait mieux que Firefox !!! Ou du moins ce que je veux !!!

Savez-vous comment je peux faire pour avoir aussi le chemin avec firefox ?

Merci d'avance...
A voir également:

2 réponses

gryzzly Messages postés 5220 Statut Contributeur 1 335
 
je ne pense pas que ca vienne du navigateur, CAR :

c'est du php = interprété par le serveur...
0
bladeboxe Messages postés 8 Statut Membre 22
 
Bonjour,
Cela me fait exactement la même chose que Flashy 38.

Et bien que je soit en parti d'accord avec Gryzzly je ne peux m'empêché de me me demander pourquoi est ce qu'avec ce même code j'ai autant d'ennui sur firefox2 et pas un souci avec IE7 .

Si un bon saint maritain pouvait me donner la réponse cela m'aiderai grandement.

bladeboxe
0
polo
 
Bonjour, c'est peut-être un peu tard, mais bon, si mes remarques peuvent aider...
J'ai effectivement constaté le même phénomène sans trouver une explication. Heureusement, dans mon cas, je ne m'intéresse qu'au fichier (pour détecter des doublons de fichiers "uploadé", et je m'en sors avec trois cas de figures (mais je n'ai pas tout testé...)
En plus, j'ai constaté que Firefox réagit autrement sous Windows que sous Linux (j'ai les deux OS)
Sous IE7/Windows, j'ai Firefox 3 (mais selon vos expériences, c'était déjà vrai pour Firefox 2), la chaîne retournée tronque le chemin pour ne renvoyer que le nom du fichier. Et la remarque de Grizzly ("je ne pense pas que ca vienne du navigateur, CAR : c'est du php = interprété par le serveur...") me semble pas tout à fait correcte, car si PHP est interprété coté serveur - vrai -, il ne fait que renvoyer ce qu'on lui "soumet", et c'est, par induction, bel et bien un chemin tronqué coté client...
Par contre, sous Linux (Ubuntu), OS à ne pas négliger - sauf si vous connaissez vos visiteurs et leurs équipements - Firefox 2 renvoie correctement le chemin mais avec des antislashes (bien entendu), ce qui fait que j'ai dû prévoir des variables concernant le navigateur et l'OS, les deux à récupérer via ($nav = ) getenv("HTTP_USER_AGENT"),

Voici comment...
$fichier = $_GET['f'];
(le $_GET, et non le $_POST, est utilisé pour faire de l'AJAX, détecter le doublon et avertir l'internaute AVANT soumission du formulaire)
1) Windows XP, IE (et pareil pour Safari)
//on retourne le nom (avec chemin) du fichier
$fichier_rev = strrev($fichier);
//on cherhce le slash (j'ai dû en mettre deux pour échapper le premier... !)
$fin_fichier = strpos($fichier_rev,'\\');
//on prend le string jusqu'au premier slash
$fichier_rev2 = substr($fichier_rev,0,$fin_fichier);
//on le retourne à nouveau
$fichier_fin = strrev($fichier_rev2);

2) Windows XP, Firefox = utilisation directe du renvoi
if(strchr($nav,"Firefox")!="" && $os=="Windows"){
$fichier_fin = $fichier;
}

3) Sous Linux (Ubuntu), Firefox
if(strchr($nav,"Firefox")!="" && $os=="Linux"){
$fichier_rev = strrev($fichier);
//on cherche l'anti-slash
$fin_fichier = strpos($fichier_rev,'/');
//on prend le string jusqu'au premier anti_slash
$fichier_rev2 = substr($fichier_rev,0,$fin_fichier);
//on le retourne à nouveau
$fichier_fin = strrev($fichier_rev2);
}

Voilà, si cela peut être utile...
Et je n'ai pas encore fait des test sur tous les OS possibles, ni tous les navigateurs

Polo
0