Выполнение bash-скрипта из PHP на raspbian

У меня есть скрипт, который вызывает fswebcam для захвата JPG с моей USB-камерой. Я сделал его исполняемым с помощью "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

Итак, я попытался изменить мой вызов в 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

Я пробовал все из этой темы: Как запустить скрипт.sh с php?

Есть ли у вас какие-либо идеи?

Заранее спасибо,

Виктор

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);

Другим источником вашей проблемы может быть разрешение:

Веб-сервер обычно работает от имени другого пользователя.

Убедитесь, что веб-сервер действительно может записывать в выходной каталог.

Другие вопросы по тегам