为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 串行适用于 Windows,但不适用于 linux

PHP 串行适用于 Windows,但不适用于 linux

PHP
料青山看我应如是 2022-01-02 14:50:57
我有一个 PHP 脚本,我试图在 Linux 上通过 Apache 运行它。该脚本使用 PHP Serial 向使用 TAP 协议的寻呼系统发送通知。问题是脚本在 Linux 上不起作用,无论我是 localhost PHP 文件还是远程。 该脚本在 Windows 上工作,但在 Linux 上不起作用我尝试将串行端口从 USB 串行端口交换到真正的串行端口,但这不起作用,我尝试从服务器本身和远程连接运行它,并且网络正常工作,我尝试将代码更改为只发送一个串行端口上的消息我无法使用 PHP 发送消息,我尝试使用 python 通过端口接收消息,并且能够向端口发送消息并使用 python 获取消息,因此端口正在工作。<?phpheader('Access-Control-Allow-Origin: *');include "php_serial.class.php";$pagerSerial = new phpSerial();$pagerSerial->deviceSet("/dev/ttyUSB0");$pagerSerial->confBaudRate(9600);$pagerSerial->confParity("none");$pagerSerial->confCharacterLength(8);$pagerSerial->confStopBits(1);$pagerSerial->confFlowControl("none");$pagerSerial->deviceOpen();$msg_to = 102;$msg_text = "Test"; $message = chr(2).$msg_to.chr(13).$msg_text.chr(13).chr(3);$checksum = calcChecksum($message);$message .= $checksum.chr(13);$CR = chr(13);$end = chr(27).chr(4).chr(13);$login = chr(27)."PG1".chr(13);$pagerSerial->sendMessage($CR);sleep(2);$pagerSerial->sendMessage($message);sleep(2);$pagerSerial->sendMessage($end);function calcChecksum($message) {$split = str_split($message); $sum = 0;foreach ($split as $value) { $numb = ord($value); $sum += $numb; }$d3 = 48 + $sum - intval($sum / 16) * 16;$sum = intval($sum / 16);$d2 = 48 + $sum - intval($sum / 16) * 16;$sum = intval($sum / 16);$d1 = 48 + $sum - intval($sum / 16) * 16;return chr($d1).chr($d2).chr($d3);};我不明白为什么它适用于 Windows,而不适用于 Linux。当我使用 python 时,我可以让端口与 pyserial 一起工作。我一直无法让脚本在 python 上运行,但我一直在尝试。最后,最好让它在 PHP 中为我长期尝试设置的界面工作。任何线索为什么它可以在一个操作系统中工作,而不是另一个?编辑:系统之间的 Chrs 可能不同吗?我认为 window 和 linux 处理字符返回的方式不同,但我只需要发送该数据,以便寻呼系统了解我发送的 TAP 协议。
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

默认情况下,Windows 将返回作为 chr(13).chr(10) 处理,因此在 linux 上您需要添加 chr(10) 以便 TAP 能够使用返回。正如用户 Dave 所提到的。在评论中添加此内容以关闭它。


查看完整回答
反对 回复 2022-01-02
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信