gpt4 book ai didi

PHP 系列适用于 Windows,但不适用于 Linux

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:47 25 4
gpt4 key购买 nike

我有一个 PHP 脚本,我试图通过 Linux 上的 Apache 运行它。该脚本使用 PHP Serial 通过 TAP 协议(protocol)向寻呼系统发送通知。问题是脚本在 Linux 上不起作用,无论我是在本地托管 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 协议(protocol)。

最佳答案

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

关于PHP 系列适用于 Windows,但不适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com