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 :

Lecture du cache


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Lecture du cache
    Bonjour,

    J'ai essayé de mettre en place un système de cache sur mon site.

    J'ai donc ce code :

    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
    <?php
    //Cache
    if(!$donnees = get_cache('liste_destinataire_contact'))
    {
    	$retour = mysql_query("SELECT nom,email,explications FROM contacts WHERE liste_contact='1'") or die (mysql_error());
     
    	$donnees = array();
    	while ( $donnees[] = mysql_fetch_array($retour) );
     
    	create_cache('liste_destinataire_contact', $donnees);
    }
     
    ?>
    Destinaire:<br />
    <select name="destinataire">
        <option value="0">Choisissez...</option>
    <?php
    foreach($donnees as $valeur)
    {
    	if($valeur != NULL)
    	{
    ?>	
        <option value="<?php echo $valeur['email'];?>"><?php echo $valeur['nom'];}}?></option>

    Et lorsque que je fais mes tests sur mon ordi, cela fonctionne parfaitement, création du cache et lecture de celui-ci.

    J'ai donc testé ce site en ligne sur mon site et à ce moment là, j'obtiens un problème :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected '=' in /var/alternc/html/k/kanel/web/beta/cache/cache_liste_destinataire_contact.php on line 1

    Il s'agit donc d'un problème dans le fichier qui a étè mis en cache et qui est donc, ici, celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?phpnn = unserialize('' .  a:7:{i:0;a:6:{i:0;s:17:"Directeur musical";s:3:"nom";s:17:"Directeur musical";i:1;s:10:"j-b@oha.fr";s:5:"email";s:10:"j-b@oha.fr";i:2;s:319:"Quae dum ita struuntur, indicatum est apud Tyrum indumentum regale textum occulte, incertum quo locante vel cuius usibus apparatum. ideoque rector provinciae tunc pater Apollinaris eiusdem nominis ut conscius ductus est aliique congregati sunt ex diversis civitatibus multi, qui atrocium criminum ponderibus urgebantur.";s:12:"explications";s:319:"Quae dum ita struuntur, indicatum est apud Tyrum indumentum regale textum occulte, incertum quo locante vel cuius usibus apparatum. ideoque rector provinciae tunc pater Apollinaris eiusdem nominis ut conscius ductus est aliique congregati sunt ex diversis civitatibus multi, qui atrocium criminum ponderibus urgebantur.";}i:1;a:6:{i:0;s:10:"Présidente";s:3:"nom";s:10:"Présidente";i:1;s:17:"presidente@oha.fr";s:5:"email";s:17:"presidente@oha.fr";i:2;s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";s:12:"explications";s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";}i:2;a:6:{i:0;s:10:"Trésoriére";s:3:"nom";s:10:"Trésoriére";i:1;s:17:"tresoriere@oha.fr";s:5:"email";s:17:"tresoriere@oha.fr";i:2;s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";s:12:"explications";s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";}i:3;a:6:{i:0;s:10:"Secrétaire";s:3:"nom";s:10:"Secrétaire";i:1;s:17:"secretaire@oha.fr";s:5:"email";s:17:"secretaire@oha.fr";i:2;s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";s:12:"explications";s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";}i:4;a:6:{i:0;s:21:"Webmasteur - Bertrand";s:3:"nom";s:21:"Webmasteur - Bertrand";i:1;s:15:"bertrand@oha.fr";s:5:"email";s:15:"bertrand@oha.fr";i:2;s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";s:12:"explications";s:208:"Lorem ipsum dolor sit amet, consectetuer adipisci elit. Quam itaque, vult adiungimus dedocere hominem sibi sedulitatem sapientia logikh vendibiliora maiores errem, velit claudicare id ea in sibi id consistat.";}i:5;a:6:{i:0;s:16:"Webmasteur - Luc";s:3:"nom";s:16:"Webmasteur - Luc";i:1;s:18:"kanellle@gmail.com";s:5:"email";s:18:"kanellle@gmail.com";i:2;s:6:"Essai ";s:12:"explications";s:6:"Essai ";}i:6;b:0;} . '');nn?>

    Lorsque qu'à la place d'un = je mets un ==, le message d'erreur change en :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected ':' in /var/alternc/html/k/kanel/web/beta/cache/cache_liste_destinataire_contact.php on line 1

    Et sachant que ce code est composé de 148 :, je vois mal lequel est mal syntaxé...

    Donc voilà, merci d'avance pour votre aide et je le répète encore une fois que ce code ne pose aucun problème avec Wamp, mais en ligne si...

    Bonne journée

    Knellle

  2. #2
    FoxLeRenard
    Invité(e)
    Par défaut
    Oui oui, normal, tu dois enchasser toutes tes variables

    comprends que

    'ma variable d' apres moi'

    bloque au d' ...

    Donc uses et abuses de
    stripcslashes() - Décode une chaîne encodée avec addcslashes
    stripslashes() - Supprime les antislashs d'une chaîne
    addcslashes() - Ajoute des slash dans une chaîne, à la mode du langage C
    htmlspecialchars() - Convertit les caractères spéciaux en entités HTML
    quotemeta() - Protège les métacaractères
    get_magic_quotes_gpc() - Retourne la configuration actuelle de l'option magic_quotes_gpc

  3. #3
    Futur Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    J'ai donc essayé de suivre tes conseils et j'ai rajouté ces fonctions dans les fonctions créés pour la mise en cache, j'ai donc maintenant dans mon fichier fonctions_cache contenant ces 3 fonctions cela :

    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
    <?php
    // met en cache une variable
    function create_cache($nom_cache, $contenu)
    {
            // utilisation de serialize() pour transformer $content en chaine de caractères
            $contenu = serialize($contenu);
     
            // échappement les caractères spéciaux pour pouvoir mettre le tout entre quotes dans le futur fichier
            $contenu = str_replace(array("", "'", "0"), array("\\", "\'", "0"), $contenu);
     
    		//Ligne rajouté par ton conseil
    		$contenu = addslashes(quotemeta(htmlspecialchars(get_magic_quotes_gpc($contenu))));
     
            // création du code php à stocker dans le fichier
            $contenu = "<?php" . "nn" . "$cache = unserialize('' .  $contenu . '');" . "nn" . "?>";
     
            // écriture du code dans le fichier
            $fichier = fopen('./cache/cache_' . $nom_cache . '.php', 'w');
            $resultat = fwrite($fichier, $contenu);
            fclose($fichier);
     
            // renvoie true si l'écriture du fichier a réussi
            return $resultat;
    }
     
    // récupère une variable mise en cache
    function get_cache($nom_cache)
    {
            // vérifie que le fichier de cache existe
            if ( is_file('./cache/cache_' . $nom_cache . '.php') )
            {
                    // le fichier existe, on l'exécute puis on retourne le contenu de $cache
                    include('./cache/cache_' . $nom_cache . '.php');
     
    				//Ligne rajouté par ton conseil
    				$cache = stripslashes($cache);
     
    				return $cache;
            }
            else
            {
                    // le fichier de cache n'existe pas, on retourne false
                    return false;
            }
    }
     
    // détruit un cache
    function destroy_cache($nom_cache)
    {
            return @unlink('./cache/cache_' . $nom_cache . '.php');
    }
    ?>
    Et j'ai toujours le même problème, j'ai peut-être mal compris ce que tu voulais que je fasse :s

  4. #4
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    Non le probleme ne viens pas de ces fonctions, et les enchainer comme ça ne donneras rien de bon

    Donne nous plutôt le code de ta fonction "function create_cache($nom_cache, $contenu)" car sur le site elle me parait bizarre, et ton résultat me parait bizarre par rapport a ce que ça devrais donner.

    J'attends ta réponse !

  5. #5
    Futur Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ok =)

    Voici donc le code

    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
    function create_cache($nom_cache, $contenu)
    {
            // utilisation de serialize() pour transformer $content en chaine de caractères
            $contenu = serialize($contenu);
     
            // échappement les caractères spéciaux pour pouvoir mettre le tout entre quotes dans le futur fichier
            $contenu = str_replace(array("", "'", "0"), array("\\", "\'", "0"), $contenu);
     
            // création du code php à stocker dans le fichier
            $contenu = "<?php" . "nn" . "$cache = unserialize('' .  $contenu . '');" . "nn" . "?>";
     
            // écriture du code dans le fichier
            $fichier = fopen('./cache/cache_' . $nom_cache . '.php', 'w');
            $resultat = fwrite($fichier, $contenu);
            fclose($fichier);
     
            // renvoie true si l'écriture du fichier a réussi
            return $resultat;
    }

  6. #6
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Bonjour,

    je voi que tu l'a un peut modifié, et oui, comme tu a du t'en rendre compte il comporte plusieurs erreur.

    Premiere probleme : "$cache = ..." donnesras : valeur_de_la_variable_$cache = ...

    Voila une version fonctionnelle de la fonction "create_cache" qui devrais résoudre tes problèmes :
    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
    <?php
    function create_cache($nom_cache, $contenu)
    {
            // utilisation de serialize() pour transformer $content en chaine de caractères
            $contenu = serialize($contenu);
     
            // échappement les caractères spéciaux pour pouvoir mettre le tout entre quotes dans le futur fichier
            $contenu = addslashes($contenu);
     
            // création du code php à stocker dans le fichier
            $contenu = '<?php' . "\n" . '$cache = unserialize(\'' .  $contenu . '\');' . "\n" . '?>';
     
            // écriture du code dans le fichier
            $fichier = fopen('./cache/donnees_' . $nom_cache . '.php', 'w');
            $resultat = fwrite($fichier, $contenu);
            fclose($fichier);
     
            // renvoie true si l'écriture du fichier a réussi
            return $resultat;
    }
    ?>
    Voila, bonne mise en cache !

  7. #7
    Futur Membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Juillet 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2008
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Cela fonctionne, merci beaucoup, je vais comparer les deux versions du code pour voir ce qu'il y a de changé =)

    c'est parfait =)

  8. #8
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    ReBonjour,

    En fait je pense que le nouveau "look" du site a perturbé ce tutoriel.

    Du coup les \ en on prits un coup (\n remplacé par nn etc..)

    J'en ai aussi profité pour replacer son str_replace par addslashes qui fonctionne parfaitement ici

    Bonne journée et ravis de t'avoir été utile !

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par knellle Voir le message
    Cela fonctionne, merci beaucoup, je vais comparer les deux versions du code pour voir ce qu'il y a de changé =)

    c'est parfait =)
    Super !!

    Et merci pour les excellents cours de PHP : http://php.developpez.com/cours/

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

Discussions similaires

  1. [10gR2] % succès lecture en cache faible
    Par castorameur dans le forum Administration
    Réponses: 0
    Dernier message: 13/02/2013, 13h49
  2. Reprendre la lecture d'un fichier swf après l'avoir caché
    Par Eric2a dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 02/08/2011, 22h28
  3. Réponses: 0
    Dernier message: 08/02/2010, 17h43
  4. Ecriture / Lecture dans un fichier Caché
    Par liavart dans le forum Général Java
    Réponses: 0
    Dernier message: 04/11/2009, 18h17

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