正在 raspbian 从 PHP 执行 bash 脚本

Executing bash script from PHP on raspbian

我有一个脚本调用 fswebcam 来使用我的 USB 相机捕捉 jpg。我已经使用 "chmod +x webcam.sh" 使其可执行:

文件:/var/www/html/webcam.sh

#!/bin/bash
DATE=$(date + "%Y-%m-%d_%H%M")
fswebcam -r 640x480 /home/pi/webcam/$DATE.jpg

这在没有 sudo 的命令行中工作正常,所以我制作了一个小 PHP 页面:

文件:/var/www/html/index.php

<?php
 $output = shell_exec('sh /var/www/html/webcam.sh');
 echo "<pre>$output</pre>";
?>

当我进入网页时,我只看到一个空白页面,并且在我的网络摄像头文件夹中没有创建任何 jpg。

我收到以下错误: Apache2 error log

所以我尝试将 PHP 中的调用修改为:

<?php
$output = shell_exec('/usr/bin/sudo /bin/bash /var/www/html/webcam.sh');
echo "<pre>$output</pre>";
?>

我还将以下内容添加到 sudoers 文件

www-data ALL=NOPASSWD: /path/to/script

但我仍然得到错误:apache2 log error

我已经尝试了这个线程中的所有内容:How to run .sh script with php?

你有什么想法吗?

提前致谢,

维克多

首发:

  • 如果没有非常的充分理由,请不要使用 sudo。
  • sh 不一定调用 bash.
  • sudo 需要密码,但您没有提供密码,因此出现错误。

我建议尝试使用 exec 而不是 shell_exec(两者之间存在差异):

<?php
    exec('/var/www/html/webcam.sh', $output, $exitCode);

    echo 'Exit code: '.$exitCode.' <hr />';
    echo implode('<br />', $output);

您的问题的另一个来源可能与权限相关:

网络服务器通常以不同的用户身份运行。

确保网络服务器确实可以写入输出目录。