2009-04-09 6 views
0

J'ai pris un peu d'un script memcache que j'ai utilisé précédemment sans problème, mais sur la nouvelle page, je ne reçois aucune réponse.Impossible d'obtenir memcache pour renvoyer la valeur

le memcache est dans une fonction qui est incluse à partir d'une autre page. ce que je fais est de mettre le hachage MD5 la requête mysql et de stocker cela comme clé pour les données memcached. si la clé n'est pas dans memcache, alors je vais créer les données, les mettre dans memcache et les retourner.

Je pense que le code est assez simple. Voici les bits importants (c'est une grande page qui crée la sortie, donc vous n'avez pas besoin de tout ça, même si le 'retour' je pense est important car je crains que ce soit là où je suis en train de bousiller

I appeler la fonction avec

$outList.= outData($getList); 

où $ getList est une requête MySQL

la fonction $ outList est

<?php 

@$memcache = new Memcache; 
@$memcache->connect("localhost",11211); 

function outData($getList) 
{ 
    $memVal = @$memcache->get(MD5($getList)); 
    if($memVal=='') 
    { 
     $results=mysql_query($getList)or die(mysql_error()); 

     // then I do a bunch of stuff with the data 
     @$memcache->set(MD5($getList), $memVal, false, 60000); 
    } 
    return $memVal; 
} 

je peux afficher tous les trucs pour créer $ memVal, mais je soupçonne e L'erreur est dans la ligne if, mais le même code est utilisé sur une autre page sans problèmes.

Quelque chose ne va pas avec ça?

+1

Est-ce une grande aide si vous supprimez le @ pendant le débogage ..... –

+0

C'est aussi pourquoi je lance mon environnement de développement avec des erreurs les plus strictes * et avertissements * affiché. Je veux voir tout ce que PHP trouve même légèrement faux sur le code. Un avertissement est une erreur qui reviendra plus tard pour vous mordre. –

Répondre

5

Avec toutes ces erreurs de suppression de @, il n'y a aucun moyen de savoir ce qui échoue.

je l'ai couru - sans l '@ et la réponse sauté jusqu'à bien - sur la ligne:

$memVal = @$memcache->get(MD5($getList)); 
#Notice: Undefined variable: memcache in /home/topbit/736160.php on line 9 

Où il obtenir la variable $ memcache de? Ce n'est pas passé dans la fonction.

+0

désolé à ce sujet, j'utilisait le @ pour tester quand memcache a échoué ou ne s'est pas connecté. Bien sûr, j'aurais dû savoir que c'était supprimer l'erreur que j'aurais dû voir. Ma faute :( – pedalpete

2

Le problème est la portée. Quand dans une fonction, les variables dans la portée globale ne sont pas automatiquement transmises, vous devrez les ajouter en tant que paramètres à la fonction.

function outData($memcache, $getList) 
Questions connexes