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

这篇具有很好参考价值的文章主要介绍了PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音,网络读卡器,18002295132,QQ:954486673,PHP HTTP,PHP WEB,PHP Server,PHP Request,PHP Response

 本示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)文章来源地址https://www.toymoban.com/news/detail-662971.html

<?php

set_time_limit(0);
$BindIp=get_local_ip(); //
$Port=88;               //监听端口

if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE){
    echo 'Failed to initialize the socket:' . socket_strerror(socket_last_error($socket));
    exit;
}

// socket_bind(): 将socket资源绑定到指定地址
if(!socket_bind($socket, $BindIp, $Port)){
    echo 'Failed to bind the port:' . socket_strerror(socket_last_error($socket));
    exit;
}

// socket_listen(): 监听socket的连接请求
if(!socket_listen($socket)){
    echo 'Listening port:' . socket_strerror(socket_last_error($socket));
    exit;
}else{echo "HTTP service has been started and is listening on the port:".$BindIp.":".$Port."\n\n";}

while(1){
    try {
        if (($client = socket_accept($socket)) !== FALSE) {
            $content = socket_read($client, 20480);
            $content = trim($content);

            if ($content) {
                $response = AnalyzeData($content); //解析接收到的数据,并生成回应数据
                socket_write($client, $response);
                //socket_close($client);
            }
        }
    }
    catch (Exception $e1) {
        echo "Request ERR:".$e1."\n";
    }
}
socket_close($socket);

//解析接收到的数据,并生成回应数据驱动读卡器显示文字、蜂鸣响声、播报语音
function AnalyzeData($string)
{
    $info="";
    $card="";
    $request="";
    $heartbeattype="";
    $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 = trim($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 = trim($para[1]);   //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
                    break;
                case "data":
                    $data = $para[1];   //读取的卡扇区内容
                    break;
                case "dn":
                    $dn = trim($para[1]);     //设备硬件序列号,出厂时已固化,全球唯一
                    break;
                case "status":
                    $status = $para[1]; //读卡状态,如密码认证失败为12
                    break;
                case "heartbeattype":
                    $heartbeattype = trim($para[1]);  //心跳包标识
                    break;
                case "input":
                    $input = $para[1];  //输入接口状态
                    break;
                case "output":
                    $output = $para[1]; //输出接口状态
                    break;
                case "time":
                    $time = $para[1];   //设备时钟
                    break;
                case "rand":
                    $rand = $para[1];   //随机数
                    break;
            }
        }

        if (strlen($info)>0 and strlen($dn)==16 and $heartbeattype=="1"){ //接收到设备的心跳包
            //$ResponseStr = "Response=1," . $info . ",,0,0,";             //正式项目可以用这条不显示文字、不响声、不播报语音的指令来回应心跳,此处加入显示、响声只是用来检测读卡器功能
            $ResponseStr = "Response=1," . $info . ",".$dn. GetChineseCode("接收到心跳信息    ").",20,1,";    //正式项目可以用这条不显示文字、不响声、不播报语音的指令来回应心跳,此处加入显示、响声只是用来检测读卡器功能

        }elseif (strlen($info)>0 and strlen($dn)==16 and (strlen($card)>4)){//接收到有效的刷卡数据
            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;

        }else{
            $ResponseStr = "  ";   //其他未知的信息
        }
        echo $ResponseStr . "\n\n";
        return $ResponseStr;
    }
    catch (Exception $e1) {
        echo "Request ERR:".$e1."\n";
    }
}

//获取中文汉字GB2312编码,显示中文、TTS中文语音必须转换编码
function GetChineseCode($inputstr){
    $gbkstr=iconv("UTF-8","GB2312",$inputstr);      //中文必段强制使用GB2312编码格式
    $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;
}

//获取本机IP地址------------------------------------------------------------------------------------------------------------------------
function get_local_ip()
{
    $preg = "/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/";
    //获取操作系统为win2000/xp、win7的本机IP真实地址
    $Netdriv=array();
    exec("ipconfig", $out, $stats);
    if (!empty($out)) {
        foreach ($out AS $row) {
            if (strstr($row, "IP") && strstr($row, ":") && !strstr($row, "IPv6")) {
                $tmpIp = explode(":", $row);
                if (preg_match($preg, trim($tmpIp[1]))) {
                    $Netdriv[]=trim($tmpIp[1]);
                    echo trim($tmpIp[1])."\n";
                }
            }
        }
    }
    //获取操作系统为linux类型的本机IP真实地址
    //exec("ifconfig", $out, $stats);
    //if (!empty($out)) {
    //    if (isset($out[1]) && strstr($out[1], 'addr:')) {
    //        $tmpArray = explode(":", $out[1]);
    //        $tmpIp = explode("", $tmpArray[1]);
    //        if (preg_match($preg, trim($tmpIp[0]))) {
    //            return trim($tmpIp[0]);
    //        }
    //    }
    //}
    if (!empty($Netdriv)) {
        return $Netdriv[0];   //如果有多张网块,可以修改数组取值来绑定相应的网卡
    }else{
        return '0.0.0.0';
    }
}

?>

到了这里,关于PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 轻量级服务器nginix:如何实现Spring项目的负载均衡

    点两下这个package,就会在target目录下生成一个war包 把这个warb包拿出来,放在桌面上备用 数据多的话,选择sql文件,直接运行 数据导入成功了 8080和8081都可以 虚拟机的位置: nginx的位置 /usr/local/nginx/conf 两台虚拟机所在的位置: tomcat Tomcat2 运行状态良好 首先在 修改nginx里的

    2024年02月01日
    浏览(48)
  • 开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考

    2024年02月04日
    浏览(73)
  • 基于lighthouse+长安链的轻量级云服务器产品,实现部署合约、区块链服务一系列操作文档

    长安链已上架一款lighthouse+长安链的轻量级云服务器产品 体验入口:轻量应用服务器Lighthouse_香港轻量服务器_海外轻量服务器-腾讯云 区块链概览 获取区块链ID(DApp需要配置) 合约管理 智能合约git地址:https://git.chainmaker.org.cn/fish/fish1208-chainmaker-lighthouse/-/tree/master/contract EV

    2023年04月08日
    浏览(40)
  • git轻量级服务器gogs、gitea,非轻量级gitbucket

    本文来源:git轻量级服务器gogs、gitea,非轻量级gitbucket, 或 gitcode/gogs,gitea.md 结论: gogs、gitea很相似 确实轻, gitbucket基于java 不轻, 这三者都不支持组织树(嵌套组织 nested group) 只能一层组织。 个人用,基于gogs、gitea,两层结构树 简易办法: 把用户当成第一层节点、该用户的

    2024年02月07日
    浏览(80)
  • Tomcat轻量级服务器

    目录 1.常见系统架构  C-S架构 B-S架构 2.B-S架构系统的通信步骤 3.常见WEB服服务器软件 4.Tomcat服务器的配置 下载安装 环境变量配置 测试环境变量是否配置成功 测试Tomcat服务器是否配置成功  Tomcat窗口一闪而过的解决步骤 Tomcat解决乱码 介绍: C-S架构即Client/Server(客户端/服务

    2023年04月14日
    浏览(140)
  • 轻量级音乐服务器LMS

    本文软件是网友 tommyvinny 推荐的,他在 UNRAID 上安装遇到了权限问题,存在无法建立目录的情况,但似乎在群晖上没遇到。如果你也遇到相似的问题,可以试试命令行模式。 官方体验站点:https://lms-demo.poupon.dev/ 什么是 LMS ? LMS ( Lightweight Music Server )是一款自托管的轻量级

    2024年02月08日
    浏览(47)
  • 三步配置轻量级服务器nginx

    一款轻量级的 Web服务器,反向代理服务器,以及电子邮件代理服务器 主要有三个优点: 占用内存少,并发能力强 Nginx为性能优化开发,能支持五千个左右的并发响应 (Tomcat只有三百到五百) Nginx支持热部署,可以在不间断服务情况下对软件进行升级(不要用关闭服务器)

    2023年04月24日
    浏览(51)
  • 阿里云轻量级服务器安装docker

    前置知识:需要有一台阿里云服务器(或者自己电脑装虚拟机使用centos) docker理念:\\\"一次封装,到处运行\\\",只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。 docker:解决了运行环境和配置问题的软件容器。方便做持续集成并有助于整体发布的容器

    2023年04月22日
    浏览(71)
  • 腾讯云轻量级服务器哪个镜像比较好?

    腾讯云轻量应用服务器镜像是什么?镜像就是操作系统,轻量服务器镜像系统怎么选择?如果是用来搭建网站腾讯云百科txybk.com建议选择选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科来详细说下腾讯云轻量应用服务器镜像的选择方法: 轻量应用

    2024年02月06日
    浏览(51)
  • 腾讯云轻量级服务器部署(新手图文教程)

    相信不少同学都想将自己的项目部署到云服务器,让别人通过自己的域名就可以访问到自己的项目,而腾讯云轻量级服务器作为一个小型的应用,支持域名解析和可视化运维等。比较适合新手入门,本文服务器操作系统为Centos7。 1.购买方式 本文主要面向新手,毕竟一般只有

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包