繁体   English   中英

PHP序列可在Windows上运行,但不能在Linux上运行

[英]PHP serial works on windows, but not on linux

我有一个PHP脚本,试图通过Linux上的Apache运行。 该脚本使用PHP Serial使用TAP协议将通知发送到寻呼系统。 问题是无论我将PHP文件本地化还是远程访问,该脚本在Linux上均不起作用。该脚本在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协议。

Windows默认将返回处理为chr(13).chr(10),因此在Linux上,您需要添加chr(10)才能使TAP能够使用该返回。 如用户Dave所述。 在评论中添加此内容以将其关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM