从 PHP 调用的 COM dll 不清空变量

COM dll called from PHP doesn't empty variables

我最近开始出现的问题,而且不是到处都出现。

前端(html/js)调用了PHP个页面。 PHP 依次从 COM dll (vb6) 调用函数。 COM dll 确实轮流使用了一些较低级别的 C++ .dll,但不确定此信息是否相关。

现在,最近(这以前没有发生过),在一个特定的 COM dll 函数中,我们称它为 BringClients(),有时(显然一些用户并发发生 - 竞争条件?)一个全局变量让我们说 [在 BringClients() 中使用的 =12=] 在调用函数时不是空的,而是保存一个值,当在完全不同的实例中调用此函数时,它在函数 UpdateClients() 上设置COM dll,由完全不同的用户创建。

我不知道为什么会这样。初始化 .dll 时,所有 COM dll 变量不都是空的吗?我通过在每次初始化 .dll 时手动清空变量来解决这个问题,但这是否应该发生?我没有注意到其他功能上有类似的问题。

OS 是带有 IIS 的 Windows 服务器。

我不知道 PHP 如何与 COM 组件交互,但我猜你并没有真正初始化 DLL,而是创建了对象。而且您的 COM 库是单元线程的,因此您将获得每个线程的独立变量集。

但是,如果 IIS 稍后根据它用来平衡请求的任何调度使用同一个线程(来自池),会发生什么情况?然后任何 global/public 模块级数据变量仍将存在。

所以是的,如果您需要确保不重复使用这些变量,您将不得不清除它们或重新构建以删除所有全局变量。