0

我已经使用了一些我以前使用过的 memcache 脚本,但是在新页面上,我没有得到任何响应。

内存缓存位于另一个页面中包含的函数中。我所做的是将 md5 散列到 mysql 查询并将其存储为 memcached 数据的键。如果密钥不在 memcache 中,那么我去创建数据,将其放入 memcache 并返回。

我认为代码相当简单。这是重要的部分(这是一个创建输出的大页面,因此您不需要所有这些,尽管我认为“返回”很重要,因为我担心这可能是我搞砸的地方。

我用

$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 的所有内容,但我怀疑错误在 if 行中,但在另一个页面上使用相同的代码没有问题。

这看起来有什么问题吗?

4

2 回答 2

5

由于所有这些 @ 的抑制错误,没有办法知道什么是失败的。

我运行了它-没有@的,但答案突然出现了-就行了:

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

它从哪里获得变量 $memcache ?它没有传递到函数中。

于 2009-04-09T22:51:34.710 回答
2

问题是范围。在函数中,全局范围内的变量不会自动传递,您必须将它们作为参数添加到函数中。

function outData($memcache, $getList)
于 2009-04-10T00:31:59.400 回答