Как изменить оболочку, которая используется с shell_exec в PHP? - PullRequest
0 голосов
/ 07 августа 2011

Я использую Windows, и я хотел бы настроить PHP так, чтобы использовать оболочку bash (установлена ​​на моей машине благодаря msysgit ). Причина в том, что у меня Windows на моей машине разработки и Linux на рабочей машине.

Спасибо!

1 Ответ

4 голосов
/ 07 августа 2011

Вы не можете. Но вы можете запустить собственную оболочку, например c:\mingw\bin\sh -c 'set'. Это потребует Mingw на вашей машине, конечно.

При использовании Cygwin это будет:

shell_exec("C:\cygwin\bin\bash.exe --login  -c '/cygdrive/c/cygwin/bin/convert.exe --version'");

Существует ограничение на длину командной строки, поэтому я бы не рекомендовал помещать туда сам скрипт, если он больше, чем просто строка. Параметры сразу после имени интерпретатора сценария оболочки предназначены для интерпретатора. Если вы хотите передать аргументы в скрипт, который выполняет интерпретатор, он должен быть внутри кавычек, то есть сразу после «.exe» в примере преобразования.

Вы также можете передать сценарий интерпретатору сценария оболочки. Таким образом, вам не нужно будет записывать его в файл, и вы все равно сможете использовать длинный скрипт.

т.е:.

$ echo "echo 'Hello world';" | sh
Hello world

См. http://php.net/manual/en/function.proc-open.php о том, как использовать каналы в PHP.

...