0

200,000 レコードで PDF を作成する非常に重い PHP コード ファイルがあります。PDF の総ページ数は最大 150,000 になります。ブラウザ経由でコードを実行しようとしましたが、実行できません。シェルを介して実行する必要があると思います-または、誰かが別のアプローチを提案できますか?

4

2 に答える 2

4

PHPスクリプトでシェルを呼び出す場合は、次のようにします。

exec("php path/to/script.php&");

それ以外の場合は、ターミナルからの引用符で何をするかを実行します。

また、php.iniファイルを確認してください。一定時間後にタイムアウトに設定されている可能性があります。それはあなたの問題かもしれません。その場合は、CやC ++などの低水準言語で記述されたプログラムに渡してから、後でPHPに渡す方がよい場合があります。timoutをより高い値に増やすこともできますが、時間がかかりすぎるとサーバーがダウンする可能性があります。

それが完了したときにブラウザで表示したい場合。プロセスのpidを取得できることを確認してから、プロセスのステータスを確認するためのスクリプトを作成してください。完了したら、AJAXに現在のフレームにロードさせます。

アップデート:

このようなもの:

$pid = exec("nohup $command > /dev/null 2>&1 & echo $!");

ここで、コマンドはあなたがやりたいことです。

次に、次のようなjqueryがあります。

<script>
$(document).ready(function()
{
   checkStatus();
});

function checkSatus()
{
   $.get("/path/to/checkStatus.php,{pid: <?php echo $pid;?>},function(){
     if(data.running == 1) alert("PDFS done");
   window.setTimeOut(checkStatus,30000);
}
</script>

次に、他のcheckStatus.phpファイル:

<?php
  $pid = $_GET["pid"];
  $isRunning = file_exists( "/proc/$pid" );
  if($isRunning){
    json_encode(Array("running"=>1));
  }
  else
  {
    json_encode(Array("running"=>0));
  }

*コードの保証はありません。すぐにまとめられました。

于 2012-08-01T16:43:45.300 に答える
0

コメントするには大きすぎると思われるいくつかの考え:

  • この PDF のサイズを小さくすることを検討する必要があります。150,000 ページは PDF には大きすぎます。複数のレポートに分割する
  • これは、専用サーバーのバックグラウンドで作成する必要があります。それを行う方法と頻度は、実行にかかる時間とデータをどれだけ新鮮にする必要があるかによって異なります
  • 前述のように を使用するcronか、RabbitMQ や Gearman などのキュー システムを使用できます。どちらも PHP からアクセスできます。ただし、適切なキュー システムは、単純なスケジュール スクリプトよりも学習曲線が急勾配になります。
  • この質問については、喜んで調査を行う必要があります。あなたの応答は、それを詳しく説明し誰もが解決策を持っていることを示唆しており、完全なコードソリューションがここに書かれていると信じていることを示唆しています-それはStackOverflowの仕組みではありません. あなたの状況の完全な詳細を知っているのはあなただけです。ここにいるさまざまな人々からの指針を取り入れ、追加の調査とともにそれらを適用して、実用的な解決策を得る必要があります.
于 2012-08-01T16:57:02.243 に答える