Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8

И снова о php exec() - выполняются не все команды

02.05.2016, 13:46. Показов 5896. Ответов 19
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема такая - работают обычные команды вроде ls или groups но например exec("/usr/bin/aplay /var/www/html/test.wav", $ret, $err) не работает (сразу скажу > /dev/null 2>&1 тоже ставил). Баш скрипты тоже не запускаются, питон не работает, хотя из консоли все запускается без проблем. Функция вообще ничего не возвращает при этом (ну кроме $err == 1 - Catchall for general errors), но кто бы знал в чем проблема. Добавлял уже пользователя www-data и в admin и домашнюю группу - толку никакого. Дистрибутив Raspbian, apache + php 5.6.19.
Ясное дело, что функций exec и system нет в disable_functions, safe_mode = off.

P.S. если путь например к aplay не верный то возникает ошибка 127 - Command not found.
P.P.S. Даже так работает в консоли: php -r 'exec("aplay /var/www/html/test.wav", $a, $b); var_dump($a, $b);'
P.P.P.S exec("bash /home/pi/start.bash", $ret, $err); - вот даже если туда прописать aplay /var/www/html/test.wav не работает, хотя тот же ls в bash вполне себе выполняется...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2016, 13:46
Ответы с готовыми решениями:

Не все SQL команды выполняются
Здравствуйте, я новичок, поэтому вопрос наверное глупый, сильно не ругайтесь(хотя бы не матом :) ) очень долго лазил по форумам, смотрел...

Не все cmd команды выполняются
Привет! Нужно выполнить cmd команду. Сделал простой контроллер, с действием, которое принимает строку и возвращает строку. ...

После вызова процедур не все команды выполняются
Основной код Private Sub CommandButton2_Click() Dim zakaz As Integer Dim time, com, nomz As String zakaz =...

19
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
02.05.2016, 14:18
Цитата Сообщение от VanichFox Посмотреть сообщение
Даже так работает в консоли: php -r 'exec("aplay /var/www/html/test.wav", $a, $b); var_dump($a, $b);'
Так определитесь - работает или нет?
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
02.05.2016, 14:19  [ТС]
В консоли работает. В браузере нет.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
02.05.2016, 15:12
Цитата Сообщение от VanichFox Посмотреть сообщение
В консоли работает. В браузере нет.
PHP "в браузере" и не должно работать. Если php-код запущенный как
Bash
1
php -r 'exec("aplay /var/www/html/test.wav", $a, $b); var_dump($a, $b);'
работает, то значит он правильный. Неважно как именно он запущен.

Браузер обращается к веб-серверу, а не к PHP. Он в свою очередь уже работает с php. Видимо у Вашего веб-сервера нету прав запускать приложения или еще что-то. Тут дело далеко не в PHP. Но Вы не указали ни сервер, ни каким образом он запускается, ни каким образом он обращается к PHP.
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
02.05.2016, 15:20  [ТС]
Естественно php из консоли под другим юзером (pi) работает, а не под data-www. Но тот же пользователь data-www (из под которого апач работает) состоит в группах adm, sudo и pi.
Если пишешь в консоли php -r, то все работает. а если запускаешь скрипт с <?php exec(.... - работает выборочно.
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
04.05.2016, 12:19  [ТС]
В общем так и не разобрался в причине, но работает если добавить в группу sudo и запускать так: exec("sudo -u www-data aplay /var/www/html/test.wav", $a, $b);
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
04.05.2016, 18:54
Цитата Сообщение от VanichFox Посмотреть сообщение
Но тот же пользователь data-www (из под которого апач работает)
Цитата Сообщение от VanichFox Посмотреть сообщение
В общем так и не разобрался в причине
Ну может апач все таки не из под data-www запускался?) или php подключен не как модуль к апачу, а как cgi например...
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
04.05.2016, 18:58  [ТС]
100% из под www-data. собственно exec("whoami", $a, $b); работает - array(1) { [0]=> string(8) "www-data" } int(0). так что я без понятия что за ерунда. Ну да ладно.
0
04.05.2016, 19:16

Не по теме:

ну там еще вторая часть предложения была... второй раз почему то Вы ее игнорируете :)

Цитата Сообщение от pav1uxa Посмотреть сообщение
каким образом он обращается к PHP
Цитата Сообщение от pav1uxa Посмотреть сообщение
или php подключен не как модуль к апачу, а как cgi например...
ну если не важно, значит не важно...

0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
04.05.2016, 19:18  [ТС]
как бы ставилось все очень примитивно sudo apt-get install apache2 php5 mysql-server
да и все равно exec то на 100% от www-data работает.
Скорее всего какая то особенность дистрибутива
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
04.05.2016, 20:11
Цитата Сообщение от VanichFox Посмотреть сообщение
да и все равно exec то на 100% от www-data работает.
Неа... Когда из консоли запускаете как php -r ... это же не www-data... Веб-сервер с php может работать так же, через шлюз, соответственно там другой пользователь будет...
Цитата Сообщение от VanichFox Посмотреть сообщение
sudo apt-get install apache2 php5 mysql-server
Ну так на веб-сервере php-код вообще исполняться не будет Наверняка там было еще что-нибудь вроде libapache2-mod-php5...

Но если как модуль тогда непонятно...
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 8
04.05.2016, 20:19  [ТС]
Когда из консоли запускаете как php -r ... это же не www-data - естественно он от текущего пользователя работает, от pi) говорю же whoami ни кто не отменял. просто до сих пор не понятно почему из под www-data такие извращения.
Но в прочем тему можно закрывать.
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
23.07.2025, 04:40
Если бы была Win, подумал бы на то, что Apache запущен как служба. А запускать надо как приложение. У меня такая беда была. Процесс в диспетчере задач запускается, но GUI не появляется, т.е. софт запущенный работал в фоне. Я голову сломал себе, в чём же беда
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
23.07.2025, 06:56
Цитата Сообщение от Vasek2 Посмотреть сообщение
А запускать надо как приложение.
Нет. Не при каких условиях, кроме разработки. И то... Сервер должен работать как служба\демон, под своим, урезанным в правах, пользователем.

Это просто ты какую-то дичь творишь, которая конфликтует с безопасностью веб-сервера или приложения на PHP.
1
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
23.07.2025, 07:18
Usaga, подробнее про дичь. И всё же "ни при каких условиях" или "кроме разработки"?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
23.07.2025, 07:22
Vasek2, дичь - приложение на PHP запускает локальные бинарники из $PATH, да ещё и звук какой-то в системе воспроизвести пытается, какие-то баш-скрипты, скрипты на питоне.

Мало того, что это плевок в лицо секьюрности, так ещё и попытка решить какие-то проблемы костыльным образом.

Совершенно естественно, что дефолтное поведение веб-сервера и транслятора PHP этому мешали.
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
23.07.2025, 07:24
Usaga, и? У меня крутятся только мои локальные проекты. Что не так с безопасностью?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,306
23.07.2025, 07:27
Vasek2, это общие замечания по очень кривому решению. Я об этом. Доказывать тебе что не так и почему это плохо не вижу смысла. Очевидно, что слышать ничего ты не хочешь. Если тебе норм такое делать, то ладно.

Только вот зачем ты другим советуешь так делать (видел твою тему, где ты делился "опытом") вопрос отдельный.
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
23.07.2025, 07:35
Usaga, много вопросов одинаковых видел, когда искал решение. В вопросах нет такого как "а плохо ли запускать апач как приложение". Вопрос о том, как заставить exec работать в полную силу. Я дал ответ на вопрос. Не пиши мне больше ответы. Это не я тебя не слышу, а ты зачем-то мне ответы строчишь не по теме
0
100 / 70 / 26
Регистрация: 19.12.2014
Сообщений: 332
25.09.2025, 12:52
Если на сервере скрипты выполняются от имени www-data, то нужно в консоли попробовать выполнить указанную команду от этого пользователя ('su www-data'). Скорее всего работать не будет. Возможно имеет значение из какой папки была запущена команда, если, например, этот apply пытается писать в текущую папку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.09.2025, 12:52
Помогаю со студенческими работами здесь

После выполнения определённой команды не выполняются последующие команды
Объясните, пожалуйста, почему может останавливаться выполнение второй и далее комманд? cd C:\Users\alex_iv\Desktop\test_node\ node...

Не выполняются последовательно команды
День добрый. Хочу выполнить последовательно такую команду в консоли: WMIC &amp;&amp; product get name,version Выполняется только WMIC. Что...

Команды выполняются непоследовательно
Привет, специалисты) Не могу разобраться, может кто поопытнее подскажет.. Есть кусок кода: (формируется массив из блоков,...

Не выполняется exec() сложной команды
Задача состоит в том, чтобы посредством Runtime.getRuntime().exec() получить результат выполнения команды консоли в Windows: arp -a |...

Почему команды не выполняются последовательно?
Добрый день. Есть такая задача, сделать чтобы вот этот код работал в одном bat файле C:\Users\User\Downloads\winscp556\winscp...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru