PHP:Web和命令行之间的共享内存

时间:2018-07-05 16:30:53

标签: php windows apache unix shared-memory

我正在编写一个Web应用程序,该应用程序将配置数据库加载到共享内存中以进行快速访问。我遇到的问题是,从Web服务器(在本例中为Apache)运行时,以及使用php -f从命令行运行共享内存时,共享内存之间似乎断开连接。这是在Windows 10机器上开发的,但是生产服务器运行Unix。不过,它似乎可以在Unix下使用。

我唯一能找到的相关信息是this question在StackOverflow上。我知道Unix和Windows之间的共享内存操作本质上是不同的,但是当我使用相同的ID(键)来标识共享内存区域时,无论执行环境如何,它都不应访问同一区域吗?

我知道这在Unix下有效,因为我已经尝试过了。其他开发人员之一使用Macintosh,它也可以在其中使用。 Windows似乎无法正常工作。 PHP手册指出,共享内存在2000之前的Windows版本上不可用。

那么Windows上CLI和Web之间共享内存的断开是平台固有的吗?链接问题中的答案似乎表明是,但这是在2009年提出的。从那以后的9年中,这仍然是相同的吗?

它正在运行Windows 10,Apache 2.4,PHP 7.2和MySQL 5.17。

我对Windows编程了解不多,因为我确实来自Unix环境,并且过去曾使用System V共享内存进行IPC。

1 个答案:

答案 0 :(得分:0)

战斗了一段时间后,我想通了。

WINDOWS

事实证明,由于Windows没有Unix风格的共享内存,因此PHP会对其进行仿真。因此,在Apache下运行的PHP共享内存与在命令行中是分开的。

UNIX

它在Unix下确实按预期工作。由于Unix支持适当的共享内存,因此从Apache运行的PHP上下文和从命令行运行的PHP上下文都使用相同的区域。

修复

对于Windows,没有一个是因为该平台根本不支持它。因此,我只需要接受我用PHP编写的命令行工具就无法在Windows下运行。它们必须在Unix下进行测试才能正常运行。