You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用PhpSerial库连接串口异常求助(CLI正常浏览器失败)

解决PhpSerial在浏览器访问时串口无效的问题

问题根源

CLI执行PHP时用的是你当前登录的用户(已加入dialout组,拥有串口访问权限),但浏览器访问PHP文件时,代码是由XAMPP的Apache进程用户(通常是nobody或www-data)执行的,这个用户大概率没被加入dialout组,导致没有访问串口设备的权限,因此触发"串口无效"的警告。

解决方案

1. 确认Apache运行用户

执行以下命令查看Apache进程的运行用户:

ps aux | grep httpd

或:

ps aux | grep apache

输出结果的第一列就是Apache的运行用户,比如nobody或www-data。

2. 将Apache用户加入dialout组

根据上一步得到的用户,执行对应命令:

  • 若用户是nobody:
sudo usermod -aG dialout nobody
  • 若用户是www-data:
sudo usermod -aG dialout www-data

3. 重启XAMPP Apache服务

让组权限设置生效:

sudo /opt/lampp/lampp restart apache

4. (可选)永久固化串口设备权限

如果重启串口设备后权限失效,可以添加udev规则永久设置权限:

  1. 查看串口设备的厂商ID和产品ID:
lsusb

找到对应设备的ID xxxx:xxxx字段,比如ID 1a86:7523 QinHeng Electronics CH340 serial converter,其中1a86是厂商ID,7523是产品ID。

  1. 创建udev规则文件:
sudo nano /etc/udev/rules.d/99-usb-serial.rules
  1. 添加以下内容(替换为你的设备厂商ID和产品ID):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0666", GROUP="dialout"
  1. 重新加载udev规则:
sudo udevadm control --reload-rules && sudo udevadm trigger

5. 验证设置

可以在PHP代码中添加以下内容,确认当前运行用户和所属组:

echo "当前运行用户:" . exec('whoami') . "<br>";
echo "所属组:" . exec('groups');

访问该PHP文件,确认用户已在dialout组内。

内容的提问来源于stack exchange,提问作者atef almadany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:50:19