3

助けてください。proc_open() を介して Java ファイルを実行する際の問題が何であるかを理解できません。Cプログラムで動作し、1行ごとに出力を取得できたので、この方法で出力ストリームをフェッチしても問題はないと思います:

$ctr = 0;
$score_ctr = 0;
$out2 = "";



    while (!feof($pipes[1])) {

     $out2[$ctr]= fgets($pipes[1]);
     $ctr++;

    }

    fclose($pipes[1]);  

PHP で Java を実行するために、次のコードを使用しています。

拡張子を確認し、java の場合はコンパイルします(同じディレクトリに CLASS ファイルを生成できたので、これは成功しました:

if($ext == "java" || $ext =="JAVA"){ //case for java
        exec('cd \xampp\htdocs\ci_user\uploads & javac '.$file);
}

ここに画像の説明を入力


プログラムを実行するには、

if($ext == "java" || $ext =="JAVA"){ //case for java

    //Removes '.java' extension for cmd
    $name2 = preg_replace("/\\.[^.\\s]{3,4}$/", "", $name);

   //Command to be executed
    $p = 'cd \xampp\htdocs\ci_user\uploads & java '.$name2;


    $process = proc_open($p, $descriptorspec, $pipes);
}

このコマンドを Windows の cmd で実行してみましたが、うまくいきました (Java を実行して "Hello, World" を出力できました)。

cd \xampp\htdocs\ci_user\uploads & java HelloWorld

エラー ログ ファイルに次のエラーが表示されます。

        java.lang.UnsupportedClassVersionError: HelloWorld : Unsupported major.minor version 51.0
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClassCond(Unknown Source)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$000(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
        Could not find the main class: HelloWorld.  Program will exit.

proc_openを介してJavaを実行する際に、PHPが別のJavaソースパスを使用しているかどうかはわかりません。私のウィンドウのコマンドを使用しているため、ライブラリのロードの問題や「バージョン」関連の問題は発生しないと思いました。

ここで何が問題になる可能性がありますか?どうもありがとう!返信をいただければ幸いです。

4

1 に答える 1

0

ああ、神様。このソリューションにたどり着くのを手伝ってくれた Michal Rybak 卿 (@MichalRybak) に感謝します。proc_open() または PHP が使用する Java バージョンを変更する方法がわからないため、Java プログラムをコンパイルし、クラスを下位バージョンと互換性を持たせました。

このコードを変更しました:

exec('cd \xampp\htdocs\ci_user\uploads & javac '.$file);

これに:

exec('cd \xampp\htdocs\ci_user\uploads & javac -source 1.4 -Xlint:-options '.$file);

どうもありがとうございます!!!!!!!!!!この回答にたどり着くのに本当に助かりました。:D

于 2013-09-28T13:53:24.310 に答える