Créer un nouveau fichier à partir d'un fichier uploadé

Créer un nouveau fichier à partir d'un fichier uploadé - PHP - Programmation

Marsh Posté le 06-06-2005 à 19:14:16    

Quand le serveur que j'utilise le veut bien, je sais uploader un fichier texte sur mon serveur.
(Easyphp sous Windows XP, c'est OK. PHP sous Linux, je ne dois pas avoir les bons droits, mon upload est refusé).
Supposons ce détail résolu pour Linux...
 
Une fois mon fichier texte déposé dans un répertoire nommé "entree", je veux l'ouvrir en lecture, et interpréter ligne par ligne son contenu pour écrire un autre fichier, à déposer dans un répertoire nommé "sortie".
J'ai une idée assez précise des traitements à effectuer pour fabriquer le nouveau contenu.
 
Le problème, c'est cette série de messages d'erreur :
 
Warning: fopen(entree/test1.txt): failed to open stream: No error in c:\program files\easyphp1-7\www\creation_sortie.php on line 21
 
Warning: fopen(sortie/test2.txt): failed to open stream: No error in c:\program files\easyphp1-7\www\creation_sortie.php on line 22
 
Warning: fwrite(): supplied argument is not a valid stream resource in c:\program files\easyphp1-7\www\creation_sortie.php on line 24
 
Warning: fwrite(): supplied argument is not a valid stream resource in c:\program files\easyphp1-7\www\creation_sortie.php on line 25
 
Warning: feof(): supplied argument is not a valid stream resource in c:\program files\easyphp1-7\www\creation_sortie.php on line 27
 
Fatal error: Call to undefined function: fget() in c:\program files\easyphp1-7\www\creation_sortie.php on line 29
 
1 - Le programme ne sait pas trouver mon fichier existant test1.txt
2 - Il est embêté par test2.txt qui n'existe pas encore (mais je pense que la raison est la même en fait).
3 - Il fait référence à un chemin c:\program files\easyphp1-7\www\creation_sortie.php alors que j'aurais plutôt attendu un chemin par rapport à la racine du site web. Je suis supposé être sur un serveur web, non ?
4 - Evidemment, entree\test1.txt ne marche, le chemin complet non plus, et test1.txt dans le même répertoire que creation_sortie.php pas davantage.
(5 - Euh !... Stream resource, quelqu'un peut me rappeler qu'est-ce que ce que ça que c'est ?)
 
Je simplifie le code :
----------------------
 
$fichier_txt  = "test1.txt";  // Et en cas de sous-répertoire ???
$fichier_ini  = "test2.txt";
 
$fichier_entree  = fopen($fichier_txt, "R" );
$fichier_sortie  = fopen($fichier_ini, "W" );
 
$ligne_numero = 0;
 
while (!feof($fichier_entree)) {
  $ligne_numero++;
  $entree = fget($fichier_entree,1000);
  $sortie = $entree." = ".$ligne_numero;
  fwrite($fichier_sortie, $sortie);
}
   
fclose($fichier_entree);
fclose($fichier_sortie);
 
Il peut manquer une instruction pour séparer les lignes dans le fichier de sortie, peut-être ? C'est un détail.
Le problème c'est que test1.txt n'est pas trouvé, alors que le programme d'upload l'a déposé sur le serveur.

Reply

Marsh Posté le 06-06-2005 à 19:14:16   

Reply

Marsh Posté le 06-06-2005 à 19:25:15    

"fget" c'est une erreur de recopiage ?
parce que ca doit etre "fgets"
 

Citation :

// Et en cas de sous-répertoire ???


$fichier_txt  = "entree\\test1.txt";  
$fichier_ini  = "sortie\\test2.txt";


Message édité par ritzle le 06-06-2005 à 19:26:26
Reply

Marsh Posté le 07-06-2005 à 08:05:49    

En effet, j'ai comme un douste là, si !...
Je vérifie dès que j'ai mis les pieds au bureau si je l'ai mis ou pas ce "s".
 
Pour les droits sous Linux, je mets 777 ou je peux faire moins brutal ? Ou bien le problème vient-il d'ailleurs ?
 
Je mettrai la solution complète quand tout marchera.

Reply

Marsh Posté le 07-06-2005 à 12:01:11    

Il manquait bien un s à fgets.
Problème pas résolu pour autant.
 
D'abord, pourquoi "txt\\test1.txt" et pas "txt/test1.txt" ?
Le fichier est-il vu comme appartenant à une arborescence Windows et non comme un fichier sur un serveur Web ?
Cela signifie-t-il qu'il faudra écrire "txt/test1" quand le programme sera déployé sur Linux ?
 
Mes commandes
$fichier_entree  = fopen($fichier_txt, "R" );  
$fichier_sortie  = fopen($fichier_ini, "W" );  
ne sont pas digérées.
 
$fichier_entree  = fopen($fichier_txt, "r" );  
$fichier_sortie  = fopen($fichier_ini, "w" );  
donnent un résultat, mais farci de Warnings.
 
En outre, je pensais que
$ligne = fgets($fichier_entree,1000);
allait gentiment lire la première ligne, en s'arrêtant avant 1000 au besoin
et que le while bouclerait jusqu'à la fin du fichier (3 lignes pour l'instant).
(Comment faire lire une ligne de fichier texte de type DOS ou Windows ? Et pour une ligne de fichier texte Linux, c'est pareil ou pas ?)
 
Au lieu de cela, le programme boucle sans fin, et me renvoie des pelletées de warnings du genre "failed to open stream".
Et mon fichier de sortie est bien créé cependant !!!!
 
Pour simplifier, j'ai juste demandé un
readfile($fichier_entree);
 
Et j'ai encore une injure en réponse :
Warning: readfile(Resource id #2): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_site\test_fichier.php on line 27
 
 
 
 
 

Reply

Marsh Posté le 07-06-2005 à 15:00:11    

En effet, j'ai du mélanger les slash et anti-slash.
Si tu essaye avec un fichier que tu as toi-meme mis (pas d'upload), ca marche pour l'ouverture ?


Message édité par ritzle le 07-06-2005 à 15:01:00
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed