从 Apache Laravel PHP 控制器在 Raspberry PI 上执行 python 脚本

Posted

技术标签:

【中文标题】从 Apache Laravel PHP 控制器在 Raspberry PI 上执行 python 脚本【英文标题】:Excute python script on Raspberry PI from Apache Laravel PHP controller 【发布时间】:2019-10-10 09:10:09 【问题描述】:

我在 /home/pi/Test.py 的树莓上有一个 python 脚本,可以从 laravel php 控制器调用。

在 Raspberry 上安装了 Raspian、Apache、PHP 7.3、Python

我通过 cmdline 试过了

python Test.py 4444 > 工作

通过本地php服务器

php artisan serve 

/localhost:8000/setValue/666 > 有效,返回值为0

然后我将应用程序部署到 Apache2 目录

/var/www/html/Project

我再次调用了服务

localhost:80/Project/setValues/666 > nothing, returnvalue 1

这是我的代码

chdir('/home/pi');
$cmd('python Test.py ' . $param);
exec($cmd,$out,$status);
return $status

从 php 调试服务器执行这个返回“0”,从 apache“1”

我试过了

exec ()
shell_exec()
passthrough()

一切都一样——在本地服务器上工作,而不是在 apache 上。

我在 python 脚本和 laravel 项目中将所有者更改为 www-data 并将权限更改为 775,我还将 www-data 添加为 sudoer 但没有任何效果。

我认为必须对可执行权限做一些事情,但还能做什么?

编辑: 我在 Apache error.log 中发现了一条注释

GPIO.setup(数据,GPIO.OUT) RuntimeError: 不在 RPi 上运行!

似乎 www-data 无法访问 GPIO 设置,用户“pi”虽然可以,这意味着 - 我如何使 www-data 拥有与用户“pi”相同的权限?

【问题讨论】:

【参考方案1】:

我在挣扎了几个小时后找到了答案:

首先将 www-data 添加到 gpio 组

>sudo adduser www-data gpio > not working

然后我升级了固件

> sudo rpi-update

最后它在 Apache 服务器上运行了。感谢这个帖子 https://raspberrypi.stackexchange.com/questions/40105/access-gpio-pins-without-root-no-access-to-dev-mem-try-running-as-root 和这个用户 https://raspberrypi.stackexchange.com/users/13650/joan 它工作。非常感谢!

【讨论】:

以上是关于从 Apache Laravel PHP 控制器在 Raspberry PI 上执行 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel php中将变量从视图传递到控制器而没有表单

在PHP Laravel中将变量从foreach循环传递给我的控制器

Laravel5.0:将值从控制器方法传递到公共文件夹中的 .php 文件

从 Laravel 部署的项目中删除 index.php [重复]

如何在laravel routes.php里获取控制器和action名称

Apache,PHP,MySQL,PDO,权限被拒绝,laravel