2014-03-12 8 views
0

У меня есть php-скрипт, где некоторые системные команды работают нормально, а другие нет. Команды, которые не запускаются, могут быть скопированы и вставлены в оболочку и выполняться просто отлично.Системные команды, которые не выполняются в PHP

Система: OSX 10.9.2 (все обновлено).

Я пробовал много разных команд, как показано ниже.

exec(), обратные кавычки, shell_exec(), system(), passthru()

Эта команда отлично работает.

exec("drush si -y --db-url=mysql://user:[email protected]:3306/dbname"); 

Но эти команды не запускаются.

exec("drush sql-sync @remote.staging @dev.anme -y"); 
exec("git ls-remote --heads [email protected]:blablaname/name.git"); 

Команды, которые не запускаются, могут копироваться и вставляться в оболочку и работать отлично. Я убедился, что сценарий запускается в соответствующем каталоге, используя функцию getcwd().

+0

Почему вы думаете, что эти команды «не запускаются»? Любое сообщение об ошибке? В любом случае вы должны внедрять обнаружение ошибок и обработку, чтобы вы знали, что происходит. По крайней мере, вы должны посмотреть файл журнала http-серверов, чтобы прочитать сообщение об ошибке, если эти команды _really_ не выполняются, что я сомневаюсь. – arkascha

+0

Btw: вы уверены, что ваш 'PATH' правильный? Попробуйте использовать абсолютный путь к тем командам, которые вы пытаетесь выполнить. – arkascha

+0

Каково значение 'disable_functions' в вашем php.ini? – m79lkm

ответ

1

Если вы вызываете программу php с exec() из веб-браузера, она выполняется как пользователь www. Таким образом, пользователь www не может иметь привилегии для подключения/синхронизации с удаленным хостом. Вот почему он работает на локальном хосте и не работает на удаленном хосте.

Так один раствор

1) сохранить команду в Баш скрипт
2) установить UID бит (Это может быть корень или пользователь, имеющий достаточную привилегию).
3) выполнить этот скрипт bash от exec, чтобы он выполнялся как предыдущий пользователь.
4) Вы должны ip ограничить свою программу, поскольку setuid опасен.

setuid

Смежные вопросы