IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Modifier une chaine (une date) dans un fichier php


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut Modifier une chaine (une date) dans un fichier php
    Bonsoir à toutes et tous

    Je suis débutant en php. J'espère être dans le bon forum.

    Directement sur le serveur, avec la méthode "cron", j'aimerai, sur le fichier "index_05.php"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <!-- *********************** date a modifier /> -->
     
    <!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">
     
    <body>
            <div id="footer"> &nbsp; contact : <a href="http://xxxxxxxxxx" title="contact titi">titi</a> via titi</a> | mise à jour le 15 décembre 2016
            </div>
        </div>
    </body>
    </html>
    changer la date qui existe "15 décembre 2016" en date du jour "29 mai 2017". J'ai concocté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
     
      $fichier = 'index_05.php'; 
      $contenu = str_replace('15 décembre 2016',$ladate_du_jour, file_get_contents($fichier)); 
      // pour vérification
      echo $contenu;
      file_put_contents($fichier, $contenu); 
    ?>
    cela fonctionne, mais à la ligne 6 j'ai l'ancienne date en "dur"

    Comme je ne connais pas l'ancienne date j'ai écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php 
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
    // pour vérification
    echo $ladate_du_jour;
    echo '<br />';
     
    $lefichier = fopen('index_05.php', 'r');
     
    while(!feof($lefichier)) 
    			{
    				$ligne++;
    			$contenu_du_fichier .= fgets($lefichier, 175);
     
    			} 
    $findme   = 'mise à jour le ';
     
    // prend : mise à  jour le 15 décembre 2016 
    $test = (strstr($contenu_du_fichier, $findme));
     
    fclose($lefichier);
     
      $fichier = 'index_05.php'; 
     
      $contenu = str_replace($test,'mise à jour le '.$ladate_du_jour, file_get_contents($fichier)); 
      // pour vérification
      echo $contenu;
      file_put_contents($fichier, $contenu); 
    ?>
    le changement de date fonctionne mais la suite du code a été effacée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            </div>
        </div>
     
    </body>
    </html>
    Où est mon erreur ?
    Merci d'avance pour vos conseils

    Eric

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Modifier à la volée les fichiers .php c'est une vilaine méthode.
    Déjà puisqu'il s'agit de la date de mise à jour, cela pourrait être une lecture en directe de cette date (par exemple la date de mise à jour du fichier).
    Sinon cette date peut être stockée à part dans un fichier, cela enlève tous les problèmes de mise à jour.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si tu ne veux pas suivre les conseils de @sabotage tu peux faire comme suit.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
    $string = file_get_contents('mon_fichier.html');
    $array  = explode(PHP_EOL,$string);
    // je suppose que la date est sur la première ligne
    $array[0] = "<!--  date de modification $ladate_du_jour -->";
    $string   = implode(PHP_EOL,$array);
    file_put_contents('mon_fichier.html',$string);

    mon_fichier.html avant
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!--  date de modification 1 janvier 2017 -->
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>

    mon_fichier.html après
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!--  date de modification 29 mai 2017 -->
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Version avec regexp.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
    $pattern        = "/(<!--  date de modification)([^-]+)(-->)/msi";
    $string         = file_get_contents('mon_fichier.html');
    $resultat       = preg_replace($pattern,"<a href="file://\\1" target="_blank">\\1</a> $ladate_du_jour <a href="file://\\3",$string" target="_blank">\\3",$string</a>);
    file_put_contents('mon_fichier.html',$resultat);

    avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!--  date de modification 1 janvier 2015 -->
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>
    après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!--  date de modification 29 mai 2017 -->
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    </body>
    </html>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonsoir

    Merci pour vos réponses, je continue mes tests.

    Eric

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Le forum a mal interprété le second code. Il a transformé \\1 en file:....


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
    $pattern        = "/(<!--  date de modification)([^-]+)(-->)/msi";$string         = file_get_contents('mon_fichier.html');
    $resultat       = preg_replace($pattern,"$1 $ladate_du_jour $3",$string);
    file_put_contents('mon_fichier.html',$resultat);
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonjour

    Merci pour ce dernier code.
    Si j'ai bien compris, tu écris en "dur" la ligne et remplaces la date à modifier par ([^-]+). Malheureusement la ligne de code est plus "compliquée" pour moi, ayant des ' / : ... et je n'y arrive pas.
    Voici la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="footer"> &nbsp; contact : <a href="http://xxxx.net/forum/memberlist.php?mode=xxxxxxx" title="contact titi">titi</a> via toto</a> | mise à jour le 15 décembre 2016.
    Une précision, c'est pratiquement la dernière du fichier.
    Merci si tu peux encore m'aider

    Eric

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Je ne comprends pas ce que fait ta ligne à cet endroit là. Cette date de modification correspond à quoi en fait ? Quelles modifications sont faites pour justifier cette mention ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonsoir

    J'aurai peut-être du commencer par là...

    C'est la date de la modification de la bdd du site (bdd qui est le principal intérêt du site). Sur la chaque page affichée apparaît en bas : un contact via le forum et la date de la mise à jour, comme ceci :

    - contact : titi via le forum - mise à jour le 15 décembre 2016

    J'espère que cela suffit, n'hésite pas.

    Eric

  10. #10
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Cette date de modification tu la prend où ? Si c'est dans une table genre la date la plus récente il te suffit de lire cette table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select date_modification from ma_table order by date_modification desc limit 0,1
    et d'insérer le résultat dans ta page sans passer par une modification du source !
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  11. #11
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Tous les jours, avec la méthode cron, se lance(ra) un fichier php qui modifie(ra) la bdd. La date de mise à jour est donc celle-ci avec le code que j'avais donné dans mon premier post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php 
    setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
    $ladate_du_jour = strftime("%d %B %Y");
    Je pensais pouvoir simplement modifier en plus les dates sur les fichiers php en question.

    Il est vrai que je pourrai rentrer la date dans une table de la bdd, puis la récupérer avec un "select" puis dans une variable sur les dit fichiers.

    Merci, je vais partir sur cette façon. Je trouve dommage que l'on ne puisse pas faire cela directement.

    Eric

  12. #12
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ben je trouve cette solution beaucoup plus propre que celle qui consiste à modifier des fichiers.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  13. #13
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    OK mais ce n'est pas gagné pour moi .... malgré nos échanges, je suis toujours débutant

    Merci
    Eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 11/06/2012, 19h14
  2. Réponses: 10
    Dernier message: 22/05/2006, 11h45
  3. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10
  4. Ecriture d'une chaine de caractères dans un fichier
    Par fleur_de_rose dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 09h34
  5. Réponses: 7
    Dernier message: 27/09/2005, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo