我在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 ?
答案 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中调用。