Windows下XAMPP v3.3.0运行PHP Socket代码报socket_create未定义错误
问题解决步骤
1. 确认CLI模式加载的php.ini路径
在命令行执行以下命令:php --ini
输出的Loaded Configuration File对应的路径才是命令行运行PHP时实际读取的配置文件,你之前修改的大概率是XAMPP为Apache准备的php.ini(一般在xampp/apache/bin目录下),和CLI用的配置文件不是同一个。
2. 修改对应php.ini配置
打开上一步查到的php.ini文件,做如下修改:
- 取消
sockets扩展的注释:将;extension=sockets改为extension=sockets(PHP7+版本优先用这个写法,不需要加php_前缀和.dll后缀) - 如果你用的是PHP5版本,额外添加一行
extension=php_sockets.dll
修改后无需重启Apache,CLI模式每次执行命令都会重新读取配置,直接测试即可。
3. 验证扩展是否加载成功
执行以下命令验证:php -m | findstr sockets
如果输出sockets就代表扩展加载成功,再执行你的Socket代码就不会报函数未定义的错误了。
4. 异常排查
如果还是加载失败,检查以下配置:
- 确认php.ini里的
extension_dir配置指向的目录存在php_sockets.dll文件 - 确认
php_sockets.dll和你当前PHP的版本、架构(x86/x64)、线程安全模式(TS/NTS)完全匹配,不匹配的扩展文件无法被加载 - 执行
php -r "var_dump(function_exists('socket_create'));"直接验证函数是否存在,返回bool(true)就代表正常。
额外提示:你提供的Socket代码存在逻辑错误,
socket_write调用时传入的是服务端监听套接字$socket,应该传入接受客户端连接后返回的$socket_accept,否则无法正常向客户端返回数据。
内容的提问来源于stack exchange,提问作者Kavishka Madhushan
相关产品推荐
相关产品推荐

