1

私はヘルプを検索し、このスレッドですべてを試しましたが、それでもこれを機能させることはできません。shell_exec()を使用して、PHPスクリプトからsox(Sound eXchange)コマンドラインユーティリティを実行しようとしています。2つのオーディオファイルを連結する必要があります。どちらもPHPスクリプトと同じディレクトリにあります(つまり、apacheにアクセスできます)。

混乱は次のとおりです。

  1. 一部のsoxコマンドは、shell_exec()を使用して正常に機能します。たとえば、オーディオファイルを再生したり、オーディオファイルに関する情報を取得したりできます。
  2. 連結コマンドをエコーアウトして(PHPがシェルに送信しているものを正確に把握しているので)、それをコピーしてシェルウィンドウに貼り付けると、完全に実行されます。
  3. 私のapacheユーザー(_www)は、PHPスクリプトがあるディレクトリとsoxディレクトリに対する完全な権限を持っています。両方のディレクトリで「chown-R_www:_www」と「chmod-R777」を実行しました。
  4. sox実行可能ファイルとオーディオファイルへのフルパスを使用しています。

したがって、これはシェルで機能します。

"/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav"

しかし、これはPHPでは機能しません。

shell_exec('/soxpath/sox /filepath/file1.wav /filepath/file2.wav /filepath/combined.wav');

誰かがこれに光を当てることができますか?私は何が欠けていますか?ありがとう。

4

1 に答える 1

0

さて、ようやく機能するようになったので、作成した混乱を解消する必要があると思いました。問題は無関係なものでした。そうです、shell_exec() を使用して PHP から sox コマンドを実行できます。

私は単にjavascriptのタイミングの問題に遭遇していました. wami レコーダーを使用して、クライアント側でオーディオをキャプチャし、オーディオ ファイルをサーバーに保存していました。したがって、私の PHP スクリプトは ajax 呼び出しハンドラーのコンテキストにあり、定義上は非同期です。もっと早くに気付くべきだった。

問題は、連結するsoxコマンドが実行されたときにファイルの保存が完了していなかったため、ファイルがまだ存在しなかったために当然失敗しました。呼び出しを同期にすると、機能しました。

于 2012-03-28T22:56:42.333 に答える