Can';t通过PHP shell_exec运行sox命令

Can';t通过PHP shell_exec运行sox命令,php,sox,command-line-tool,Php,Sox,Command Line Tool,我已经寻求帮助并尝试了一切,但仍然无法成功。我正在尝试使用shell_exec()从PHP脚本运行sox(声音交换)命令行实用程序。我需要连接两个音频文件,这两个文件与PHP脚本位于同一目录中(即apache可以访问) 以下是困惑: 某些sox命令使用shell_exec()可以正常工作。例如,我可以播放音频文件或检索有关它的信息 如果我回显concatenation命令(这样我就可以确切地知道PHP发送给shell的是什么),然后将其复制并粘贴到shell窗口中,它就会运行得很好 我的apac

我已经寻求帮助并尝试了一切,但仍然无法成功。我正在尝试使用shell_exec()从PHP脚本运行sox(声音交换)命令行实用程序。我需要连接两个音频文件,这两个文件与PHP脚本位于同一目录中(即apache可以访问)

以下是困惑:

  • 某些sox命令使用shell_exec()可以正常工作。例如,我可以播放音频文件或检索有关它的信息
  • 如果我回显concatenation命令(这样我就可以确切地知道PHP发送给shell的是什么),然后将其复制并粘贴到shell窗口中,它就会运行得很好
  • 我的apache用户(_www)拥有PHP脚本所在目录以及sox目录的完整权限。我在两个目录上都运行了“chown-R\uwww:\uwww”和“chmod-r777”
  • 我正在使用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');
    

    有人能解释一下吗?我错过了什么?谢谢。

    好的,我终于让它工作了,所以我想我应该澄清我造成的任何困惑。这个问题是无关的。因此,可以使用shell_exec()从PHP运行sox命令

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


    问题是,在运行要连接的sox命令时,没有保存该文件,因此它自然会失败,因为该文件还不存在。当我打电话时,它起作用了

    shell_exec()返回什么?/soxpath/sox????是完整路径还是示例…shell_exec()返回NULL。“/soxpath/”只是实际完整路径的占位符。在我的例子中是“/bin/sox-14.4.0/”怎么样:shell_exec('/soxpath/sox/filepath/file1.wav/filepath/file2.wav/filepath/combined.wav>file.txt');创建file.txt的file.txt?中出现任何内容,但它是一个空文件(大小为0字节),shell_exec()仍返回NULL。