【问题标题】:Executing a java .jar file with php使用 php 执行 java .jar 文件
【发布时间】:2011-07-02 05:50:47
【问题描述】:

我制作了一个 .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() 错了?

【问题讨论】:

    标签: php exec


    【解决方案1】:

    您不能像在字符串中那样直接使用数组。生成的命令行将是:

    java -jar WaveAppender.jar Array
    

    如果你真正想要的是

    java -jar WaveAppender.jar 1.wav 2.wav 3.wav
    

    那么你需要这样做:

    exec("java -jar WaveAppender.jar " . implode (' ', $theFiles));
    

    【讨论】:

    • 如果你想正确地将参数传递给 Java 的 argv,你需要用空格而不是逗号来内爆。
    • 该代码出现错误。解析错误:语法错误,第 4 行 C:\wamp\www\drum\index.php 中的意外 T_VARIABLE。行是您的 exec() 代码上面给了我。
    • 这里是完整的代码。$theFiles = Array("bass.wav","hihat.wav","output.wav"); exec("java -jar WaveAppender.jar ".implode(',' $theFiles));
    • 使用implode(',', $theFiles)
    • @Zach Rattner:更新了解决该问题的答案。
    【解决方案2】:

    这里有几件事要记住:

    1. 许多托管服务提供商认为exec 是一个危险的函数调用。因此,它可能在您的服务器上不可用。有关检查您的系统是否启用exec 的更多信息,请参阅this discussion

    2. 您的文件存储在一个数组中。鉴于您发布的代码,您实际上是将此字符串传递给exec

      java -jar WaveAppender.jar Array

      要解决此问题,请尝试使用implode 将数组的所有元素连接成一个字符串,如下所示:

      exec('java -jar WaveAppender.jar ' . implode(' ', $theFiles));

      有关implode 的更多信息,请参阅the PHP docs

    3. 记住exec返回一个值,你也可以传入一个数组来填充程序的所有输出。这对于处理 Web 应用程序中的错误很有用。有关exec 的更多信息,请参阅the PHP docs

    【讨论】:

    • 这是在本地主机上,所以它不是 exec() 的问题。感谢您的帮助。
    • 试了上面提到的功能,报1。所以我猜exec()是启用的。
    猜你喜欢
    • 2012-01-01
    • 2012-05-04
    • 1970-01-01
    • 2015-02-24
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多