Probleme pour écrire dans un fichier avec la fonction fwrite

Probleme pour écrire dans un fichier avec la fonction fwrite - PHP - Programmation

Marsh Posté le 26-02-2007 à 14:40:20    

Bonjour à tous.

Je voudrai lister le contenu d'un repertoire local. Ce repertoire est un dossier (presentation_amc/Pieces/) contenant plein de fichiers *.jpg.
Pour cela, je ne semble pas avoir trop de soucis, ça marche :)
 
Et je voudrai écrire dans un fichier (administration_base/liste_image.txt) le résultat de cette commande. Et là ça coince...  :kaola:  
L'erreur retournée est:

Citation :

Warning: fwrite(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\site\accueil_general\presentation_amc\administration_base\add.php on line 136


 
Voici la portion de mon code PHP:

Citation :


124  $file_image = "liste_image.txt" ;
125  $fichier = fopen($file_image,"a" ) ;
126  $fichier_a_modif = "liste_image.txt" ;
127  $data = $file_image.'<br>test<br>' ;
128  
129  if ($handle = opendir("../Pieces/" ))
130  {
131          while (false !== ($file_image = readdir($handle)))
132   {
133           if ($file_image != "." && $file_image != ".." )
134    {
135     echo $file_image." / " ;
136     fwrite( $file_image, $data );
137  }
138   }
139  }
140  fclose($fichier);


 
Si quelqu'un pouvais m'apporter un peu de ces connaissances, je lui en serait reconnaissant  :hello:
 
Merci !


Message édité par lespagnol9393 le 26-02-2007 à 14:49:43

---------------
Mon FeedBack
Reply

Marsh Posté le 26-02-2007 à 14:40:20   

Reply

Marsh Posté le 26-02-2007 à 16:31:04    

fwrite prend un identifiant de ressource (le truc retourné par fopen), pas un nom de fichier. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 26-02-2007 à 18:03:22    

fwrite( $fichier , $data );  ?
 
:)


---------------
Mon FeedBack
Reply

Marsh Posté le 26-02-2007 à 18:18:39    

mais lis la doc s'tout expliqué [:w3c compliant]
http://fr.php.net/fwrite:

Code :
  1. $filename = 'test.txt';
  2. $somecontent = "Ajout de chaîne dans le fichier \n";
  3. // Assurons nous que le fichier est accessible en écriture
  4. if (is_writable($filename)) {
  5.    // Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout
  6.    // Le pointeur de fichier est placé à la fin du fichier
  7.    // c'est là que $somecontent sera placé
  8.    if (!$handle = fopen($filename, 'a')) {
  9.          echo "Impossible d'ouvrir le fichier ($filename)";
  10.          exit;
  11.    }
  12.    // Ecrivons quelque chose dans notre fichier.
  13.    if (fwrite($handle, $somecontent) === FALSE) {
  14.        echo "Impossible d'écrire dans le fichier ($filename)";
  15.        exit;
  16.    }
  17.  
  18.    echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";
  19.  
  20.    fclose($handle);
  21.                  
  22. } else {
  23.    echo "Le fichier $filename n'est pas accessible en écriture.";
  24. }


Reply

Marsh Posté le 26-02-2007 à 18:20:32    

En effet, merci de ton aide anapajari :)
Finalement c'était bien de la forme  fwrite( $fichier , $data );
 
;)


---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 09:28:01    

Et avant de finir ce post, j'aurai une toute petite question.
 
J'aurai voulu savoir comment faire pour vérifier si un fichier image porte bien une extension correcte, ou porte bien une extention tout court :)
 
Par exemple si
$nom_image == imagetest => Erreur/Sortir
$nom_image == imagetest.blabla => Erreur//Sortir
$nom_image == imagetest.jpg => OK/Continuer
 
Pour la syntaxe, j'ai pensé a des choses comme

Citation :

if( $nom_image !== %"."% )

mais evidément ça serai trop beau si ça pouvais marcher :D
 
(je ne sais pas si j'ai été bien clair :) )


Message édité par lespagnol9393 le 27-02-2007 à 09:28:38

---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 09:39:39    

tu splittes sur le caractère point et tu prends le dernier element du tableau, hop ça te donne l'extension.
 
 

Reply

Marsh Posté le 27-02-2007 à 09:43:39    

tu peux utiliser pathinfo, ou bien des fonction sur les chaines.
Par exemple avec strrchr et substr, tu peux y arrivé.
Cherche un peu

Reply

Marsh Posté le 27-02-2007 à 10:00:22    

(Ne pas se fier qu'à l'extension pour juger du type d'un fichier, ceci dit...)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-02-2007 à 10:03:20    

sielfried a écrit :

(Ne pas se fier qu'à l'extension pour juger du type d'un fichier, ceci dit...)


( pas dit le contraire ... :o )

Reply

Marsh Posté le 27-02-2007 à 10:03:20   

Reply

Marsh Posté le 27-02-2007 à 10:12:17    

anapajari a écrit :

( pas dit le contraire ... :o )


 
(pas dit que t'avais dit le contraire... :o :o)
 
:)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-02-2007 à 10:19:54    

anapajari a écrit :

tu splittes sur le caractère point et tu prends le dernier element du tableau, hop ça te donne l'extension.


 
Merci a anapajari pour ton aide, mais pourrais-tu un tout petit peu développer ?
Je suis encore bien trop novice en PHP.
 
Merci aussi aux autres pour leur aide.

Message cité 1 fois
Message édité par lespagnol9393 le 27-02-2007 à 10:20:56

---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 10:38:46    

lespagnol9393 a écrit :

Merci a anapajari pour ton aide, mais pourrais-tu un tout petit peu développer ?


Que voudrais tu que je developpe? Je t'ai filé le lien vers la page de la doc où il y a un exemple, je t'ai dit comment l'utiliser... Je vois pas trop ce que je peux faire de plus!  
Te donner le code tout fait?

lespagnol9393 a écrit :

Je suis encore bien trop novice en PHP.


j'aurais pas dit novice ...

Reply

Marsh Posté le 27-02-2007 à 10:55:21    

Au fait, si y a pas besoin d'expressions régulières comme ici, utiliser plutôt explode qui est plus rapide.
 
Les exemples sont encore plus simples d'ailleurs :
http://fr.php.net/manual/fr/function.explode.php
 
Si avec ça tu piges pas... :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-02-2007 à 10:57:23    

Merci vous deux pour votre patience.
Je vais jeter un coup d'oeil sur ce pti lien.


---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 13:06:23    

Impeccable, tout marche impecc....
 
Merci bien a vous et bonne continuation sur le forum ;)


---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 14:39:11    

Si je peux aussi me permettre de vous solliciter encore une fois, je me trouve devant un autre probleme.
 
J'aimerai pouvoir ajouter du code html dans une page, mais à une ligne bien précise.
 
J'ai chercher un peu partout et j'ai trouvé ça, mais là encore, je n'arrive pas a m'en sortir...

Citation :

# Accès direct
On peut placer le pointeur directement à une position précise dans le fichier
 
    * rewint( $f ); pour se placer en début de fichier
    * fseek( $f , $offset); déplace le pointeur interne du fichier de $offset (Attention, cette fonction retourne 0 en cas de succès, et sinon -1)
    * ftell( $f ); renvoie la position actuelle du pointeur


 
Merci de votre aide une fois de plus :)


---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 18:28:58    

Ta "ligne bien précise", c'est genre "la ligne 28" ou plutôt "la ligne qui contient 'truc'" ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-02-2007 à 18:46:06    

Au plus simple, tu vides ton fichier et tu le remplis avec son nouveau contenu!

Message cité 1 fois
Message édité par anapajari le 27-02-2007 à 18:46:17
Reply

Marsh Posté le 27-02-2007 à 20:06:00    

sielfried a écrit :

Ta "ligne bien précise", c'est genre "la ligne 28" ou plutôt "la ligne qui contient 'truc'" ?


C'est plutot la ligne numéro 28. C'est un numéro de ligne que je recherche.
Ou pour etre encoreplus précis, 5 lignes avant la fin de fichier.


---------------
Mon FeedBack
Reply

Marsh Posté le 27-02-2007 à 20:07:42    

anapajari a écrit :

Au plus simple, tu vides ton fichier et tu le remplis avec son nouveau contenu!


C'est plutot délicat, car je ne sais pas comment je pourrai me débrouiller pour recopier l'ancien code, inserer le nouveau code qques lignes avant la fin de fichier, et recopier la fin de l'ancien code.
 
ça me parait plus compliké que la solution d'inserer directement le code dans la page initiale, non ?


---------------
Mon FeedBack
Reply

Marsh Posté le 28-02-2007 à 08:06:17    

Pour etre plus clair, le nouveau code doit s'integrer dans une <table></table> deja existante dans la page html.
 
Or si ce code s'insere à la fin du fichier, il ne sera pas compris dans la table, étant donné que la balise de fin </table> aura déja été fermée.
 
J'ai été clair ? :D


---------------
Mon FeedBack
Reply

Marsh Posté le 28-02-2007 à 09:09:05    

non tu récupères tout ton fichier danbs une string, tu utilises les fonctions sur les chaines pour trouver l'endroit, tu rajoutes du texte et tu sauves tout ça en ré-écrivant ton fichier [:spamafote]

Reply

Marsh Posté le 28-02-2007 à 09:30:12    

Merci pour ta réponse. Je pense creuser de ce coté là alors :)
 
Par contre tu me conseilles d'utiliser les chaines, mais je dois récuperer un numéro de ligne, et non pas une suite de caracteres, pour inserer mon code au bon endroit.


Message édité par lespagnol9393 le 28-02-2007 à 09:31:28

---------------
Mon FeedBack
Reply

Marsh Posté le 28-02-2007 à 09:34:41    

Code :
  1. $file_name = 'mon_fichier.txt';
  2. $lines = file($file_name);
  3. // ... Traitement de $lines[28] ...
  4. file_put_contents($file_name, $lines);


Message édité par sielfried le 28-02-2007 à 09:35:01

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-02-2007 à 09:36:45    

Whaaa... C'est gentil ça :)
 
Et si maintenant je souhaite inserer mon code, non pas à la ligne 28 (par exemple), mais à 5 lignes de la fin du fichier (encore par exemple) ?
 
Aurais-tu une idée ? ;)


---------------
Mon FeedBack
Reply

Marsh Posté le 28-02-2007 à 09:47:41    

Si tu sais comment calculer la taille de tableau, tu sais répondre à ça... et j'espère bien que tu sais. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-02-2007 à 09:50:05    

plutot que de te baser sur les numeros de lignes, je te conseillerais de t'inspirer des systeme de template en mettant dans ta page html une "balise" te permettant de rapidement identifier l'endroit ou ajouter le texte.
Et si tu as peur que cela apparaisse , suffit de le mettre en commentaire html, quelque chose comme:

Code :
  1. <!--JE_VEUX_MON_TABLEAU_LA-->


ensuite tu n'as plus qu'a faire un str_replace

Reply

Marsh Posté le 28-02-2007 à 09:55:05    

Ah ben ouais, si tu peux faire ça c'est mieux.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 28-02-2007 à 09:58:48    

Quand tu parles de "balise", tu veux dire "ancre" ?
 
Edit: Haaaa je crois avoir compris ton idée !
La page html qui va recevoir la portion de code est en fait une liste de pièces de magasin.
Donc un autre probleme va se poser :
 
Si je modifie la balise comme tu le dis, ça marchera pour la première pièce ajoutée a la page, mais non pas pour les suivantes, tu comprends ?
C'est pour ça que dans le meilleur des cas, il aurait été génial de rajouter le code, soit par exemple à 5 lignes de la fin du fichier, histoire de se placer avant la balise </table>, ou soit directement une ligne avant </table>


Message édité par lespagnol9393 le 28-02-2007 à 10:16:49

---------------
Mon FeedBack
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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