Rechercher : dans
Par :

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

Dernière réponse le 9 jui 2008 à 09:31:13 toto, le 16 aoû 2005 à 11:54:11 
 Signaler ce message aux modérateurs

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!

Configuration: windows2000 sp4 
Easyphp1.8

Meilleures réponses pour « [php] récupérer le chemin du fichier » dans :
[PHP] Upload de fichiers Voir Le langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
[Word] Récupérer un fichier impossible à ouvrir VoirCertains gros fichiers contenant des images généralement, se mettent parfois de façon "irrationnelle" à faire bloquer Word lorsqu'on veut les modifier. Pour les récupérer, il existe une méthode non-garantie : Ouvrir le fichier et l'enregistrer...

2

jisisv, le 16 aoû 2005 à 12:12:43
  • +1

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 Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)

Répondre à jisisv

3

ceddec, le 16 aoû 2005 à 13:20:40
  • +1

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

Répondre à ceddec

toto, le 16 aoû 2005 à 17:24:12

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 !

Répondre à toto

4

ceddec, le 16 aoû 2005 à 20:29:16
  • +1

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?lie­n=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

Répondre à ceddec

5

toto, le 17 aoû 2005 à 09:04:08

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!

Répondre à toto

6

ceddec, le 17 aoû 2005 à 10:22:29
  • +1

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

Répondre à ceddec

7

toto, le 18 aoû 2005 à 10:04:47

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!

Répondre à toto

8

ceddec, le 18 aoû 2005 à 10:27:03
  • +2

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

Répondre à ceddec

9

toto, le 18 aoû 2005 à 11:31:58

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 !

Répondre à toto

10

toto, le 18 aoû 2005 à 15:58:37
  • +1

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!

Répondre à toto

11

 M@RTY, le 9 jui 2008 à 09:31:13

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!

Répondre à M@RTY
Collection CommentÇaMarche.net