Запуск команд оболочки из PHP - с правами root или sudo - PullRequest
1 голос
/ 07 октября 2011

Я объясню, что я пытаюсь сделать, потому что у кого-то может быть гораздо лучший и совершенно другой подход к этому.

Я пытаюсь установить FFMPEG, но не просто установить его, я делаю автоматический установщик, который устанавливает некоторые сценарии PHP, а также FFMPEG, если он еще не установлен.

Я не могу найти никаких автоматизированных PHP-скриптов, которые могут установить FFMPEG, поэтому я предполагаю, что это сложнее, чем я думал.

У меня было 3 варианта сделать это:

  • Сборка из исходного кода на сервере с использованием функции exec, эта требуются права суперпользователя.
  • Найти предварительно скомпилированный бинарный файл FFMPEG, легко сделать, и я сделал это, но потом я понял, что у него не было правильных кодеков, поэтому он не работал.
  • Используйте YUM или APT-GET для установки FFMPEG, это было бы здорово, но это требуются права суперпользователя.

Итак, как я могу:

Используйте YUM / APT-GET из PHP и установите sudo

OR

Установите кодеки для FFMPEG после его компиляции. Используя предварительно скомпилированные двоичные файлы, которые я обнаружил, если бы это было возможно, я мог бы просто установить отсутствующие кодеки (я думаю, что это был хромой mp3. Может быть, и другие). Или кодеки должны быть встроены в двоичный файл.

Я думаю, что предпочтительным вариантом является использование YUM / APT-GET, так как мои цели в основном Centos 5 и, возможно, Ubuntu, а также.

Ответы [ 2 ]

0 голосов
/ 18 мая 2016

Если вы в конечном итоге компилируете из исходного кода или устанавливаете из репозитория, вы можете обрабатывать процессы установки через этот проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash. Получите это здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('yum -y install FFMPEG');
//the return will be a string containing the return of the command
echo $return1;

Вам потребуется разобраться с крайними случаями, когда, например, существует ключ GPG, который необходимо принять, или зависимости конфликтуют. Но проект позволяет вам писать сценарии взаимодействия с Bash.

0 голосов
/ 08 октября 2011

sudo в php намного проще, если вы используете SSH.Среди прочего вы можете использовать функцию «ожидать» для ожидания соответствующих подсказок.Если есть способ сделать это с помощью встроенного exec () или system (), я не знаю об этом.

...