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

JavaScript Discussion :

Modification d'un fichier php non prise en compte sans redémarrage d'easyphp


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Modification d'un fichier php non prise en compte sans redémarrage d'easyphp
    Bonjour,
    J'ai passé pas mal de temps sur internet à chercher pour ce problème alors je me lance ... au risque de me faire insulter pour une question aussi basique :

    La situation :
    1-J'utilsie easyPHP 1.8.0.1
    2-La structure toute simple:
    Un fichier index avec un bouton et un div.
    Un fichier php tout simple (le célèbre echo 'bonjour'
    Le bouton de mon index utilise un script dhtml pour retourner le résultat de ce echo.php dans le div de ma page d'index.

    Mon problème:
    Quand je modifie le fichier php, le clic sur le bouton ne pren pas en compte les modifications et continue son traitement avec l'ancien code PHP (comme si le fichier était en cache).
    J'ai bien sûr s'auvegarder mes deux fichiers, mis à jour ma page. Rien n'y fait, il faut obligatoirement que je redémarre easyPHP pour que la modification de mon fichier PHP soit prise en compte.

    Avec un form post classique les modifications de mon php sont prises en compte normalement

    Voilà, j'espère avoir était clair et que c'est un truc évident
    Merci d'avance

    PS1: je suis pas bien sur d'être au bon endroit du forum mais j'ai lu les "avant de poster de dhtml qui semblaient me diriger ici
    PS2: si ca peut venir de là, j'ajoute ma fonction dhtml. Je l'ai épuré, c'est celle qu'on trouve partout sur le net :

    var X = new ActiveXObject("Microsoft.XMLHTTP");
    Xopen("GET", 'echo.php');
    X.onreadystatechange = function() {
    if (Xj.readyState == 4 && XhrObj.status == 200)
    document.getElementById('retour').innerHTML = XhrObj.responseText ;
    }
    X.send(null);

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Salut

    Juste un test.
    Au lieu de redémarrer easyphp, as-tu essayé de relancer ton explorateur?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Affirmatif.

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    ton code, il fonctionne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     var X = new ActiveXObject("Microsoft.XMLHTTP"); 
    Xopen("GET", 'echo.php');
    X.onreadystatechange = function()  { 
            if (Xj.readyState == 4 && XhrObj.status == 200) 
            document.getElementById('retour').innerHTML = XhrObj.responseText ; 
        }  
    X.send(null);
    X.open au lieu de Xopen
    Ton objet, c'est X
    Qui sont alors Xj (Xj.readyState) et XhrObj (XhrObj.responseText)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Doublement désolé:
    1 - Mea culpa : si je relance bien le navigateur, la modif est prise en compte.
    2 - J'ai oublié d'enlever mes mouffles avant de recopier la version simplifier. voir X partout (le code marche)

    est-ce que je suis condamné à relancer mon navigateur à chaque fois que je veux tester mon code ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par michmich
    Bonjour,
    J'ai passé pas mal de temps sur internet à chercher pour ce problème alors je me lance ... au risque de me faire insulter pour une question aussi basique :

    La situation :
    1-J'utilsie easyPHP 1.8.0.1
    2-La structure toute simple:
    Un fichier index avec un bouton et un div.
    Un fichier php tout simple (le célèbre echo 'bonjour'
    Le bouton de mon index utilise un script dhtml pour retourner le résultat de ce echo.php dans le div de ma page d'index.

    Mon problème:
    Quand je modifie le fichier php, le clic sur le bouton ne pren pas en compte les modifications et continue son traitement avec l'ancien code PHP (comme si le fichier était en cache).
    J'ai bien sûr s'auvegarder mes deux fichiers, mis à jour ma page. Rien n'y fait, il faut obligatoirement que je redémarre easyPHP pour que la modification de mon fichier PHP soit prise en compte.
    .
    .
    .
    si c'est ce que je crois le problême provient du cache de ta page injectée.
    désolé si c'est pas ca mais sous toute probabilité je crois que si.

    si tu mets le cache à zéro sur ta page principale met le aussi sur ta page fille.

    PS: Tu m'excuseras si ce n'est pas ca ...enfin j'espere @+

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    puis-je voir le code de ta page mère (bouton + endroit ou tu execute le code que tu nous as déjà montrer).
    Je suspecte le fait que ton objet X n'est pas détruit si tu ne coupe pas ta page, du coup, ça garde en mémoire le code de ton anicenne page fille.

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    La page est mise en cache...
    Il y a de nombreuses méthodes d'empecher cela ou de le compenser (et même de l'éviter !)

    La première chose, c'est d'empecher le navigateur d'aller chercher dans le cache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlHttpRequestInstace.setRequestHeader("Cache-Control","no-cache");
    La deuxième choses c'est d'empecher (depuis un langage serveur (ici PHP)) la mise en cache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    ?>

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Voilà mon code,
    j'ai ajouté en entête du fichier php les précieuses lignes de FremyCompany concernant le cache (copier-coller bête et méchant) et j'ai appliqué le setRequestHeader à mon objet dans le script.
    Le problème persiste... en partie. A savoir que si je fais une faute à 'echo' (faut le faire), l'erreur est détectée. Mais que si je la corrige, l'erreur persiste alors que le fichier est correct (vérifié par redémarrage). (je continue à régarder sur internet du coté du cache)

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <html>
    <head>
    <script>
    function sendData(data, page, method) { 
        var XhrObj;
     
     
        if (window.XMLHttpRequest) 
            XhrObj = new XMLHttpRequest(); 
        else if (window.ActiveXObject) {
            try { 
                XhrObj = new ActiveXObject("Msxml2.XMLHTTP"); 
            } catch (e) { 
             	try { 
                     XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); 
             	} catch (e) {}
            }
        }
     
     
      if(method == "GET") { 
            if(data == 'null')  { 
                XhrObj.open("GET", page); 
            }  else { 
                XhrObj.open("GET", page+"?"+data); 
            }
        } else if(method == "POST") { 
            XhrObj.open("POST", page); 
        }    
     
     
        XhrObj.SetRequestHeader("Cache-Control","no-cache"); //<====== ajouté
     
        XhrObj.onreadystatechange = function()  { 
            if (XhrObj.readyState == 4 && XhrObj.status == 200) 
               document.getElementById("retour").innerHTML = XhrObj.responseText; 
        }   
     
     
        if(method == "GET") { 
            XhrObj.send(null); 
        } else if(method == "POST") { 
            XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
            XhrObj.send(data); 
        }
    }
    </script>
    </head>
     
      <body>
        <input type="submit" value="Valider" onclick="sendData('null','synchro.php','GET');"/>
     
        <div id="retour"></div>
     
      </body>
    </html>
    Le php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    echo 'a';
    ?>

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                XhrObj.open("xxx", page);
    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                XhrObj.open("xxx", page, true);

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Le passage en mode asynchrone né résoud pas le problème.
    A noté que tant que le code ne génère pas d'erreur, toutes les modifications sont prises en compte (depuis l'introduction des lignes header dans le php). Merci FremyCompany.

    En POST, les modifications du php marche maintenant parfaitement. Merci beaucoup à tous.
    En GET, la seule astuce que j'ai trouvé (sur le net) et d'ajouter à la requete un paramètre bidon (un Date.getTime) qui l'oblige à recharger le php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if (method == "GET") { 
     
        var d=new Date();
     
        if(data == 'null')   
            XhrObj.open("GET", page+"?d="+d); 
     
        else  
            XhrObj.open("GET", page+"?d="+d+data); 
     
    } else if (method == "POST") { 
         XhrObj.open("POST", page); 
    }
    Problème résolu à 80%. j'attends vos opinions pour cliquer le 'résolu'

    En tout cas merci à tous les 3 pour votre efficacité

  12. #12
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    tu dois obligatoirement preciser l'etat synchrone/asynchrone dans la méthode open...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("GET"/"POST", url, false/true)
    (Si tu mets false, FireFox ne prends pas en compte la méthode on ready state change)

    Ensuite : ==>

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    C noté merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2012, 17h18
  2. Modifications dans le code behind non prises en compte
    Par Nonos421 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/08/2009, 10h09
  3. Modification d'un fichier xml non prise en compte
    Par guicecal dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/01/2009, 13h53
  4. Modifications php ini non prises en compte
    Par Jesmar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 18
    Dernier message: 03/06/2008, 15h56
  5. Réponses: 1
    Dernier message: 19/10/2007, 08h53

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