shmop扩展在xampp中已内置,只需编辑phpinfo()显示的真实php.ini文件,取消extension=shmop前的分号并重启apache即可启用;切勿加引号、路径或.dll后缀,且windows下仅适用于本地调试。

shmop 扩展在 XAMPP 中默认未启用,但无需额外下载 DLL 文件——它已随 PHP 编译进核心,只需在正确的 php.ini 中取消注释即可生效。
确认你改的是真实生效的 php.ini
很多人改完 php.ini 重启 Apache 后 shmop_open() 仍报错“function not found”,根本原因是改错了文件。XAMPP 控制面板里“Config → PHP”打开的 php.ini 往往只是模板,不是实际加载的那个。
- 在
htdocs下建一个info.php,内容为<?php phpinfo(); ?> - 浏览器访问
http://localhost/info.php,搜索Loaded Configuration File - 路径类似
C:\xampp\php\php.ini或C:\xampp\php\php-8.3\php.ini(取决于你是否用了 PHP Switcher) - 就编辑这个路径下的文件,别碰其他同名文件
启用 shmop 扩展的正确写法
shmop 是 PHP 内置扩展,Windows 下对应模块名为 php_shmop.dll,但配置时**不能写全名**,也不能加路径或 .dll 后缀——否则 Apache 启动会报 Unable to load dynamic library 'php_shmop.dll'。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 用文本编辑器打开上一步确认的真实
php.ini - 搜索
shmop,找到这一行:;extension=shmop - 删掉开头的分号,改为:
extension=shmop - 注意:不是
extension=php_shmop.dll,也不是extension="shmop"(引号会失效) - 保存后,必须在 XAMPP 控制面板中完全停止再启动 Apache(仅刷新页面无效)
验证 shmop 是否可用 + 常见报错原因
启用后运行一段测试代码,比如:
<?php if (!function_exists('shmop_open')) {
die('shmop extension is not loaded');
}
$key = ftok(__FILE__, 't');
$shm_id = shmop_open($key, "c", 0644, 100);
if (!$shm_id) {
die('shmop_open failed: ' . error_get_last()['message']);
}
echo "Shared memory ID: $shm_id\n";
shmop_close($shm_id);
?>
如果仍失败,优先排查:
-
PHP Warning: PHP Startup: Unable to load dynamic library 'shmop'→ 检查php.ini路径和拼写,确认没多加引号或后缀 -
ftok(): unable to create key→ftok()第二个参数必须是单字节字符(如't'),不能是字符串或数字 -
shmop_open(): unable to attach or create shared memory segment→ 权限0644在 Windows 下基本无意义,可暂换为0666测试 - 使用
sysvshm扩展?不用管它——shmop是现代替代方案,XAMPP 不带sysvshm,也不需要开启
真正容易被忽略的点:Windows 对共享内存支持有限,shmop 在 XAMPP 中能跑通不代表生产环境可靠;跨进程通信更推荐 Redis 或文件锁,shmop 仅适合本地调试或极轻量场景。










