【问题标题】:Execute a Java Application from Php从 PHP 执行 Java 应用程序
【发布时间】:2016-12-15 10:09:47
【问题描述】:

嗨朋友们,我必须从 php 脚本执行 java 应用程序,因为我已将 jre 文件夹文件移动到 xammp 文件夹并设置文件夹的路径。

我已经使用像

这样的示例 java 程序进行了测试

PHP 脚本:

<?php
 $JAVA_HOME = "\jre1.8.0_60";
 $PATH = "$JAVA_HOME/bin:".getenv('PATH');
 putenv("JAVA_HOME=$JAVA_HOME");
 putenv("PATH=$PATH");
 //enter rest of the code here
 shell_exec("java  HelloWorld.java  2>&1");
 $OUTPUT = shell_exec("java  HelloWorld 2>&1");
 echo $OUTPUT;
 ?>

如果我通过 PHP 执行文件,我已将 java 文件放在“C:\xampp\htdocs\java_bridge\”中,结果将被执行。

HelloWorld.java:

public class HelloWorld {
public static void main(String[] args) {
    // Prints "Hello, World" to the terminal window.
    System.out.println("Hello, World");
}
}

输出:

你好,世界

ExtractPagesFromPdfAndSaveAsNewPDFPage.java :

    import java.io.File;
    import java.util.List;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;

    /**
     * 
     * @author udaykiran.pulipati
     *
     */

    @SuppressWarnings("unchecked")
    public class ExtractPagesFromPdfAndSaveAsNewPDFPage {
        public static void main(String[] args) {
            try {

    //            String sourceDir = "C:\\Users\\user1\\Desktop\\java_pdf_split\\scan.pdf";
    String sourceDir = "C:\\Users\\user1\\Desktop\\java_pdf_split\\scan.pdf";
        String destinationDir = "C:/PDFCopy/";
        File oldFile = new File(sourceDir);

        String fileName = oldFile.getName().replace(".pdf", "");
        System.out.println("New Filename: "  + fileName);
        System.out.println("Old Filename: "  + oldFile.getName());
        if (oldFile.exists()) {
            File newFile = new File(destinationDir);
            if (!newFile.exists()) {
                newFile.mkdir();
        } 

        PDDocument document = PDDocument.load(sourceDir);
        List<PDPage> list = document.getDocumentCatalog().getAllPages();

        int pageNumber = 1;
        for (PDPage page : list) {
            PDDocument newDocument = new PDDocument();
            newDocument.addPage(page);

            newFile = new File(destinationDir + fileName + "_"+ pageNumber +".pdf");
            newFile.createNewFile();

            newDocument.save(newFile);
            newDocument.close();
            pageNumber++;
            }
        } else {
            System.err.println(fileName +" File not exists");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

但是现在我必须执行一个名为 Java application1 的 java 应用程序,因为如果我必须执行这个,我有一个名为“ExtractPagesFromPdfAndSaveAsNewPDFPage”的 java 文件,我应该如何给出 exec 路径(“”);

我的应用路径是“C:\xampp\htdocs\java_bridge\JavaApplication1\src”;

我的类文件路径是“C:\xampp\htdocs\java_bridge\JavaApplication1\build\classes”;

如果我运行

shell_exec("javac  \JavaApplication1\src\ExtractPagesFromPdfAndSaveAsNewPDFPage.java  2>&1");
$OUTPUT = shell_exec("java \JavaApplication1\build\classes\ExtractPagesFromPdfAndSaveAsNewPDFPage 2>&1");

它将输出返回为 错误:

错误:无法找到或加载主类 \JavaApplication1\build\classes\ExtractPagesFromPdfAndSaveAsNewPDFPage

请任何人告诉我如何通过 php 脚本执行 java 应用程序。

提前致谢。

【问题讨论】:

  • 验证你的java类的路径。为什么不放完整的java类路径?
  • @Sonor:我已经给出了类 shell_exec("javac C:\\xampp\\htdocs\\java_bridge\\JavaApplication1\\src\ExtractPagesFromPdfAndSaveAsNewPDFPage.java 2>&1"); 的完整路径。 $OUTPUT = shell_exec("java C:\\xampp\\htdocs\\java_bridge\\JavaApplication1\\build\\classes\\ExtractPagesFromPdfAndSaveAsNewPDFPage 2>&1");回声$输出;但仍然出现同样的问题

标签: java php shell-exec


【解决方案1】:

也可以使用PHP的exec方法

编译:

<?php exec("javac C:\fakepath\file.java", $output); ?>

用于执行:

<?php exec("java C:\fakepath\file arguments", $output); ?>

用于执行 jar 文件:

<?php exec("java -jar C:\fakepath\file.jar arguments", $output); ?>

【讨论】:

  • 相同结果“错误:无法找到或加载主类”
  • 你如何编译你的类?验证您的路径中有一个 .class 文件
  • 是的,我在路径 C:\xampp\htdocs\java_bridge\JavaApplication1\build\classes 有一个名为 ExtractPagesFromPdfAndSaveAsNewPDFPage.class 的类文件
猜你喜欢
  • 2013-08-14
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
相关资源
最近更新 更多