无法通过PHP shell_exec运行sox命令

时间:2012-03-21 22:33:20

标签: php sox command-line-tool

我已经搜索过帮助并尝试了this thread上的所有内容,但仍无法使其正常运行。我正在尝试使用shell_exec()从我的PHP脚本运行sox(Sound eXchange)命令行实用程序。我需要连接两个音频文件,这两个文件都与PHP脚本位于同一目录中(即可以访问apache)。

这是混乱:

  1. 使用shell_exec()可以正常使用某些sox命令。例如,我可以播放音频文件或检索有关它的信息。
  2. 如果我回显出连接命令(所以我确切知道PHP发送到shell的内容),然后将其复制并粘贴到shell窗口中,它就能完美运行。
  3. 我的apache用户(_www)拥有PHP脚本所在目录的完整权限,以及sox目录。我在两个目录上都运行了“chown -R _www:_www”和“chmod -R 777”。
  4. 我正在使用sox可执行文件和音频文件的完整路径。
  5. 所以这适用于shell:

    "/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');
    

    有人可以对此有所了解吗?我错过了什么?感谢。

1 个答案:

答案 0 :(得分:0)

好的,我最终得到了它,所以我想我应该清除我创造的任何困惑。问题是无关紧要的。所以,是的,您可以使用shell_exec()从PHP运行sox命令。

我只是遇到了javascript的计时问题。我使用wami recorder在客户端捕获音频,然后将音频文件保存在服务器上。所以我的PHP脚本是在ajax调用处理程序的上下文中,根据定义它是异步的。应该早点意识到。

问题是当运行连接的sox命令时文件没有保存,所以自然它失败了因为文件还不存在。当我使呼叫同步时它起作用了。