如何在PHP中缓存资源?

时间:2015-09-07 07:08:45

标签: php apache caching

我在apache服务器上使用以下PHP代码。

$func = InitializeA("./resfile.dat");
echo var_dump($func);
echo getValue($func,3);
echo getValue($func,5);

输出是:

resource(4) of type (_p_void)
9.0
25.0

InitializeA getValue 由加载 .so 文件的php扩展程序提供。因此,假设他们的来源不可用。 InitializeA 在内部打开文件并执行一些处理并返回一个资源,在此示例中为一个平方函数。文件内容是固定的,不会改变。

现在我在prefork模式下使用Apache服务器实例。每次调用PHP时,它都会从磁盘读取文件。这会让事情变得非常缓慢。

apache是​​否提供了一些缓存资源 $ func 的方法,以便它不必一次又一次从磁盘读取相同的文件以获取变量 $ func

1 个答案:

答案 0 :(得分:0)

我通过在PHP-CPP中创建自定义PHP扩展来解决这个问题。 此扩展将类导出到PHP,其中包含指向资源的静态成员指针。 当apache线程启动时,会加载此模块。

C ++代码看起来像这样:

class exported_class {
public:
static void* _func_ptr;
static getValue(,);
};

exported_class::_func_ptr = initialise_func("./resfile.dat");

每个apache线程加载一次,并且可以使用classname从PHP中调用。