PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 08-05-2010 10:13:30

jojaba
Membre
Lieu : Obersoultzbach - Alsace
Inscription : 05-10-2009
Messages : 16
Site Web

Ajout dynamique d'une ligne dans un fichier

Bonjour,
Je souhaiterais donc ajouter une ligne dans un fichier en utilisant php. Voilà ce que je me propose de faire. Je lis le fichier (dans lequel je souhaite insérer une nouvelle ligne) ligne par ligne en utilisant la fonction "file()". Ensuite je recherche l'endroit où je souhaite placer ma nouvelle ligne (avant la ligne qui comporte la balise <title>, je modifie la ligne "repère" en lui ajoutant la nouvelle ligne. Ensuite je relis le tableau et l'envoie vers le fichier (après l'avoir ouvert en écriture et mis à 0) header.php. Concrètement ça donne ça pour le code :

/<?php
* Reading the header file line by line to have an array that will be modify... */
    $header_lines = file(PUN_ROOT.'header.php');
    $lines_number = count($header_lines);
    //Reading each line to find the line containing the <title> tag
    for ($i = 0; $i < $lines_number; $i++) {
      if (strpos($header_lines[$i], '<title>')) {
        //Adding a line to include the Metadata core file
        $header_lines[$i] = '<?php include \'plugins/dcm/core/dcm.php\'; ?>'.$header_lines[$i];
      }
    }
    /*Opening the header file and replacing all the content by the new content (with the added line)*/
    //Deleting content of the file
    $fp = fopen(PUN_ROOT.'header.php', 'w');
    fwrite ($fp, '');
    fclose ($fp);
    //Writing back each line of the file
    $fp = fopen(PUN_ROOT.'header.php', 'a');
    for ($i = 0; $i < $lines_number; $i++) {
      fwrite($fp, $header_lines[$i]);
    }
    fclose ($fp);
    /*Replacing the data in the log file dcm.txt*/
    $dcm_data = file_get_contents(PUN_ROOT.'plugins/dcm/core/dcm.txt');
    $data = explode(';', rtrim($dcm_data));
    $install_data = ($data[0] != 0) ? $data[0] : time();
    $update_data = time();
    $data_plugin_status = 1;
    $all_data = $install_data.';'.$update_data.';'.$data_plugin_status;
    $fp = fopen(PUN_ROOT.'plugins/dcm/core/dcm.txt', 'w');
    fwrite($fp, $all_data);
    fclose($fp);
?>

Le fichier que je modifie s'appelle "header.php". J'ai utilisé une boucle "for" car, d'après ce que j'ai lu, en utilisant "foreach" on travaille sur une copie du tableau et non sur le tableau lui-même.
Or, en appliquant se script, rien ne se passe, même pas de message d'erreur. Par contre d'après mon éditeur de texte dans lequel j'éditais "header.php", ce fichier a bien été modifié...
Je ne suis pas sûr d'employer la bonne méthode, alors si vous avez une autre solution, n'hésitez pas à me la communiquer wink

Merci d'avance pour votre aimable aide smile

Dernière modification par jojaba (08-05-2010 10:14:36)


Plume CMS - Le système de gestion de contenu léger et puissant !
Localiser des extensions Mozilla sur BabelZilla
FluxBB, les forums tout en simplicité et en puissance !

Hors ligne

#2 08-05-2010 10:40:19

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Ajout dynamique d'une ligne dans un fichier

Salut,

...ce fichier a bien été modifié...

Qu'est-ce qui te fait dire ceci ?
As tu bien un "error_reporting" à ALL ?
As tu vérifié les droits sur le fichier à écrire ?
Le chemin vers le fichier est bon ?

Tout ceci car j'ai fait fonctionner ton script correctement...

D'autre part, tu peux quand même utiliser foreach.

A+


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#3 08-05-2010 12:53:37

jojaba
Membre
Lieu : Obersoultzbach - Alsace
Inscription : 05-10-2009
Messages : 16
Site Web

Re : Ajout dynamique d'une ligne dans un fichier

mcAllan a écrit :

As tu bien un "error_reporting" à ALL ?

Dans mon fichier php.ini :

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Je suppose que ça devrait être bon comme ça, ou dois-je ne mettre qu'E_ALL ?

mcAllan a écrit :

As tu vérifié les droits sur le fichier à écrire ?

Pendant mon test en local, j'éditais le fichier header.php dans jEdit (mon éditeur de texte) et à chaque fois que je lançais le script, jEdit m'indiquais que header.php a été modifié et me demandais si je voulais enregistrer les modifications intervenues. Donc, oui, le fichier a les droits suffisants apparemment.

Le chemin vers le fichier est bon ?

Voir réponse précédente...

Tout ceci car j'ai fait fonctionner ton script correctement...

Ah bon ?

D'autre part, tu peux quand même utiliser foreach.

Merci pour l'info. Je testerai dès que possible.

Merci pour ta réponse smile


Plume CMS - Le système de gestion de contenu léger et puissant !
Localiser des extensions Mozilla sur BabelZilla
FluxBB, les forums tout en simplicité et en puissance !

Hors ligne

#4 08-05-2010 16:24:48

jojaba
Membre
Lieu : Obersoultzbach - Alsace
Inscription : 05-10-2009
Messages : 16
Site Web

Re : Ajout dynamique d'une ligne dans un fichier

Je pense que le problème vient de mon test :

if (strpos($header_lines[$i], '<title>'))

D'après le manuel php la fonction strpos() ne renvoie pas forcément "false", je pense que ça doit être la même chose pour "true".

Je vais approfondir cette piste...


Plume CMS - Le système de gestion de contenu léger et puissant !
Localiser des extensions Mozilla sur BabelZilla
FluxBB, les forums tout en simplicité et en puissance !

Hors ligne

#5 08-05-2010 20:58:04

jojaba
Membre
Lieu : Obersoultzbach - Alsace
Inscription : 05-10-2009
Messages : 16
Site Web

Re : Ajout dynamique d'une ligne dans un fichier

jojaba a écrit :

Je pense que le problème vient de mon test :

if (strpos($header_lines[$i], '<title>'))

D'après le manuel php la fonction strpos() ne renvoie pas forcément "false", je pense que ça doit être la même chose pour "true".

Je vais approfondir cette piste...

Eh bien j'ai trouvé. C'est bien le test qui n'était pas bon. Il fallait remplacer ça :

if (strpos($header_lines[$i], '<title>'))

par ça :

(strpos($header_lines[$i], '<title>') !== false)

wink

Par contre ça ne marche pas avec foreach() puisqu'on travaille avec une copie, la modification n'est pas prise en compte lors de l'écriture...

Dernière modification par jojaba (08-05-2010 20:58:32)


Plume CMS - Le système de gestion de contenu léger et puissant !
Localiser des extensions Mozilla sur BabelZilla
FluxBB, les forums tout en simplicité et en puissance !

Hors ligne

Pied de page des forums