从 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 [重复]