1

我已经寻求帮助并尝试了这个线程上的所有内容,但仍然无法完成这项工作。我正在尝试使用 shell_exec() 从我的 PHP 脚本中运行 sox (Sound eXchange) 命令行实用程序。我需要连接两个音频文件,它们都与 PHP 脚本位于同一目录中(即 apache 可以访问)。

这是混乱:

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

所以这在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');

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

4

1 回答 1

0

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

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

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

于 2012-03-28T22:56:42.333 回答