我有一个 PHP 脚本,我试图在 Linux 上通过 Apache 运行它。该脚本使用 PHP Serial 向使用 TAP 协议的寻呼系统发送通知。问题是脚本在 Linux 上不起作用,无论我是 localhost PHP 文件还是远程。 该脚本在 Windows 上工作,但在 Linux 上不起作用
我尝试将串行端口从 USB 串行端口交换到真正的串行端口,但这不起作用,我尝试从服务器本身和远程连接运行它,并且网络正常工作,我尝试将代码更改为只发送一个串行端口上的消息我无法使用 PHP 发送消息,我尝试使用 python 通过端口接收消息,并且能够向端口发送消息并使用 python 获取消息,因此端口正在工作。
<?php
header('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 协议。
墨色风雨