如何使我的PHP扩展用C++;还记得全局变量吗?

如何使我的PHP扩展用C++;还记得全局变量吗?,php,c++,apache,php-cpp,Php,C++,Apache,Php Cpp,我正在使用该库开发PHP扩展 当我在C++中尝试以下操作时: #include <phpcpp.h> static int number=0; Php::Value get_num() { number++; return number; } #包括 静态整数=0; Php::Value get_num() { 数字++; 返回号码; } 在PHP中执行以下操作: <?php echo get_num(); ?> 在一段时间内,一切都

我正在使用该库开发PHP扩展

当我在C++中尝试以下操作时:

#include <phpcpp.h>

static int number=0;

Php::Value get_num()
{
    number++;
    return number;
}
#包括
静态整数=0;
Php::Value get_num()
{
数字++;
返回号码;
}
在PHP中执行以下操作:

<?php
    echo get_num();
?>

在一段时间内,一切都按预期运行,但随后“number”变量会随机重置回零。另外,在Firefox中按CTRL+F5键,“number”变量再次重置为零


如何避免重置中的“数字”?< /P> < P>一个PHP扩展中的全局C++变量不是持久的。 这完全取决于Web服务器的设置。例如,如果您使用Apache(大多数其他服务器都有类似的设置),则会有多个Web服务器进程实例正在运行,所有实例都提供页面视图。每个实例都有自己的全局“number”变量。这就是为什么您没有看到数字像预期的那样增加:不是每个页面视图都由同一个Apache实例提供服务

最重要的是:当Web服务器的负载上升或下降时,新的Apache进程启动和停止,并创建初始值为0的新“number”变量。此外,Apache进程通常在一定数量的页面视图(在Apache配置文件中设置)后重新启动,这也会将计数器设置回零

在您自己的小型测试环境中,您不会很快遇到这个问题,因为负载很低,可以由一个Web服务器实例来处理,但是在一个活跃繁忙的服务器上,您肯定会遇到这个问题


如果您想使用持久计数器,则必须将其存储在其他地方,例如在文件或数据库中。

< P>在PHP扩展中的全局C++变量不持久。 这完全取决于Web服务器的设置。例如,如果您使用Apache(大多数其他服务器都有类似的设置),则会有多个Web服务器进程实例正在运行,所有实例都提供页面视图。每个实例都有自己的全局“number”变量。这就是为什么您没有看到数字像预期的那样增加:不是每个页面视图都由同一个Apache实例提供服务

最重要的是:当Web服务器的负载上升或下降时,新的Apache进程启动和停止,并创建初始值为0的新“number”变量。此外,Apache进程通常在一定数量的页面视图(在Apache配置文件中设置)后重新启动,这也会将计数器设置回零

在您自己的小型测试环境中,您不会很快遇到这个问题,因为负载很低,可以由一个Web服务器实例来处理,但是在一个活跃繁忙的服务器上,您肯定会遇到这个问题


如果您想使用持久计数器,则必须将其存储在其他地方,例如在文件或数据库中。

< P>在PHP扩展中的全局C++变量不持久。 这完全取决于Web服务器的设置。例如,如果您使用Apache(大多数其他服务器都有类似的设置),则会有多个Web服务器进程实例正在运行,所有实例都提供页面视图。每个实例都有自己的全局“number”变量。这就是为什么您没有看到数字像预期的那样增加:不是每个页面视图都由同一个Apache实例提供服务

最重要的是:当Web服务器的负载上升或下降时,新的Apache进程启动和停止,并创建初始值为0的新“number”变量。此外,Apache进程通常在一定数量的页面视图(在Apache配置文件中设置)后重新启动,这也会将计数器设置回零

在您自己的小型测试环境中,您不会很快遇到这个问题,因为负载很低,可以由一个Web服务器实例来处理,但是在一个活跃繁忙的服务器上,您肯定会遇到这个问题


如果您想使用持久计数器,则必须将其存储在其他地方,例如在文件或数据库中。

< P>在PHP扩展中的全局C++变量不持久。 这完全取决于Web服务器的设置。例如,如果您使用Apache(大多数其他服务器都有类似的设置),则会有多个Web服务器进程实例正在运行,所有实例都提供页面视图。每个实例都有自己的全局“number”变量。这就是为什么您没有看到数字像预期的那样增加:不是每个页面视图都由同一个Apache实例提供服务

最重要的是:当Web服务器的负载上升或下降时,新的Apache进程启动和停止,并创建初始值为0的新“number”变量。此外,Apache进程通常在一定数量的页面视图(在Apache配置文件中设置)后重新启动,这也会将计数器设置回零

在您自己的小型测试环境中,您不会很快遇到这个问题,因为负载很低,可以由一个Web服务器实例来处理,但是在一个活跃繁忙的服务器上,您肯定会遇到这个问题


如果要使用持久计数器,则必须将其存储在其他位置,例如文件或数据库中。

global!==持久的如果您需要请求之间的持久性,那么您需要将值存储在PHP之外(例如,会话、文件系统、数据库、redis、memcached等等)。该值已经存储在PHP之外。它存储在C++共享库(PHP扩展)中。所以,如果一个值存储在一个共享库中,PHP能够跨越任何源的所有请求持久化?所有这些每一个请求都是一个单独的线程,PHP开发人员鼓吹这是一个胡说八道?我希望几年前我就知道我的示例代码按预期工作,我不断刷新页面,数字不断向上计数。。。那是p