Команда 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() это когда вы закончите, если вы ожидаете строку.

Другие вопросы по тегам