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

PHP: Shared memory between Web and Command Line

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

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

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

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

这是 运行ning Windows 10、Apache 2.4、PHP 7.2 和 MySQL 5.17。

我不太了解 Windows 编程,因为我确实来自 Unix 环境,并且我过去曾将 System V 共享内存用于 IPC。

折腾了一段时间,想通了

WINDOWS

事实证明,由于 Windows 没有 Unix 风格的共享内存,PHP 模拟了它。正因为如此,Apache下PHP运行的共享内存,和来自命令行的共享内存是分开的

UNIX

虽然它在 Unix 下确实可以正常工作。 Apache 的 PHP 上下文 运行 和命令行的 运行 都使用相同的区域,因为 Unix 支持适当的共享内存。

修复

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