Ответ 1
попробуйте:
<?php
function sys_cmd($cmd)
{
$hd = popen($cmd,"r") or die('function disabled');
while (!feof($hd))
{
$rs .= fread($hd,1024);
}
pclose($hd);
return $rs;
}
echo sys_cmd('ls -l');
?>
Я пытаюсь запустить команду оболочки text2wave в PHP на сервере nginx.
Проблема заключается в том, что команда просто выходит молча, не работая должным образом. Он также не отображает никаких ошибок.
Здесь код:
<?php
$result = `/usr/bin/text2wave --help`;
var_dump($result);
Если я запустил script через php-команду в оболочке (как обычный пользователь), она работает так, как ожидалось. Однако, если я запустил его через HTTP-запрос через nginx, var_dump возвращает NULL (в журналах ошибок также нет журналов)
Спасибо за вашу помощь!
попробуйте:
<?php
function sys_cmd($cmd)
{
$hd = popen($cmd,"r") or die('function disabled');
while (!feof($hd))
{
$rs .= fread($hd,1024);
}
pclose($hd);
return $rs;
}
echo sys_cmd('ls -l');
?>
Я предполагаю, что вы отключили выполнение оболочки в файле конфигурации php.ini
, используемом вашим веб-сервером.
Попробуйте открыть файл /etc/php5/fpm/php.ini
, найдя директиву disable_functions
и убедившись, что в значении директивы присутствует none: shell_exec,exec,passthru,system
Для кого-то, занимающегося той же проблемой... Мне удалось выяснить, в чем проблема. Ну.. вроде.
Я переключился на apache, и он сразу начал работать. Поэтому решение не использовать nginx
Я предполагаю, что это как-то связано с тем, как nginx запускал php при выполнении команд exec...
Хотя это было трудное решение, я не нашел другого решения, кроме как перейти на apache... теперь хорошо работает