Iis 从PHP调用的COM dll不';t空变量

Iis 从PHP调用的COM dll不';t空变量,iis,dll,com,vb6,Iis,Dll,Com,Vb6,我最近开始出现的问题并不是到处都有 前端(html/js)调用PHP页面。PHP依次从COM dll(vb6)调用函数。COM DLL轮流使用一些较低级别的C++ +DLL,虽然不确定这些信息是否相关。 现在,最近(这以前没有发生过),在一个特定的COM dll函数中,让我们称它为BringClients(),有时(显然发生了一些用户并发-竞争条件?)一个全局变量,比如说ClientName,在BringClients()中使用,在调用该函数时它不是空的,但是,它会保存一个值,当完全不同的用户在

我最近开始出现的问题并不是到处都有

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

现在,最近(这以前没有发生过),在一个特定的COM dll函数中,让我们称它为
BringClients()
,有时(显然发生了一些用户并发-竞争条件?)一个全局变量,比如说
ClientName
,在
BringClients()
中使用,在调用该函数时它不是空的,但是,它会保存一个值,当完全不同的用户在完全不同的COM dll实例中调用该函数时,该值会在函数
UpdateClients()
上设置

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


操作系统是带有IIS的Windows server。

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

但是,如果IIS稍后(从池中)根据其用于平衡请求的任何调度使用相同的线程,会发生什么呢?然后,任何全局/公共模块级数据变量仍将存在


因此,是的,如果您需要确保这些变量不被重复使用,您必须清除它们或重新设计以删除所有全局变量。

在这种情况下,共享/全局变量通常是可疑的。这或其他人不知道VB6(作为最基本的)默认传递变量
ByRef
而不是
ByVal
ClientName
被传递到
UpdateClients()
,在那里被修改(因此在调用代码中也被修改),随后被传递到
BringClients()