Вызов bash с помощью PHP shell_exec - медленно - PullRequest
1 голос
/ 18 ноября 2009

Я использую функцию PHP shell_exec для вызова скрипта bash на моем сервере.

shell_exec("bash -x /tesladata/isetools/0-extractbytickerforweb.bash $ticker $isedate > /t24alv2/iseoutput/$ticker-$isedate-$thistime.log &");

Теперь у меня ранее была команда, запускаемая из сценария CGI ("bash -x ..."), и она была намного быстрее (мгновенно). Теперь для запуска скрипта требуется мучительно медленное время (> 10 секунд) и для отображения полученной страницы.

Есть идеи, почему это так медленно? Я все еще хотел бы запустить скрипт bash из PHP, а не из CGI, поскольку весь мой сайт конвертируется в PHP. Возможно, другая функция больше подходит? Любые идеи будут оценены.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2009

Вы можете взглянуть на функции PHP exec и system , однако я не вижу причины, по которой они могли бы ускорить выполнение скрипта, стоит попробовать хоть. Я почти уверен, что это проблема apache (при условии, что вы используете apache), а не PHP, источником этого вывода является этот поток ошибок .

Кроме того, вы действительно должны быть чрезвычайно осторожны при использовании этих команд на общедоступном веб-сайте. Используйте escapeshellarg и escapeshellcmd .

3 голосов
/ 03 декабря 2009

Для пользователей Windows, использующих Apache в качестве службы NT : кажется, что вы можете значительно улучшить производительность shell_exec () или exec (), настроив службу Apache для запуска с учетной записью пользователя и не системная учетная запись по умолчанию .

Например, я обнаружил, что запуск Apache в качестве стандартной службы NT приводит к тому, что команды shell_exec () занимают 15-17 секунд (в частности, запуск команд svn). Изменение службы Apache для запуска с учетной записью пользователя привело к сокращению времени до 4-5 секунд - огромная разница .

Для этого откройте панель управления службой, щелкните правой кнопкой мыши службу Apache и выберите «Свойства». Перейдите на вкладку «Вход в систему» ​​и установите переключатель «Локальная системная учетная запись» на «Эта учетная запись». Затем укажите, какую учетную запись вы хотите использовать для службы.

Обратите внимание, что я не гуру администратора Windows; запуск службы с учетной записью пользователя может иметь важные последствия, о которых я не знаю.

...