0

我正在使用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,“数字”变量会再次重置为零。

如何避免“数字”重置?

4

1 回答 1

3

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

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

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

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

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

于 2014-07-26T09:26:15.813 回答