【问题标题】:php shell_exec and exec doesn't work with shell scriptphp shell_exec 和 exec 不适用于 shell 脚本
【发布时间】:2015-09-05 06:50:10
【问题描述】:

这是我的树莓派代码,用于从 raspicam 获取静态照片并将其保存在目录中,

<?php
  exec('raspistill -n -hf -o /var/www/img/image.jpg --timeout 1');
?>

我已使用 -R 授予在该文件夹中读/写的所有权和权限。所以我在 /var/www 中的 ls -al 是这样的

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 内部服务器错误。

【问题讨论】:

  • 如果你在脚本中使用raspistill的完整路径会有什么不同吗?
  • 我需要检查一下,我会尽快发布结果
  • @arco444 很好,在 php 命令行执行时停止脚本执行。

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


【解决方案1】:

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

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

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

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

  • 用户切换到 www-data 后通过终端运行是否还能正常工作?

【讨论】:

  • 我会检查这个方法并回复你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 2016-03-08
相关资源
最近更新 更多