Выполнение 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);
Другим источником вашей проблемы может быть разрешение:
Веб-сервер обычно работает от имени другого пользователя.
Убедитесь, что веб-сервер действительно может записывать в выходной каталог.