クライアントがレポートをダウンロードするためのWebフロントエンドを作成しています。同社が使用しているプログラムはJavaで記述されており、31個のmysqlテーブルで構成されており、必要な4つのレポートにはそれぞれ140ポイントを超えるデータが含まれています。PHPでWebサイトを作成し、Javaでレポートジェネレーターを作成していますが、メモリ内のPDFをクライアントのブラウザーに直接ロードする方法に関する情報を見つけるのに問題があります。JavaからPHPに移行するTCPクライアント/サーバーを使用することを考えましたが、サーバードライブに書き込んでリンクとして提供する必要がないようにコーディングするにはどうすればよいですか。また、私はPHPを初めて使用するため、17,000行のJavaをPHPに書き直したくありません。これを行う方法はありますか?前もって感謝します。
質問する
94 次
2 に答える
1
Javaアプリの実行にかかる時間に応じてproc_open
、Javaプログラムへのパイプの作成に使用することを検討できます。
<?php
$desc = array(array('pipe','r'),array('pipe','w'));
$resource= proc_open('bash',$desc,$pipes);
if (!is_resource($resource))
{
throw new Exception('PDF stream creation failed');
}
usleep(5);//for safety
fwrite($pipes[0],'java mkPDF paras'."\n");//double quoted \n is crucial
fclose($pipes[0]);
usleep(100);//while java app is running;
$pdf = stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($resource);
?>
これは単なる基本的な例であり、ストリーミングされたpdfを1つの大きな塊にまとめているため、完璧にはほど遠いです。-IMO-が調べる必要があるのは、whileループを使用してストリームをチャンクで取得することです。phpのmanページには、基本的に、この例がいくつか含まれています。
usleep(100);//while java app is running;
$pdf = stream_get_contents($pipes[1]);
と:
usleep(10);//while java app is running;
$pdf = '';
while (($pdfBuff = fgets($pipes[1],1024)) !== null)
{
$pdf.=$pdfBuff;//or echo, or whatever
}
fclose($pipes[1]);
後者はテストされていないので、それがあなたの場合にうまくいくかどうかはわかりません...しかし、あなたはアイデアを得る
于 2012-05-14T08:33:48.307 に答える