【问题标题】:Executing bash script from PHP on raspbian在 raspbian 上从 PHP 执行 bash 脚本
【发布时间】:2017-09-09 21:51:58
【问题描述】:

我有一个脚本,它调用 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?

你有什么想法吗?

提前致谢,

维克多

【问题讨论】:

    标签: php bash apache shell raspbian


    【解决方案1】:

    首先:

    • 如果您没有非常充分的理由,请不要使用 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);
    

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

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

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

    【讨论】:

    • 如果还是不行,请贴出脚本的输出。
    • 我已经尝试了上面的代码,但是我从服务器收到一个错误:HTTP错误500。在错误日志中我可以看到:“PHP解析错误:语法错误,意外'回声'( T_ECHO) 在 /var/www/html/index.php 第 3 行"。如果我评论那些回显行,我会得到一个空白页,并且错误日志给出:“错误打开设备:/dev/video0 打开:权限被拒绝”
    • 好的,它正在工作!我已经检查了你告诉我的关于许可的最后一件事。所以我允许服务器访问相机:“adduser www-data video”,然后允许它写入文件夹:“chown -R www-data /home/pi/webcam”。
    • 如果您觉得我的回答有帮助,请考虑点赞并接受。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多