2016-06-30 7 views
2

私はLinuxサーバー(Debian)を持っています。ディレクトリ(reza)にJavaプログラム(コンパイル済み)があります。私はこのJavaプログラムを/ var/wwwからPHPスクリプトを通して実行しようとしています。別のディレクトリからPHPをjavaから実行

$com=shell_exec('java /reza/z'); 

上記の形式で呼び出すと、結果が返されたりjavaプログラムが実行されたりします。私は同じコール形式のレザフォルダ内の1つのPHPスクリプトを呼び出すと それが正しい応答を返します:

$com=shell_exec('php /reza/a.php'); 

これはcorrectlly動作するようにする方法任意のアイデア?

P.S. phpから同じディレクトリのjavaを呼び出すと、正しい応答を返します:

$com=shell_exec('java z'); 

Javaファイルがコンパイルされ、クラスファイルも含まれています。

Javaサンプル・コードは:

import java.io.*; 

public class z{ 

    public static void main(String args[])throws IOException{ 

     File file = new File("Hello1.txt"); 
     // creates the file 
     file.createNewFile(); 
     // creates a FileWriter Object 
     FileWriter writer = new FileWriter(file); 
     // Writes the content to the file 
     writer.write("This\n is\n an\n example\n"); 
     writer.flush(); 
     writer.close(); 

     //Creates a FileReader Object 
     FileReader fr = new FileReader(file); 
     char [] a = new char[50]; 
     fr.read(a); // reads the content to the array 
     for(char c : a) 
      System.out.print(c); //prints the characters one by one 
     fr.close(); 
    } 
} 

よろしく、

最後に、これを解決しました。ターゲットフォルダのパーミッションを変更し、 "書き込み"も有効にする必要があります。私を助けてくれてありがとう。

+0

あなたのサーバーのログを確認しましたか? –

+0

はい、サーバーにエラーはありません。 –

答えて

0

は、クラスパスのスイッチを使用します。

$com=shell_exec('java -cp /reza z'); 
+0

これを試してみましたが、うまくいきませんでしたが、これを返してください:$ com = shell_exec( 'java z'); –

+0

zクラスにパッケージ識別子がありますか? –

+0

私は単純なコードを使って1つの文字列だけを返します。 –

0

コマンドのJava executible(たとえば、/ usr/bin/javaの)への完全なパスを入れてください。引数でクラスパスなどを設定する必要があるかもしれません。あなたの個人ログインではなく、WebサーバーユーザーのコンテキストでJavaが実行されていることを覚えておいてください。JRE_HOME、PATHなど、同じ変数で環境変数が定義されていない可能性があります。

shell exec envコマンドを使用して、使用可能な環境変数をphpで表示します。私はphpinfo()があなたに同じ情報を与えると思います。

+0

エラーが見つかりました。スレッド "main"の例外java.io.IOException:java.io.UnixFileSystem.createFileExclusively(ネイティブメソッド)でjava.io.File.createNewFile(File.java:1006)のアクセスが拒否されました。z.main z.java:9) –

関連する問題