所以这是我的覆盆子pi的代码,以便从raspicam中获取静态照片并将其保存在目录中,
<?php
exec('raspistill -n -hf -o /var/www/img/image.jpg --timeout 1');
?>
我已经使用-R授予了对该forlder进行读/写的所有权和许可。所以我的ls -al in / var / www就是这个
drwxr-xr-x 3 www-data www-data 4096 Jun 19 08:05 .
drwxr-xr-x 12 root root 4096 Jun 19 05:54 ..
-rwxrwxrwx 1 www-data www-data 74 Jun 19 08:30 getImg
drwxrwxrwx 2 www-data www-data 4096 Jun 19 09:21 img
-rw-r--r-- 1 root root 70 Jun 19 10:07 index.php
getImg
是我尝试将脚本作为shell_exec('/bin/bash ./getImg');
这样的文件运行的脚本,但也不起作用。
我添加了/ bash / bin并试图在不使用脚本文件的情况下运行脚本但是没有得到结果。
当我尝试在终端中运行php文件时,它会像通常那样创建图像。所以我认为这必须是一个权限问题,但我还应该对权限做什么?我已经给了该目录的所有权利。
修改
所以我找到了解决方法。因为我不知道问题的原因是什么,所以我不会将其标记为答案,但请将其投票显示在顶部。
我现在使用cgi脚本执行脚本。我在/usr/lib/cgi-bin/
#!/bin/bash
echo "Content-type:text/html\n"
sudo raspistill -vf -n -o /var/www/img/image.jpg --timeout 1200 --metering matrix
echo "Status: 204"
我把它保存为捕获并制作了这个可执行文件,虽然没有对权限做任何事。
sudo chmod +x capture
现在,当我打开链接http://192.168.1.85/cgi-bin/capture
时,浏览器仍然会收到500内部服务器错误消息。然而,仍然会创建图像。
我现在需要修复500内部服务器错误。
答案 0 :(得分:0)
[我会将其添加为评论,但没有足够的分数]
如果您使用可选参数$ output和$ return_var来捕获输出和返回值,您会得到什么?
string exec(string $ command [,array&amp; $ output [,int&amp; $ return_var]])
您的命令是否依赖于以用户身份运行时可用的环境变量,而不是www-data? (您可以使用env命令检查)
如果您在将用户切换到www-data后通过终端运行它仍然有效吗?