PHP|Débutant :: Forums

Advertisement

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

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

#1 29-08-2009 00:17:14

promouv
Membre
Inscription : 29-08-2009
Messages : 2

écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

Bonsoir tous,

je me prend la tête sur un bout de code qui ne me retourne 1/4 de ce que je veux, grosso modo l'idée est de lire un fichier trouver une ligne précise et réécrire cette ligne d'une manière différente.

voila le code actuel :

define('index.php');
 
    $fd = fopen('index.php',"r+");
 
    if (!$fd) die("Impossible d'ouvrir le fichier");
    $i=1;
    while (!feof($fd)) {
        $ligne = fgets($fd, 1024);
        if (!feof($fd)){
          if (strpos($ligne,'</body>') > 1){
                    $ligne .='blabla'."\n";
          }
          $i++;
    $new_content .= $ligne;
        }
    }
  fclose($fd);

 $fd = fopen('index.php',"w+");
 fwrite($fd,$new_content);
 fclose($fd);

donc à la ligne ou il trouve la balise "</body>" j'écris "texte avant la balise</body>texte après"


si quelqu'un passe par là et vois mon erreur je suis preneur

merci à vous tous. smile

Hors ligne

#2 29-08-2009 08:37:47

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

Re : écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

Salut,

Tu devrai préciser un peu mieux en donnant des exemples :
cas de différentes lignes d'origine et que doivent-elles devenir :

</body>

blobloblo</body>

</body>blobloblo

blobloblo</body>blablabla

Sinon si tu veux simplement remplacer la ligne :


while (!feof($fd)) {
        $ligne = fgets($fd, 1024);

        // if (!feof($fd)){ <= empèche de modifier la dernière ligne !!! (le test est fait au while)

           if (strpos($ligne,'</body>') > 1){
                    $ligne ='blablabla</body>blobloblo'."\n";
           }

          $i++;
          $new_content .= $ligne;
        // }
    }
 

Si tu veux plus sophistiqué, il va falloir passer par une expression régulière.


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

Hors ligne

#3 29-08-2009 10:26:56

promouv
Membre
Inscription : 29-08-2009
Messages : 2

Re : écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

bonjour à toi voila un petit exemple :

html d'origine :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>titre</title>
</head>

<body>

<p>je suis le </p>
<p>corp de la page</p>
</body>
</html>

donc on se positionne a la balise </body> et on modifie cette ligne pour que le résultat final soit :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>titre</title>
</head>

<body>

<p>je suis le </p>
<p>corp de la page</p>
blobloblo et blablabla avant la balise</body>
</html>

j'espère avoir été un peut plus clair roll

Hors ligne

#4 29-08-2009 10:50:48

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

Re : écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

Donc le code donné plus haut doit fonctionner en modifiant le test strpos.


while (!feof($fd)) {
        $ligne = fgets($fd, 1024);

           if (strpos($ligne,'</body>') !== false){
                    $ligne ='blobloblo et blablabla avant la balise</body>'."\n";
           }

          $i++;
          $new_content .= $ligne;
       
    }
 


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

Hors ligne

#5 29-08-2009 15:00:25

pepebzh
Membre
Inscription : 27-08-2009
Messages : 2
Site Web

Re : écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

Comme la doc est notre amie wink le même code en 6 ligne au lieu de 21 (compatible php5 seulement, mais qui de nos jours est encore en php4 ?) :


foreach( $arrayLine = file('index.php') as $keyLine => $line ) {
if ( is_int(strpos($line,'</body>')) ){
    $arrayLine[$keyLine] = trim($arrayLine[$keyLine]) . 'blabla' . PHP_EOL;
  }
}
file_put_contents('index.php', implode('', $arrayLine));
 

file() renvoie directement le contenu du fichier dans un tableau, donc plus besoin de faire le parcours ligne par ligne, et file_put_contents permet d'enregistrer le contenu d'une variable dans un fichier.
Code plus court = moins de possibilité d'erreur.
Par contre je n'ai pas compris l'intérêt du define('index.php') ?

Hors ligne

#6 29-08-2009 16:04:42

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

Re : écrire dans un fichier (.php ou .txt ou .ini) à une ligne bien défini

Oui, file renvoie le fichier complet dans un tableau.
Ce n'est à priori pas le cas mais attention avec de très gros fichiers.

if ( is_int(strpos($line,'</body>')) )
c'est correct mais je trouve plus élégant :
if (strpos($ligne,'</body>') !== false)

$arrayLine[$keyLine] = trim($arrayLine[$keyLine]) . 'blabla' . PHP_EOL;

Heu... là tu mets 'blabla' après </body> non ?
Et le trim n'est pas vraiment nécessaire.

pepebzh a écrit :

Par contre je n'ai pas compris l'intérêt du define('index.php') ?

Où ça ?


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

Hors ligne

Pied de page des forums