【问题标题】:Trouble with custom PHP extension自定义 PHP 扩展的问题
【发布时间】:2013-03-17 13:53:17
【问题描述】:

几个月前,我用 C 语言为 Arduino 微控制器构建了一个串行连接库。我在想如果我可以为这个库写一个 PHP 包装器该有多棒。

我编写了一个 PHP 扩展,其中只有一个名为“acm_get_door()”的函数,它应该返回 -1、0 或 1,具体取决于我的 Arduino 上某个引脚的状态。如果返回 -1,则表示连接未设置。

因此,在加载自定义扩展并更改我的两个 php.ini 文件并重新启动其他所有内容后,我通过 CLI 运行了此测试:

$ php -r 'echo acm_get_door();'

它返回一个“1”。我很兴奋,所以我玩了一下电路,看看我能不能得到一个“0”。好吧,我做到了,我认为我的扩展程序运行良好。

然后我转到我的测试网络服务器(同一台计算机)中的一个 .php 文件并尝试运行该函数。我得到了一个'-1'的结果。扩展确实加载了,但我似乎无法启动与 Arduino 的连接。

我想知道这是否可能是关于访问某些文件的权限问题。该函数需要访问一个名为“/dev/ttyACM0”的文件,它可以在 CLI 版本中访问。我的 Apache Web 服务器可能没有访问该文件的权限,如果是这样,我将如何调整内容以便它访问?

感谢您的宝贵时间。

【问题讨论】:

  • ls -l /dev/tty/ACM0 告诉你什么?
  • 现在就试试。它游戏我:crw-rw----

标签: php c apache arduino


【解决方案1】:

可能该组有权读取/写入设备。

因此,使用ls -l /dev/tty/ACM0 找出设备的组所有者。然后,使用以下命令将自己添加到组中:

sudo adduser <me> <the_group>

(其中 me 是您的用户名,the_group 是设备组)

您可能需要注销/登录才能获得更改的组权限的效果。

【讨论】:

  • 感谢您的回复。下次我一定会试试这个。
【解决方案2】:

好的,感谢 John Jesus,我只需要更改文件 /dev/ttyACM0 的权限即可。

它被设置为 660,666 似乎可以工作(尽管这可能是个坏主意)。

【讨论】:

  • /dev/tty/ACM0的群主是什么?你能发布命令的全部输出吗?
  • 您可以将自己添加到同一个组而不是更改权限(请参阅我的答案)。
  • @John,输出为:crw-rw---- 1 root dialout 166, 0 Mar 17 15:39 ttyACM0 == 每次我拔掉 Arduino 时它都会重置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多