【问题标题】:Issue with php dio on Ubuntu and DebianUbuntu 和 Debian 上的 php dio 问题
【发布时间】:2023-01-29 20:06:35
【问题描述】:

我无法让 PHP dio 在 Linux 上运行。我没有收到任何错误消息,但是当我使用 dio_write nand reads 时,没有任何内容输出到串行设备。我启动串行端口

$bbSerialPort = dio_open($portName, O_CREAT | O_RDWR);

这似乎接受了连接。当我使用

dio_write($bbSerialPort, $dataToSend);

它返回发送的字节数,但没有发送任何内容。当我使用

$data = dio_read($bbSerialPort, 2);

它总是返回 NULL。

我已经使用 minicom 测试了 /dev/ttyUSB0 端口并且一切正常。我还在 MAC 操作系统和 Windows 上尝试了相同的代码,并且一切正常。

我想知道这是否与设备在不同平台上的权限和所有者有关?

我已经尝试在 Debian 和 Ubuntu 上重新安装 php 和 thje dio 扩展 - 总是相同的结果 - 没有错误但是 dio_write 从不向串行设备写入任何内容。

【问题讨论】:

    标签: php linux serial-port


    【解决方案1】:

    当给定文件描述符的文件位置在末尾时,如果在 dio_write() 之后的某处调用了 dio_read(),则需要将位置设置为文件的开头。使用 dio_seek() 可以将位置设置为开头(或根据您的用例进行调整):

    dio_seek($bbSerialPort, 0);
    $data = dio_read($bbSerialPort, 2);
    

    【讨论】:

    • 当然,这只适用于从文件而不是串行设备的 dio_read。我会尝试。我不在可用的平台上使用 dio_seek。
    • 彼得,你的回答促使我尝试另一件事。我通过使用 php-dio 打开标准文件并写入和读取文件来测试我的 php 安装... $bbSerialPort = dio_open('/home/andy/test_file.txt', O_RDWR | O_CREAT, 0666); $bytesSent = dio_write($bbSerialPort, "你好 "); dio_seek($bbSerialPort, 0); $data = dio_read($bbSerialPort); exit($data); 这似乎工作正常,表明我的问题出在串行端口的设置上。事实是当我打开、写入和读取串行端口时,我没有得到任何错误提示权限不是问题。
    【解决方案2】:

    感谢彼得,我终于解决了我的问题。这确实与串行端口设置和我的 PHP 代码访问端口的方式有关。串行端口设置为 9600 波特,在读取远程系统的回复之前我没有留下足够的时间。现在都在工作。

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2018-06-30
      • 2013-03-18
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多