如何使用C ++编程的PHP扩展记住全局变量?

时间:2014-06-27 15:20:24

标签: php c++ apache php-cpp

我正在使用PHP-CPP库来开发PHP扩展。

当我在C ++中尝试以下内容时:

#include <phpcpp.h>

static int number=0;

Php::Value get_num()
{
    number++;
    return number;
}

PHP中的以下内容:

<?php
    echo get_num();
?>

一切都按预期工作了一段时间,但随后“数字”变量随机重置为零。此外,在Firefox中按CTRL + F5,“数字”变量再次重置为零。

如何避免重置“号码”?

1 个答案:

答案 0 :(得分:3)

PHP扩展中的全局C ++变量不是持久的。

这一切都取决于您的网络服务器的设置。例如,如果您使用Apache(并且大多数其他人都有类似的设置),则会运行多个Web服务器进程实例,所有实例都提供网页浏览量。这些实例中的每一个都有自己的全局数字&#39;变量。这就是为什么你没有看到正如你预期的那样增加数字的原因:并非每个网页浏览都是由同一个Apache实例提供的。

最重要的是:当您的网络服务器的负载上升或下降时,新的Apache进程将启动和停止,并且新的数字&#39;创建的变量的初始值为0.此外,Apache进程通常在一定数量的页面浏览量(在apache配置文件中设置)后重新启动,这也会将计数器设置回零。

在您自己的小型测试环境中,您不会快速遇到此问题,因为负载太低以至于它都可以由Web服务器的单个实例处理,但在忙碌的服务器上您肯定会遇到此

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