php本地如何开启websocket遇到的坑
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遇到的坑相关推荐
- 宝塔php socket,宝塔开启websocket 小程序聊天功能开发
前言 在网上找了各种各样宝塔开启websocket的方法,结果试了一天都不行,无奈只有请教大神出手 摒弃 首先在全网基本上没有宝塔配置的教程,有反正我是试了一天都不行,他们的统一配置都是在" ...
- Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)
Springboot整合Websocket遇到的坑 一.使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean @Confi ...
- 国产电脑麒麟银河v10sp1定制桌面版系统开启nfs共享踩坑实录
用上国产电脑差不多一年了,飞腾D2000/8 E8C的CPU芯片,永中OFFICE组件,从办公的角度上说,总体感觉还是不错的.不过不知是不是定制桌面版的缘故,要顺畅使用还是踩了很多坑,网上有些通用攻略 ...
- vue-cli本地的一个websocket
今天跑本地vue-cli项目,看到了一个websocket,如下图: 解惑如下: vue本质上还是编译成h5就是说node相当于一个服务器 你执行npm run dev就是让node服务器编译vue ...
- 第一次接触WebSocket遇到的坑以及感受
要求用.net写一个服务,然后通过webscoket实现客户端与服务端之间的通信. 第一次知道.net还可以用来写服务,然后问题来了,服务是什么- -..下面图里的就是服务,可以停止暂停和启动. 我要 ...
- 第一次git拉取代码到本地及身份验证失败踩坑
前言:用命令 git clone +git代码地址,输入用户名和密码后,拉取本地后一直报错,身份验证失败 试了把网站用户名密码加到本地windows凭据管理,也不行,后面发现是没有加邮箱的坑 1:gi ...
- 本地站点开启https
线上环境开启https请移步 给站点开启https和http2 本文这里要说的是如何在本地环境搭建https,至于说有什么用,假如你找到这了, 就说明你已经用到了. Chrome NET::ERR_C ...
- 本地项目开启http-server服务
项目用到jquery,需要用load()加载公共模块的方法,如果没有服务支持,会报跨域报错.处理这种报错的方式有很多种方法,下面介绍一种使用本地开启http-server服务的处理方式 如项目中没有开 ...
- ThinkPHP5.0的think-swoole 开启WebSocket的SSL支持 使用wss连接
相关文章:ThinkPHP5.0结合Swoole开发WebSocket在线聊天 Swoole WebSocket开启SSL支持 使用wss连接 找到think-swoole的Server.php: 在 ...
- 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与服务器连接成功,但是服务 ...
最新文章
- HDU 2084 数塔 DP
- SAP CRM Fiori应用里的note section
- 使用EMR-Kafka Connect进行数据迁移
- (转) Android平台上关于IM的实践总结
- MySQL入门之数据库介绍及MySQL介绍
- Python获取环境变量值
- developerDiskImage文件提取
- python函数的使用
- ScrollView嵌套GridView,自定义Gridview动态设置Item的高度,屏幕适配
- 易语言webservice接口_易语言webservice接口调用助
- c++重复代码检查工具
- userdel: user user is currently used by process 18752解决办法
- 用聊天记录当证据 对方改了微信号怎么证明他是他
- 解析12306订票流程
- 中国智慧城市健康发展应注意八个方面
- 网页播放的本地视频代码
- 2018年Android源码下载记录
- 使用计算机正确坐姿,如何保持正确坐姿?(多图)
- Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著
- 数据库系统概论(第四版)习题解答
热门文章
- 【回归分析】logistic regresssion中的拟合优度检验(goodness-of-fit test)
- CImageList使用指南
- python敲七游戏代码_敲七游戏数字表
- Html5微信小游戏怎么运行,怎么用pixi.js开发微信小游戏
- 印象笔记 还回快捷_搭配这9款实用的第三方工具,小白也可以玩转印象笔记
- MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
- 手机视频直播软件全面升级,直播APP源码全新功能体验
- LoadRunner压力测试实例
- Mac数据库可视化工具,workbench完全替代Navicat和PowerDesigner,Oracle官方免费可视化工具workbench!!
- js页面跳转,参数传递