Я использую Archlinux, и я хочу запустить следующий скрипт (последняя строка фактически):
<?php
var_dump(get_current_user());
var_dump(exec("whoami"));
var_dump(exec("sudo echo 1 > /sys/class/gpio/gpio44/value"));
Сценарий имеет следующие разрешения (я пробовал с и без sudo в последней строке)
-rwxr-xr-x 1 http http 126 Nov 17 17:24 turn_on.php
и http
был добавлен в \etc\sudoers
со всеми разрешениями
http ALL=(ALL) ALL
Результатом открытия скрипта turn_on.php
в браузере является:
string(4) "http" string(4) "http" string(0) ""
Скрипт не делает то, что ему нужно (последняя строка) и в журнале apache, каждый раз, когда я перезагружаю браузер, я получаю:
sh: /sys/class/gpio/gpio44/value: Permission denied
Это мой первый тест для решения того, что я хочу сделать, я думаю, что нужно сделать что-то более "API-интерфейс веб-сервиса PHP". Любое предложение высоко ценится. Cheers.-
Вам нужно проверить разрешения /sys/class/gpio/gpio44/value, так как это создает ошибку разрешений.
Кроме того, попробуйте использовать sudo из командной строки для имитации функциональности скрипта:
sudo -u http echo 1 > /sys/class/gpio/gpio44/value
Если это не удается, вам просто нужно возиться с вашими разрешениями до тех пор, пока он не будет работать правильно, а затем повторите попытку из браузера.
Если это работает, но в браузере все еще не удается, возможно, что выполнение вашего сценария фактически не использует пользователя http.
exec
считается «опасным» методом php, но это действительно зависит от того, что вы с ним делаете. Что делает exec супер опасным, так это то, что вы позволяете конечным пользователям вводить информацию, которая делает его exec, например: exec ($ _ GET ['param']); Пока ты этого не сделаешь, у тебя должно быть все в порядке. Если вам нужно включить в exec какие-либо данные, отправленные пользователем, посмотрите в PHP функцию escapeshellarg ().