2

Web ブラウザーで PHP ファイルから次のコマンドを実行しようとしています。

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

残念ながら、何も起こりません。「エコー」を試してみようと思いましたが、コマンドが機能しているかどうかを確認するために戻るものはありません。test.txt のパーミッションを 777 に設定しました。コマンドをシェルで実行したところ、問題なく動作しました。PHP スクリプトによって送信されたときだけではありませんでした。私は何を間違っていますか?

4

3 に答える 3

4

バイナリへのフル パスを指定しfestivalます。コンソールでコマンドを使用して見つけることができますwhich festival。次に、次のように exec 呼び出しで使用します。

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

更新:www-dataファイルを作成しているフォルダーに、通常はdebian ベースのディストリビューションに ある php を実行しているユーザーの書き込み権限があることを確認する必要があります。

于 2012-09-15T01:53:40.740 に答える
1

あなたがやろうとしていることを正しく理解していれば、あなたは入力を返していません。この構文は次のとおりです。

exec('command', $output);

$output は、スクリプトの出力が格納される変数です。implode()奇妙なことに、この出力は配列として返されるため、文字列を期待している場合は、完了時に忘れないでください。

于 2012-09-15T01:56:02.233 に答える
1

プログラムはfestival出力を印刷しますか? もしそうなら、それをキャプチャしてみてください。戻り値も確認してください。

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

次のように、出力配列をダンプします。

var_dump($output);

通常、ゼロ以外の戻り値はエラーを示します。

echo $return;
于 2012-09-15T01:57:44.160 に答える