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