我创建了一个将两个wave文件连接在一起的.jar文件。我用命令提示符调用它。就像这样。
java -jar WaveAppender.jar 1.wav 2.wav out.wav
我正在尝试使用php来执行此.jar文件,但下面的代码似乎不起作用
$theFiles = Array("1.wav","2.wav","output.wav");
exec("java -jar WaveAppender.jar $theFiles");
我没有收到任何错误,但是没有写出out.wav。
我是否错误地调用了exec()?
答案 0 :(得分:4)
您不能在字符串中直接使用数组。生成的结果命令行将是:
java -jar WaveAppender.jar Array
如果您真正想要的是
java -jar WaveAppender.jar 1.wav 2.wav 3.wav
然后你需要这样做:
exec("java -jar WaveAppender.jar " . implode (' ', $theFiles));
答案 1 :(得分:3)
这里有几点需要注意:
许多托管服务提供商认为exec
是一个危险的函数调用。因此,它可能无法在您的服务器上使用。有关检查系统是否已启用exec
的详细信息,请参阅this discussion。
您的文件存储在一个数组中。鉴于您发布的代码,您实际上是将此字符串传递给exec
:
java -jar WaveAppender.jar Array
要解决此问题,请尝试使用implode
将数组的所有元素连接成一个字符串,如下所示:
exec('java -jar WaveAppender.jar ' . implode(' ', $theFiles));
有关implode
的详细信息,请参阅the PHP docs。
请记住exec
返回一个值,您还可以传入一个数组以填充程序的所有输出。这对于处理Web应用程序中的错误很有用。有关exec
的详细信息,请参阅the PHP docs。