2012-01-02 12 views
0

コマンドラインでjavaアプリケーションを実行する小さなPHPスクリプトをローカルに作成しました。このJavaアプリケーションは継続的に実行され、終了しません。実行されると、コマンドラインテキストが出力されます。ここにコードです:実行時にshell_execを出力する

<?php 
    set_time_limit(0); 
    $command = "java -Xms124M -Xmx124M -jar myapp.jar"; 
    $end = " 2>&1"; 
    $in = $command . $end; 
    $out = exec($in); 
    var_dump($out); 
?> 

私の問題は、アプリケーションが決して実行を停止しないため、出力が印刷されないことです。 PHPがアプリケーションの実行中に返される各行を出力する方法はありますか? うまくいけば、私はここで意味をなさない(私がいないかどうか私に知らせる)。

+0

なぜ終了しないと予想されるプロセスを生成していますか?サービスベースのアーキテクチャやクライアント/サーバーアーキテクチャが優れていないのでしょうか? – Kenaniah

+0

'java'タグは関係ありません。長時間実行している言語で書かれたプログラムでも同じ問題が発生します。 –

+0

もしプロセスが終了しなければ、別のスレッドで開く必要がありますが、afaik phpはマルチスレッド機能を持っていません。とにかく、リクエストごとにJVMを開くと、残念ですが、私はあなたのプログラムの新しいインスタンスを開始するために何らかの形のプロセス間通信(IPC)を使うことをお勧めします:http://stackoverflow.com/questions/661546/sending-messages-from-php-to-java。また、サイトを段階的に更新するには、1つのリクエストを待つのではなく、JavaScriptと追加のリクエストを使用する必要があります。編集:よく私は "ローカル"部分、愚かな私を読んでいない – PeterT

答えて

3

passthru関数とpopen関数を参照してください。これらは出力が発生したときに出力を戻すはずです(ただし、パススルーは出力をバッファリングする可能性があります)。

+0

この場合、出力が発生したときにではなく、チャンクで出力を返すことを意味します。 – tplaner

0

解決策の1つは、プロセスをバックグラウンドプロセスとして起動し、出力をファイルにリダイレクトすることです。あなたはPHPで出力ファイルを読むことができますが、あなたのJavaプロセスが決して終わらないことが予想されるので、PHPをそのまま実行してはいけません。より良い解決策は、AJAXポーリングを使用して、PHPが最新の更新を出力ファイルに数秒ごとに返すようにすることです。

関連する問題