[php] récupérer le chemin du fichier

Fermé
toto - 16 août 2005 à 11:54
 Slydeath - 17 déc. 2009 à 12:11
Bonjour à tous,
Voilà, je voudrais récuperer le chemin d'un fichier de puis ce formulaire:
<html><head></head>
<body>
<form action="execute.php" method=post>
<input name="machin" type=file>
</form>
</body></html>
et puis d'ouvrir le fichier spécifié avec le script suivant:
<?
if (isset($_post['machin'])) $fichier=$_post['machin'];
$open=fopen($fichier);
?>

mais il y a toujours un message "Warning: fopen() expects at least 2 parameters" ...
je ne sais pas comment je peut récupérer le chemin complet du fichier choisi. est-ce avec la fonction realpath()?

y a t-il quelqu'1 qui peut m'aider ? merci beaucoup d'avance!
A voir également:

8 réponses

ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
16 août 2005 à 13:20
Bonjour,

en fait, il est impossible de récupérer le chemin complet. Tu peux uploader le ficiher sur le serveur sans problème mais tu n'auras pas le chemin complet.
Voici le fonctionnement de l'upload :

1 - tu choisi le fichier à uploader (avec un
<input type="file" name="fichier">
)
2 - un fichier temporaire sera créé sur le serveur. La page qui reçoit le formulaire pourra connaitre le nom avec $
_FILES['fichier']['tmp_name']

3 - pour finir l'upload utilise la commande
rename($_FILES['fichier']['tmp_name'],  $_FILES['fichier']['name']) 
et normalement le fichier sera uploadé au même endroit que le script qui recoit le formulaire (c'est un exemple, tu peux l'uploader où tu veux)

Bon courage
3
Salut, je te remercie beaucoup!
j'ai une autre question, comment peut-on créer un fichier temporaire sous php?
ce que je voulais faire c'est de corriger quelques fautes dans mon fichier, par exemple, j'ai un fichier text.txt et dedans il y a un ligne : "Goudin;st,phanie"
et je veux que chaque fois que l'on rencontre une virgule on la remplace avec un "é", donc j'ai écrit un script suivant:
<?
fichier = "C:\Documents and Settings\Administrateur\Bureau\best.txt" ;
$open=fopen($fichier,"r+") or die ("impossible d'ouvrir le fichier!");
print ("le fichier est ouvert!<br>");
while (!feof($open))
{
$lire_ligne=fgets($open,255);
$extrait=explode(";",$lire_ligne); //chaque fois que l'on
rencontre un ; faire
$nom=$extrait[0]; //récuperer le nom
$prenom=$extrait[1]; //récuperer le prénom
$anal_pre=explode(",",$prenom); //dans le prénom si on
rencontre une" ," alors
$consti=emplode("é",$prenom);

}
fclose($open);
?>
mais il y a toujours une erreur " Undefined offset: 1" je ne sais pas pourquoi?!
et j'ai pensé que peut-etre si on crée un fichier temporaire pour pouvoir mettre la valeur de $prenom et après de travailler sur ce fichier....
S'il y a quelqu'un a une idée pour moi?! merci beaucoup d'avance !
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82 > toto
16 août 2005 à 20:29
Bonsoir,

déja pour remplacer la virgule par un é utilise plutot strtr() (voir la doc ici : http://www.nexen.net/docs/php/annotee/function.strtr.php?lien=str)

Ensuite, peux tu me dire ce que fais la fonction emplod parceque je ne la connais pas.

Enfin, le script que tu as mis ne mettra pas à jour le fichier puisqu'il n'écrit pas dessus.

Bon courage
0
toto > ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012
17 août 2005 à 09:04
salut, merci de ton aide

La fonction implode() est le contraire de la fonction explode(). En fait, la fonction explode() exporte les parties séparées par le sépérateur et de les coller dans un tableau à une dimension et la fonction implode() ne fait que les assembler dans une chaine caractere!
voilà un exemple:
<?
$chaine=" toi rat la, yeu em"; //ma chaine
$extrait= explode(",",$chaine); // si je rencontre une , alors faire
$part1= $extrait[0]; //récuperation de deux parties séparées par la virgule
$part2 =$extrait[1];
$implode=implode("",$extrait); //les rassembler!
print("$implode"); //aller on imprime
?>
le résultat de print() --> toi rat la yeu em ( la virgule disparait!).
Merci encore pour ton aide, je vais consulter le site que tu m'as passé.
Chao!
0
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
17 août 2005 à 10:22
Merci, c'est bon à savoir. J'ai vu la doc dessus et j'ai trouvé (je pense) une erreur dans le script :
Tu as écris
<?
fichier = "C:\Documents and Settings\Administrateur\Bureau\best.txt" ;
$open=fopen($fichier,"r+") or die ("impossible d'ouvrir le fichier!");
print ("le fichier est ouvert!<br>");
while (!feof($open))
{
$lire_ligne=fgets($open,255);
$extrait=explode(";",$lire_ligne); //chaque fois que l'on
rencontre un ; faire
$nom=$extrait[0]; //récuperer le nom
$prenom=$extrait[1]; //récuperer le prénom
$anal_pre=explode(",",$prenom); //dans le prénom si on
rencontre une" ," alors
$consti=emplode("é",$prenom);

}
fclose($open);
?> 


Ta ligne $consti=emplode("é",$prenom); ne pourra pas marcher éfficacement puisque $prenom est une chaine de caractère. Je pense qu'il faudrait plutôt mettre
$consti=emplode("é",$anal_pre);


Bon courage
2
Salut tout le monde,
j'ai réussi à récupérer le chemin du fichier, et voilà mon script :
Mon formulaire :
<html>
<head></head>
<body>
<form action="action_browse.php" method=post ENCTYPE="multipart/form-data">
<b>Choisissez le fichier</b><br>
<input name="abo" type=file size=60><br>
<input type=submit value="OK">
</form>
</body>
</html>
Mon fichier action_browse.php:
<?
if ($_FILES[abo] !="") {
@copy($_FILES[abo][tmp_name], "c:\uploadfiles".$_FILES[abo][name]) or die("Couldn't copy the file.");
} else {
die(mysql_error());}
print ($_FILES[abo][tmp_name]);
$path = $_FILES[abo][tmp_name];
$open = fopen($path,"r+");
$lire_ligne = fgets($open,255);
print ("$lire_ligne");
print ("<br>Oprération réussie<br>");
print ("ok");

?>
Ca marche très bien, mais ce que je comprends pas c'est qu'il y a toujours la ligne :
Notice: Use of undefined constant tmp_name - assumed 'tmp_name' in "mon chemin" on line 7
qui est afficher, est-ce que c'est une erreur ou juste un avertissement? comment peut-on le résoudre?
Merci d'avance ! chao!
2
c'est juste qu'il faut que tu mette ['tmp_name'] avec les apostrophes, mais de toute facon il dit qu'il l'interprete comme ca donc ca marche!
0
Salut, merci de ton aide, j'ai fini le truc.
Mais j'ai une autre question, comment peut-on se placer à la deuxième ligne du fichier?
Merci d'avance et bonne journée à tous!
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ceddec Messages postés 148 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 10 mars 2012 82
18 août 2005 à 10:27
Bonjour,

Je ne sais pas s'il y a une fonction qui permet de lire ligne par ligne. Par contre comme une ligne se termine par un retour chariot, tu peux faire ca
calculer la position du retour chariot (strpos)
lire ce nombre de caractère (fread(fichier, nombre))
et la tu seras au début de la 2eme ligne

Autre solution : Tu transforme le fichier en un tableau où chaque case correspond à une ligne du fichier et à partir de là, tu peux faire ce que tu veux. (Les explications : http://www.phpindex.com/articles/articles_lire.php3?element=343 )

Bon courage
1
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
16 août 2005 à 12:12
Toutes les informations sur le chargement des fichiers se trouve ici
http://php.easynet.be/manual/fr/features.file-upload.php

Notons que fopen demande effectivement un second argument:
http://php.easynet.be/manual/fr/function.fopen.php

Johan
0
Je te remercie beaucoup,
en suite, pour lire ligne par ligne j'utilise la méthode suisvante :
<? //Je lit le fichier
$fichier = "chemin"; $open =fopen($fichier,"r+");
while(!feof($open)) {
$lire_ligne = fgets($open,255); // je lis toutes les lignes du fichier !
print("$ligne<br>"); //je l'imprime
}
Voilà ce que j'ai fait pour parcourir le fichier ligne par ligne, je ne sais pas si c'estait ce que tu voulais dire mais au cas où ca peut t'etre util...
Salut !
0
up

Cette solution marche parfaitement, je m'en suis servi pour faire un import de données depuis un fichier csv vers ma base de données mais je rencontre un souci pour l'export de données depuis la base vers un fichier csv.

Avant je travaillais en local et l'export marchais parfaitement mais depuis que je cherche à le faire sur le réseau cela ne fonctionne plus (ni en local ni sur le résau).

J'ai bien ajouter le "ENCTYPE='multipart/form-data'" dans le <from> et je récupère bien le fichier ($fichier = $_FILES['chemin_export']['tmp_name'];) mais il y a un souci soit a l'ouverture soit a l'écriture. (enfin je pense ^^)

mon open : $fic = fopen ($fichier, 'w'); // peut etre que w ne convient pas ...
mon write : fwrite($fic, $contenu); // me renvoit "int(165333)" donc il a bien les données mais ne les écrits pas :s

Voila, si vous avez une solution je suis preneur =)

PS : Je bosse avec Wampserveur 2 et avec IE7
0