我有一个PHP脚本,试图在Linux上通过Apache运行。该脚本使用PHP Serial使用TAP协议将通知发送到寻呼系统。问题是无论我将PHP文件本地化还是远程访问,该脚本都无法在Linux上运行。该脚本在Windows上可以运行,但在Linux上则无法运行
我尝试将串行端口从USB串行端口交换为真实的串行端口,但此操作不起作用,我尝试从服务器本身和远程连接运行该端口,并且尝试了将代码更改为只是通过串行端口发送一条消息,我无法使用PHP发送消息,我尝试使用python通过该端口接收消息,并且能够将消息发送到该端口并使用python获取一条消息,因此该端口可以正常工作。 / p>
<?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协议。
答案 0 :(得分:0)
Windows默认将返回值作为chr(13).chr(10)处理,因此在Linux上,您需要添加chr(10)才能使TAP能够使用该返回值。如用户Dave所述。在评论中添加此内容以将其关闭。