2012-09-15 51 views
2

我试图从在Web浏览器的PHP文件运行以下命令执行任何动作:执行exec()命令不能从一个PHP页面

exec('festival --tts /var/www/test.txt &'); 

不幸的是,没有任何反应。我想尝试'回声',但没有什么可以返回来看看命令是否工作。我将test.txt的权限设置为777.我还在shell中运行了该命令,并且它的工作方式很好 - 只是在PHP脚本提交时没有。我究竟做错了什么?

+0

你确定它没有做任何事情?至少在Ruby和Perl中,你也可以检查进程退出值 - 也就是'$?'。 – Linuxios

回答

4

提供的完整路径festival二进制文件,你可以用which festival命令找到它的控制台上,然后用它在你的exec调用,就像这样:

exec('/usr/bin/festival --tts /var/www/test.txt &'); 

更新: 您需要以确保您创建文件的文件夹具有对运行php的用户的写入权限,该用户通常是基于debian的发行版的www-data

+0

我运行了“哪个节日”,并在“/ usr/bin/festival”中找到它。不幸的是,当我将它添加到PHP文件时,它仍然不运行该命令。某处是否存在权限错误?如果是这样,我该怎么做才能改变它? – Alligator

+0

那么这可能是一个权限问题,这个命令的输出是什么? “ls -ld/var/www”另外,你正在运行哪个linux发行版? – Nelson

+0

它显示为具有该文件夹权限的“root”。 – Alligator

1

如果我正确理解你想要做的事情,你没有返回输入。语法如下:

exec('command', $output); 

其中$ output是脚本输出将被存储的变量。奇怪的是,这个输出将作为一个数组返回,所以当你完成时,如果你期望一个字符串,不要忘记implode()

+0

对不起,我不确定你的意思。这个命令没有输出,只有音频。 – Alligator

1

festival程序是否打印任何输出?如果是这样,尝试捕获。同时检查返回值。

exec('/usr/bin/festival --tts /var/www/test.txt &', $output, $return); 

转储输出数组,像这样:

var_dump($output); 

任何非零返回值通常表示错误:

echo $return; 
+0

不,“节日”命令是一个文本转语音命令。只有音频作为输出。不过,我尝试了你写的东西,这就是返回的内容:array(0){} 0 – Alligator