2012-04-24 7 views
3

実行中のコンソールプログラム(好ましくはLinux/Debian上で動作している)とPHPを介して通信する方法があるかどうかを知りたいと思います。私は現在、少し(既存の)コンソールJavaプログラム用のWebインターフェイスを作成しようとしており、これを実行できる方法があるかどうかはわかりません。コードを「注入」して、リモートコントロールモジュールと言えば、これを使ってPHP経由でスクリプトを「リモートコントロールする」ことができますか? (既存の.jarファイルを変更しないでください。単に注入して再プログラミングしないといいでしょう)PHPで実行中のアプリケーションとのインターフェースですか?

すべてのアドバイスに感謝します! PHPを実行しているユーザーはもちろんのJavaバイナリへのアクセス権を持っていると仮定すると

$output = system("java com.yourcompany.package.RunnableClass"); 
print $output; 

:Javaプログラムだけで動作し、出力がコンソールにした場合

+0

外部プログラムを実行しますか?またはプログラムのようなデーモンと通信できますか? – Jarry

答えて

1

、あなたは、簡単に十分にこのような何かを行うことができますJARファイルにアクセスする権限があることを確認してください。

実行中のプログラムへのアクセスはもう少し難しいです。ほとんどのプログラムでは、デフォルトではこれが組み込まれていません(また、多くの場合、ランダムな外部プロセスにアクセスすることは望ましくありません)。それがしても、あなたは良い形になっています。そうでなければ、Javaコードを変更することができます。そうでなければ、あなたは運が悪いかもしれません。

これが当てはまる場合は、Javaコードがどのリソースにアクセスしているか、どのようにリソースにアクセスしているのかを確認することもできます。次に、PHPで同様のことを書くことができます。明らかにこれは理想的ではありませんが、ホイールを再発明することになりますが、データにアクセスする必要がある場合やそれが何であっても、上記の方法を使用できない場合は機能します。

+0

私のアプローチは、実行中のプログラムとインターフェースをとることで、インターネットを介して実行中の "デーモン"(そういうものを呼びたい場合)を管理することができました。私はもう少しJavaで「コードインジェクション」を調べると思います。私の質問を完全にクリアするこの話題があれば、皆さんにお伝えします。迅速な回答ありがとう! –

+0

「コードインジェクション」は通常、特定の種類のエクスプロイトを参照するために使用されるため、優れた検索用語にはなりません。 jarをリバースエンジニアリングする方が良いでしょう(ソースにアクセスできない場合)。 – lynks

3

実行中のプログラムに通信インターフェイスがない場合は、通信できません。しかし、その場合、答えはプログラムが外部入力を受け取る方法に大きく依存します。

プログラムにネットワークリスニングスレッド(デーモン)が含まれている場合は、CURLまたはPHPのrawソケットを使用してループバックインターフェイス上で通信できます。

プログラムと通信する他の方法は、ファイルへのアクセスを共有することです(PHPはファイルに書き込み、Javaはファイルを読み込みます)。またはデータベース経由で共有します。

データベースは最良のオプションです。スレッドセーフであり、PHPとJavaの両方が優れたMySQLサポート(JDBC経由のJava)を持っています。

実行中のプログラムと実際にインターフェイスする必要はありませんが、単に起動/停止/再起動するだけであれば、PHPのsystem()関数で実行できます。

関連する問題