Я разрабатываю простой (очень простой) интерфейс для openwrt с использованием PHP. Для этого мне нужно вызвать многие команды openwrt UCI (Unified conf. Interface) через функции PHP shell_exec () или system (). Все команды UCI, которые я пробовал в терминале, работают отлично. Но как только я запускаю их через вышеуказанные функции, они просто не работают.
В качестве примера я запускаю следующие две команды, которые хорошо работали в терминале
uci set wireless.@wifi-iface[0].ssid=test
uci commit
Но как только я запускаю их через PHP, ничего не происходит. Они просто не работают. Я создаю .sh файл, сохраняю две строки и запускаю эти файлы, используя PHP, но снова !! результаты одинаковы. Но когда я запускаю .sh файл через терминал, он работает !!
Для тестирования я установил разрешение для обоих файлов на 777. Но это не помогает. Существуют ли какие-либо дополнительные требования для запуска команд оболочки через PHP, такие как root-доступ к PHP или Apache? Я новичок в этом, и я был бы благодарен, если кто-то может помочь
мой apache error_log
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] uci
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] :
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117] I/O error
[Wed Aug 19 08:26:53 2015] [error] [client 192.168.2.117]
Я использую apache в качестве веб-сервера и openwrt Chaos Calmer 15.05-rc3 в качестве своей базовой прошивки поверх Raspberry pi 2
Мне удалось решить мою проблему с помощью веб-сервера Uhttpd вместо Apache. У Apache почему-то недостаточно прав для непосредственного выполнения команд UCI. Uhttpd веб-сервер по умолчанию в openwrt может выполнять эти команды напрямую
Я попытался выяснить ту же проблему, и мой вывод пока что — запустить php с правами root. Я знаю, что это небезопасно, но, по крайней мере, это работает. Вот одна линия от /etc/init.d/php5-fpm
запустить php-fpm с правами root:
service_start $PROG -R -y $CONFIG -g $SERVICE_PID_FILE
Флаг ключа здесь:
-R, — разрешено запускать от имени пользователя
Разрешить запуск пула от имени root (по умолчанию отключено)