Posez votre question Signaler

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

toto - Dernière réponse le 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!
Lire la suite 

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

12 réponses
Réponse
+3
moins plus
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
toto - 16 août 2005 à 17:24
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 !
ceddec- 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
toto - 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!
Ajouter un commentaire
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+2
moins plus
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!
M@RTY - 9 juil. 2008 à 09:31
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!
Ajouter un commentaire
Réponse
+1
moins plus
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!
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « [php] récupérer le chemin du fichier » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?