PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

本示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)
<?php
mb_http_output('utf-8');
$port=88;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$bool = socket_bind($socket, "0.0.0.0", $port);
if($bool)echo "Server is listening on port:".$port."\n";
else{echo "Socket bind port:".$port." Error!";exit;
}while($bool){try {$bool = socket_listen($socket);if (!$bool) {echo "LISTEN ERROR:" . socket_strerror(socket_last_error()) . '\n';socket_close($socket);}$new_socket = socket_accept($socket);if (!$new_socket) {$bool=false;socket_close($socket);echo "ACCPET ERROR:" . socket_strerror(socket_last_error()) . '\n';}$string = socket_read($new_socket, 1024);$data = request($string);if(substr($data,0,10)=="Response=1") {$num = socket_write($new_socket, $data);if ($num == 0)echo "WRITE ERROR:" . socket_strerror(socket_last_error()) . "\n";}echo $data . "\n\n";socket_close($new_socket);}catch(Exception $e1) {echo "Server Err:".$e1."\n";}
}/* [读取get或post请求中的包序号、机号、卡号、卡类型、设备序号、读卡状态等,返回相应的字符串驱动读卡器显示文字及播报语音] */
function request($string)
{$info="";$card="";$request="";$ResponseStr="";try {echo $string . "\n";$requestmode = substr($string, 0, 4);if ($requestmode == "GET ") {$begin = stripos($string, "?") + 1;$end = stripos($string, "HTTP/1.1");$request = substr($string, $begin, $end - $begin);} elseif ($requestmode == "POST") {$pattern = "/\s+/";$FieldsList = preg_split($pattern, $string);$conuts = count($FieldsList);$isjson = stripos($string, "application/json");$request = $FieldsList[$conuts - 1];if ($isjson > 0) { //可以直接使用JSON来解板,此处统一替换成字符串处理$request = str_replace("{", "", $request);$request = str_replace("}", "", $request);$request = str_replace("\"", "", $request);$request = str_replace(":", "=", $request);$request = str_replace(",", "&", $request);}}$Fields = explode("&", $request);$conuts = count($Fields);for ($p = 0; $p < $conuts; $p++) {$para = explode("=", $Fields[$p]);switch ($para[0]) {case "info":$info = $para[1];break;case "jihao":$jihao = $para[1];break;case "cardtype":$cardtype = $para[1];$typenum = hexdec($cardtype) % 16; //typenum=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份证,7 是15693卡,IClass"$pushortake = intval(hexdec($cardtype) / 128); //pushortake=0 表示读卡,>0表示卡离开感应区break;case "card":$card = $para[1];break;case "data":$data = $para[1];break;case "dn":$dn = $para[1];break;case "status":$status = $para[1];break;}}if(strlen($info)>0 and strlen($info)>0) {if ($pushortake == 0) //播报的中文语音,[v8]表示语音大小,取值v1 到 v16, TTS中文语音要转换编码$ChineseVoice = "[v8]" . GetChineseCode("读取卡号[n1]") . $card;else$ChineseVoice = "[v8]" . GetChineseCode("卡号[n1]") . $card . GetChineseCode("离开感应区");//此处可加入业务对数据库的查询、删除、增加、修改等操作,结果以文字、语音信息回应$DisplayStr = "{" . GetChineseCode("卡号") . ":}"; //显示的文字,{}内文字可以高亮显示,中文必须转换编码,英文字符、数字等不需要转换$DisplayStr = $DisplayStr . substr($card . " ", 0, 12);$DisplayStr = $DisplayStr . substr(date('Y-m-d H:i:s', time()), 2, 17);//Response=1是固定的回应头信息+接收的包序号+显示文字+显示延时秒数+蜂鸣响声代码+TTS语音$ResponseStr = "Response=1," . $info . "," . $DisplayStr . ",20,1," . $ChineseVoice;}return $ResponseStr;}catch (Exception $e1) {echo "Request ERR:".$e1."\n";}
}//获取中文汉字GB2312编码,显示中文、TTS中文语音必须转换编码
function GetChineseCode($inputstr){if(mb_detect_encoding($inputstr, 'UTF-8', true) === true)$gbkstr=iconv("UTF-8","GB2312",$inputstr); //中文必段强制使用GB2312编码格式else$gbkstr=$inputstr;$strlens=strlen($gbkstr);$hexcode="";for($i=0;$i<$strlens;$i++){if($i % 2 ==0) {$hexcode = $hexcode . "\\x";}$byte = ord($gbkstr[$i]);$b=substr('00'.dechex($byte ),-2);$hexcode=$hexcode.$b;}return $hexcode;
}
相关文章:
PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音
本示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) <?php mb_http_output(utf-8); $port88; $socket socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $bool socket_bind($socket, "0.0.0.0",…...
Neo4j之with基础
WITH 语句在 Cypher 查询中用于将之前的查询结果传递给后续的查询操作。它可以用来控制查询的流程,并且常常与其他语句如 MATCH、RETURN、CREATE、DELETE 等一起使用。以下是一些常用的示例和解释: 基本用法: MATCH (p:Person) WITH p RETU…...
60页数字政府智慧政务大数据资源平台项目可研方案PPT
导读:原文《60页数字政府智慧政务大数据资源平台项目可研方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 项目需求分析 项目建设原则和基本策略…...
循环神经网络RNN完全解析:从基础理论到PyTorch实战
目录 一、循环神经网络全解1.1 什么是循环神经网络网络结构工作原理数学模型RNN的优缺点总结 1.2 循环神经网络的工作原理RNN的时间展开数学表述信息流动实现示例梯度问题:梯度消失和爆炸总结 1.3 循环神经网络的应用场景文本分析与生成1.3.1 自然语言处理1.3.2 机器…...
【SA8295P 源码分析】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE
【SA8295P 源码分析】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE 一、QNX 侧创建 img 镜像二、QNX 侧指定只编译某一个版本三、Android定制修改selinux权限,user版本采用enforcing,userdebug版本permissive系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》…...
网络安全法律
立法的必要性:网络渗透,网络入侵,网络诈骗,网上钓鱼侵犯知识产权,宣传恐怖主义,极端主义等伤害共鸣利益的行为越发猖狂 信息系统运维安全管理规定(范文)| 资料 过程: 14-16 草案初…...
Redis缓存问题(穿透, 击穿, 雪崩, 污染, 一致性)
目录 1.什么是Redis缓存问题? 2.缓存穿透 3.缓存击穿 4.缓存雪崩 5.缓存污染(或满了) 5.1 最大缓存设置多大 5.2 缓存淘汰策略 6.数据库和缓存一致性 6.1 4种相关模式 6.2 方案:队列重试机制 6.3 方案:异步更新缓…...
网络时代拟态环境的复杂化
信息在网络上的制作、编码、传播机制和传统媒介有本质的区别,即传播者和 受传者的角色交叉,而且互联网本身可看作另一个有别于现实环境的虚拟世界,因 此网络媒介所营造出的拟态环境在一定程度上独立于传统大众传播的拟态环境。 一个是传统…...
湘潭大学 湘大 XTU OJ 1055 整数分类 题解(非常详细)
链接 整数分类 题目 Description 按照下面方法对整数x进行分类:如果x是一个个位数,则x属于x类;否则将x的各位上的数码累加,得到一个新的x,依次迭代,可以得到x的所属类。比如说24,246&#…...
什么是视频的编码和解码
这段描述中,视频解码能力和视频编码能力指的是不同的处理过程。视频解码是将压缩过的视频数据解开并还原为可播放的视频流,而视频编码是将原始视频数据压缩成更小的尺寸,以减少存储空间和传输带宽。在这个上下文中,解码能力和编码…...
LeetCode 2681. Power of Heroes【排序,数学,贡献法】2060
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
AVL树的讲解
算法拾遗三十八AVL树 AVL树AVL树平衡性AVL树加入节点AVL删除节点AVL树代码 AVL树 AVL树具有最严苛的平衡性,(增、删、改、查)时间复杂度为O(logN),AVL树任何一个节点,左树的高度和右树的高度差…...
Unity 之 Input类
文章目录 总述具体介绍 总述 Input 类是 Unity 中用于处理用户输入的重要工具,它允许您获取来自键盘、鼠标、触摸屏和控制器等设备的输入数据。通过 Input 类,您可以轻松地检测按键、鼠标点击、鼠标移动、触摸、控制器按钮等用户输入事件。以下是关于 I…...
亚信科技AntDB数据库连年入选《中国DBMS市场指南》代表厂商
近日,全球权威ICT研究与顾问咨询公司Gartner发布了2023年《Market Guide for DBMS, China》(即“中国DBMS市场指南”),该指南从市场份额、技术创新、研发投入等维度对DBMS供应商进行了调研。亚信科技是领先的数智化全栈能力提供商…...
AMBA总线协议(3)——AHB(一)
目录 一、前言 二、什么是AHB总线 1、概述 2、一个典型的基于AHB总线的微处理器架构 3、基本的 AHB 传送特性 三、AMBA AHB总线互联 四、小结 一、前言 在之前的文章中我们初步的了解了一下AMBA总线中AHB,APB,AXI的信号线及其功能,从本文开始我们…...
Git commit与pull的先后顺序
Git commit与pull的先后顺序_git先pull再commit_Mordor Java Girl的博客-CSDN博客 编辑yucoang2020.04.21 回复 28 先pull再commit的话, 你的commit也就不再纯粹了. 这一个commit不再是"你所编辑的xxx功能, 而是"别人所编辑的你所编辑的xxx". 我认为提交历…...
HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制ForEach循环渲染
ForEach基于数组类型数据执行循环渲染。说明,从API version 9开始,该接口支持在ArkTS卡片中使用。 一、接口描述 ForEach(arr: any[], itemGenerator: (item: any, index?: number) > void,keyGenerator?: (item: any, index?: number) > stri…...
Powered by Paraverse | 平行云助力彼真科技打造演出“新物种”
01 怎么看待虚拟演出 彼真科技 我们怎么看待虚拟演出? 虚拟演出给音乐人或者音乐行业带来了哪些新的机会?通过呈现一场高标准的虚拟演出,我们的能力延伸点在哪里? 先说一下我们认知里的虚拟演出的本质: 音乐演出是一…...
企微配置回调服务
1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …...
机器人远程控制软件设计
机器人远程控制软件设计 That’s all....
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
