必须同时修改 Apache 和 CLI 的 php.ini 文件才能启用 sockets 扩展;Apache 使用 \xampp\apache\bin\php.ini,CLI 使用 \xampp\php\php.ini;需取消 extension=php_sockets.dll 前的分号、确认 extension_dir 路径正确、分别重启 Apache 和重新打开命令行窗口。

必须同时修改 Apache 和 CLI 两套 php.ini,否则 socket_create() 在命令行下仍会报错“Call to undefined function”。
确认 XAMPP 中 PHP 的实际运行路径
很多人直接改 \xampp\php\php.ini,却忘了 XAMPP 的 Apache 使用的是另一份配置。打开 XAMPP 控制面板 → 点击 Apache 行末的 Config → 选择 PHP (php.ini),它会自动打开 Apache 实际加载的 ini 文件(通常是 \xampp\apache\bin\php.ini)。CLI(命令行)用的才是 \xampp\php\php.ini。两个文件都要改,缺一不可。
启用 sockets 扩展的三步操作
找到对应 php.ini 后,执行以下操作:
- 搜索
extension=php_sockets.dll,去掉前面的分号;(注意:不是所有版本都叫这个名,PHP 8+ 可能已内置,但 Windows 下仍需显式启用) - 确认
extension_dir指向正确路径,例如extension_dir = "C:\xampp\php\ext"(路径必须存在且含php_sockets.dll) - 保存后,必须分别重启:Apache 服务(控制面板点
Restart),以及重新打开命令行窗口(因为 CLI 的 PHP 进程是新启动的)
验证是否生效:命令行和 Web 都要测
只在浏览器里跑通不代表 CLI 可用——WebSocket 服务端脚本通常得用 php server.php 启动,这就依赖 CLI 环境。
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
测试方法:
- Web 端:新建
test_socket.php,写<?php var_dump(function_exists('socket_create'));,访问看看是否返回bool(true) - 命令行:打开 CMD,执行
php -m | findstr sockets(Windows)或php -m | grep sockets(Linux/macOS),有输出即表示 CLI 已加载 - 如果 CLI 没输出但 Web 有,说明只改了 Apache 的
php.ini,漏了\xampp\php\php.ini
常见报错与对应原因
Call to undefined function socket_create() 是最典型错误,但背后原因不同:
- 仅 Web 报错 → Apache 的
php.ini没开 extension 或没重启 Apache - 仅命令行报错 →
\xampp\php\php.ini没开 extension 或改完没重开 CMD - 两个都报错 →
php_sockets.dll文件缺失(检查\xampp\php\ext\目录是否存在该文件;XAMPP 旧版可能不带,需从 PHP 官网匹配版本下载) - 开启后 Apache 启动失败 → DLL 版本与 PHP 不兼容(如 PHP 8.2 加了 7.x 的 dll),错误日志里会有
The specified module could not be found或%1 is not a valid Win32 application
Windows 下最容易被忽略的一点:XAMPP 自带的 PHP 是线程安全(TS)版,必须用 TS 编译的 php_sockets.dll;混用 NTS 版本会导致静默失败——连错误日志都不写全,只显示 Apache 无法启动。


















