如何在PHP中缓存资源


How to cache a Resource in PHP?

我在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

InitializeAgetValue是由加载的php扩展提供的。所以文件。所以假设他们的来源是不可用的。InitializeA在内部打开文件并进行一些处理并返回一个资源,该资源在本例中是平方函数。文件内容是固定的,不能改变。

现在我使用Apache服务器实例在预分叉模式。每次调用PHP时,它都会从磁盘读取文件。这大大降低了运行速度。

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

我通过在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调用。