Команда Exec() в Linux не выполняет никаких действий со страницы PHP
Я пытаюсь запустить следующую команду из файла PHP в веб-браузере:
exec('festival --tts /var/www/test.txt &');
К сожалению, ничего не происходит. Я думал о попытке "эхо", но мне нечего возвращаться, чтобы посмотреть, работает ли команда. Я установил разрешения для test.txt на 777. Я также запустил команду в оболочке, и она работает просто отлично - только не при представлении сценария PHP. Что я делаю неправильно?
3 ответа
Укажите полный путь к festival
двоичный файл, вы можете найти его на консоли which festival
команду, затем используйте ее в вашем вызове exec, например так:
exec('/usr/bin/festival --tts /var/www/test.txt &');
Обновление: вам нужно убедиться, что папка, в которой вы создаете файл, имеет разрешение на запись для пользователя, запускающего php, который обычно www-data
на дистрибутивах, основанных на Debian.
Ли festival
программа распечатать любой вывод? Если так, попробуйте захватить это. Также проверьте возвращаемое значение.
exec('/usr/bin/festival --tts /var/www/test.txt &', $output, $return);
Дамп выходного массива выглядит так:
var_dump($output);
Любое ненулевое возвращаемое значение обычно указывает на ошибку:
echo $return;
Если я правильно понимаю, что вы пытаетесь сделать, вы не возвращаете ввод. Синтаксис для этого:
exec('command', $output);
где $ output - переменная, в которой будет сохранен вывод скрипта. Как ни странно, этот вывод будет возвращен в виде массива, поэтому не забудьте implode()
это когда вы закончите, если вы ожидаете строку.