Récupérer chemin fichier local avec firefox

Fermé
flashy38 Messages postés 8 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 9 janvier 2008 - 7 juin 2007 à 23:01
 polo - 2 sept. 2008 à 17:53
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 4607 Date d'inscription lundi 7 novembre 2005 Statut Contributeur Dernière intervention 24 octobre 2020 1 323
7 juin 2007 à 23:22
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 Date d'inscription dimanche 8 janvier 2006 Statut Membre Dernière intervention 30 juin 2010 22
5 janv. 2008 à 16:55
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
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