2012-09-15 88 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