2009-04-09 14 views
0

以前は問題なく使用していたmemcacheスクリプトをいくつか取りましたが、新しいページでは何の応答も得られません。戻り値にmemcacheを取得できません

memcacheは、別のページからインクルードされた関数内にあります。 私がやることは、md5ハッシュにmysqlクエリを入れ、それをmemcachedデータのキーとして保存することです。キーがmemcacheにない場合は、データを作成し、memcacheに入れて返します。

コードはかなりシンプルだと思います。ここに重要なビットがあります(それは出力を生成する大きなページなので、すべてのものは必要ありませんが、私が恐れていると思う 'リターン'は重要です)。

I

$outList.= outData($getList); 

$ GETLISTは、mysqlのクエリ

です$ OUTLIST機能が

<?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; 
} 

であるとの関数を呼び出す私は$ memValを作成するためにすべてのものを表示することができますが、私は目を疑いますeエラーはif行にありますが、別のページで問題なく同じコードが使用されています。

これは間違っていますか?

+1

は大きな助けになるだろう..... –

+0

私が最も厳しいエラー*と警告と私の開発環境は、*表示の実行理由でもあります。私は、コードが少しでも正しくないことをPHPが発見したすべてを見たいと思っています。警告は後であなたをかむために戻ってくるエラーです。 –

答えて

5

これらのエラーをすべて抑制すると、何が失敗しているかを知る方法がありません。サンセリフ@さんをし、答えはしかし、右ポップアップ - -

私はそれを実行した行に:

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

はそれが変数$ memcacheのを取得していますか?それは関数に渡されません。

+0

申し訳ありませんが、私はmemcacheが失敗したとき、または接続しなかったときに@を使ってテストしていました。もちろん、私が見たはずの誤りを抑圧していることを知っていたはずです。私の悪い:( – pedalpete

2

問題は範囲です。関数内でグローバルスコープ内の変数が自動的に渡されない場合、それらを関数としてパラメータとして追加する必要があります。デバッグ中に@を削除する場合

function outData($memcache, $getList) 
関連する問題