启动时运行的PHP脚本(APC变量初始化)

时间:2013-02-13 09:20:15

标签: php initialization startup apc

是否有可能让PHP服务器(通过php5-fpm)在启动后运行PHP脚本,并在客户端访问它之前运行,以便执行APC变量的初始化。

基本上,某些事件在服务器生命周期内通过apc_inc计算,例如

apc_inc('event-xyz-happened');
事件-xyz-happen APC var是永久性的(寿命是服务器寿命,而不是请求寿命)。

问题是, event-xyz-happen APC var必须在第一次递增(与Perl不同)之前存在。 apc_inc非常快,我想避免像

这样的解决方案
if ( ! apc_exists('event-xyz-happened')) {
  apc_store('event-xyz-happened', 1);
}
else {
  apc_inc('event-xyz-happened');
}

不仅需要调用apc_exists('event-xyz-happened'),而且还可能因竞争条件尚未存在而受到影响。

-

在客户端访问服务器之前是否有创建一些APC变量的解决方案?

2 个答案:

答案 0 :(得分:2)

您可以使用apc_add后跟apc_inc(请参阅http://www.php.net/manual/en/function.apc-add.php

// if it doesn't exist, it gets created
// if it does exist, nothing happens, no race condition
apc_add('event-xyz-happened', 0); 
apc_inc('event-xyz-happened', 1); 

答案 1 :(得分:0)

您不应该为此目的使用apc变量。

APC是一个缓存引擎,它不是一个快速的数据库引擎。 作为缓存引擎,它可以并且它迟早会删除您的变量以清除其他变量或操作码缓存的内存。您对APC的记忆越多,您的变量将被删除的可能性就越小,但您不能依赖该变量。

所有的PHP脚本都必须检查变量是否在apc缓存中,如果不是,请初始化它。

如果您需要以非常快速的方式存储某些变量,您可以设置本地mysql服务器并使用“memory”引擎创建一个表。它几乎和apc一样快,但只要服务器正在运行,我就会永久化。

祝你好运 SWilk