【问题标题】:PHP: Shared memory between Web and Command LinePHP:Web 和命令行之间的共享内存
【发布时间】:2024-01-23 03:58:01
【问题描述】:

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

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

我知道这可以在 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。

【问题讨论】:

  • CLI 使用的 php.ini 文件中配置的扩展名是否与 web 的 php.ini 使用的扩展名相同?
  • @MrGlass 我相信是的。当我运行 CLI 程序时它不会出错,因此它可以毫无问题地到达那里。

标签: php windows apache unix shared-memory


【解决方案1】:

经过一段时间的斗争,我想通了。

WINDOWS

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

UNIX

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

修复

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

【讨论】:

    最近更新 更多