php shell_exec和exec不适用于shell脚本

时间:2015-06-19 10:13:30

标签: php bash raspberry-pi exec shell-exec

所以这是我的覆盆子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/

中创建了一个shell脚本
#!/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内部服务器错误。

1 个答案:

答案 0 :(得分:0)

[我会将其添加为评论,但没有足够的分数]

  • 如果您使用可选参数$ output和$ return_var来捕获输出和返回值,您会得到什么?

    string exec(string $ command [,array&amp; $ output [,int&amp; $ return_var]])

  • 您的命令是否依赖于以用户身份运行时可用的环境变量,而不是www-data? (您可以使用env命令检查)

  • 如果您在将用户切换到www-data后通过终端运行它仍然有效吗?