Fatal error: Call to undefined function socket_create() 解决办法
说实话,在配置socket的使用过程中,新手都会遇到这个问题,很是棘手。而且弄了半天都会发现还是没有弄够弄好,浪费时间和精力。

所以想在这里分享下我的解决办法,并且可以跟你保证100%有效,本人自己亲自操作的。

说说这个问题的解决思路:

问题一,socket组件没有开启。问题二,php的开启路径有错问题三,php存在多个版本,导致开启的php不对。

先声明下,我是使用的phpstudy进行搭建的环境。(我百度了解了下wamp中部分地方不一样,我下面会详细说明)

步骤一:要开启socket的支持组件

对phpstudy右键->打开配置文件->php.ini,搜索extension=php_sockets.dll,把前面的;分号去掉,这个是一个注释。

注意:由于phpsutdy中的版本不同所对应的配置文件也会不同,所以为了确保安全,个人建议你查看了phpstudy的版本后再去到根目录去搜对应的php.ini修改。

记得开启之后一定要重新启动phpstudy!

关于wamp的socket支持开启的话,apache和php下面的php.ini都要一起修改开启!!区别就在于phpstudy的只用修改一个php.ini。

步骤二:检验socket组件是否已经开启

 方法一:直接在浏览器中输入:localhost,然后弹出来的信息你就可以直接浏览查看是否支持socket。如果支持就说明已经开启成功,如果是×说明第一步没有成功!

  方法二:在php的www文件夹下面创建test.php,在里面输入下面的代码:
<?phpphpinfo();
?>

然后在浏览器中输入localhost/test.php去找到对应的socket组件的支持,如果像下图就是成功的开启了。

步骤三:设置cmd中可以启动php

我的计算机右键->属性->高级系统设置->高级->环境变量->配置php开启路径![在这里插入图片描述](https://images2015.cnblogs.com/blog/1154270/201705/1154270-20170504130251632-1522733181.jpg#pic_center)

注意:最重要最关键的就是系统变量部分的PATH后面添加的php开启的路径,指向你之前配置正确的php.ini开启的那个php版本路径。也就是存放的php.exe的对应路径。

我这里是存在D:\phpStudy\php55n下。不用具体到D:\phpStudy\php55n\php.exe!!

接下来还需要再配置系统变量部分的path路径,同上面的PATH路径一样。

配置好后就可以直接确定,确定退出。

步骤四:运行php对应的代码测试PHP是否配置成功和socket是否已经开启。

在搜索中输入cmd->输入: php d:\phpstudy\www\open.php

open.php用于测试socket的开启是否正确,所以open.php的代码是:

if(extension_loaded('sockets')){echo "1";}else{echo "0";}

然后会看到上面输出的是1就说明是socket开启成功了,如果是0则说明socket没有开启成功。

如果提示PHP命令未找到则说明上面的步骤三没有配置正确!!

步骤五:测试socket服务端是否有错.

下面的是socket服务端的代码,然后运行就知道问题Fatal error: Call to undefined function socket_create() 是否解决:

<?php//确保在连接客户端时不会超时set_time_limit(0);//设置IP和端口号$address = "127.0.0.1";$port = 2048; //调试的时候,可以多换端口来测试程序!/*** 创建一个SOCKET* AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6* SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM*/$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");//阻塞模式socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");//绑定到socket端口$result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");//开始监听$result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");echo "OK\nBinding the socket on $address:$port ... ";echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";do { // never stop the daemon//它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息$msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");//读取客户端数据echo "Read client data \n";//socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.$buf = socket_read($msgsock, 8192);echo "Received msg: $buf \n";//数据传送 向客户端写入返回结果$msg = "welcome \n";socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");//一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止socket_close($msgsock);} while (true);socket_close($sock);?>

同样搜索cmd->输入:php d:\phpstudy\www\websocket\websocket\index.php 看你的项目部署在哪路径会不一致。

 然后执行后,成功是下面这个样子的。【**如果没有成功,则说明上一步骤没有成功**】![在这里插入图片描述](https://images2015.cnblogs.com/blog/1154270/201705/1154270-20170504131347054-1157301603.jpg#pic_center)关于还有个问题就是可能你开启的php版本不对,导致php的命令没有被发现,然后没有能够运行到socket的组件。这时候你就要指定对应php.ini开启socket组件的php.exe文件路径。

最后,整个的解决步骤是这样的,一定要耐心按步骤来操作,不用着急。

php本地如何开启websocket遇到的坑相关推荐

  1. 宝塔php socket,宝塔开启websocket 小程序聊天功能开发

    前言 在网上找了各种各样宝塔开启websocket的方法,结果试了一天都不行,无奈只有请教大神出手 摒弃 首先在全网基本上没有宝塔配置的教程,有反正我是试了一天都不行,他们的统一配置都是在" ...

  2. Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)

    Springboot整合Websocket遇到的坑 一.使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean @Confi ...

  3. 国产电脑麒麟银河v10sp1定制桌面版系统开启nfs共享踩坑实录

    用上国产电脑差不多一年了,飞腾D2000/8 E8C的CPU芯片,永中OFFICE组件,从办公的角度上说,总体感觉还是不错的.不过不知是不是定制桌面版的缘故,要顺畅使用还是踩了很多坑,网上有些通用攻略 ...

  4. vue-cli本地的一个websocket

    今天跑本地vue-cli项目,看到了一个websocket,如下图: 解惑如下: vue本质上还是编译成h5就是说node相当于一个服务器 你执行npm run dev就是让node服务器编译vue ...

  5. 第一次接触WebSocket遇到的坑以及感受

    要求用.net写一个服务,然后通过webscoket实现客户端与服务端之间的通信. 第一次知道.net还可以用来写服务,然后问题来了,服务是什么- -..下面图里的就是服务,可以停止暂停和启动. 我要 ...

  6. 第一次git拉取代码到本地及身份验证失败踩坑

    前言:用命令 git clone +git代码地址,输入用户名和密码后,拉取本地后一直报错,身份验证失败 试了把网站用户名密码加到本地windows凭据管理,也不行,后面发现是没有加邮箱的坑 1:gi ...

  7. 本地站点开启https

    线上环境开启https请移步 给站点开启https和http2 本文这里要说的是如何在本地环境搭建https,至于说有什么用,假如你找到这了, 就说明你已经用到了. Chrome NET::ERR_C ...

  8. 本地项目开启http-server服务

    项目用到jquery,需要用load()加载公共模块的方法,如果没有服务支持,会报跨域报错.处理这种报错的方式有很多种方法,下面介绍一种使用本地开启http-server服务的处理方式 如项目中没有开 ...

  9. ThinkPHP5.0的think-swoole 开启WebSocket的SSL支持 使用wss连接

    相关文章:ThinkPHP5.0结合Swoole开发WebSocket在线聊天 Swoole WebSocket开启SSL支持 使用wss连接 找到think-swoole的Server.php: 在 ...

  10. tp6 think-swoole4.0 websocket 使用的坑

    我使用时的环境 Centos 7.9 PHP 7.4 Swoole 4.8.5 thinkPHP6 6.0.8 think-swoole 4.0 问题描述:socket.io与服务器连接成功,但是服务 ...

最新文章

  1. HDU 2084 数塔 DP
  2. SAP CRM Fiori应用里的note section
  3. 使用EMR-Kafka Connect进行数据迁移
  4. (转) Android平台上关于IM的实践总结
  5. MySQL入门之数据库介绍及MySQL介绍
  6. Python获取环境变量值
  7. developerDiskImage文件提取
  8. python函数的使用
  9. ScrollView嵌套GridView,自定义Gridview动态设置Item的高度,屏幕适配
  10. 易语言webservice接口_易语言webservice接口调用助
  11. c++重复代码检查工具
  12. userdel: user user is currently used by process 18752解决办法
  13. 用聊天记录当证据 对方改了微信号怎么证明他是他
  14. 解析12306订票流程
  15. 中国智慧城市健康发展应注意八个方面
  16. 网页播放的本地视频代码
  17. 2018年Android源码下载记录
  18. 使用计算机正确坐姿,如何保持正确坐姿?(多图)
  19. Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著
  20. 数据库系统概论(第四版)习题解答

热门文章

  1. 【回归分析】logistic regresssion中的拟合优度检验(goodness-of-fit test)
  2. CImageList使用指南
  3. python敲七游戏代码_敲七游戏数字表
  4. Html5微信小游戏怎么运行,怎么用pixi.js开发微信小游戏
  5. 印象笔记 还回快捷_搭配这9款实用的第三方工具,小白也可以玩转印象笔记
  6. MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
  7. 手机视频直播软件全面升级,直播APP源码全新功能体验
  8. LoadRunner压力测试实例
  9. Mac数据库可视化工具,workbench完全替代Navicat和PowerDesigner,Oracle官方免费可视化工具workbench!!
  10. js页面跳转,参数传递