0

現在、CodeIgniter モデルには次のようなものがあります。

<?php 
$array = array(...over 29k IDs...);
$update = array();
foreach ($array as $line) {
   $update[] = array('id' => $line, 'spintax' => $this->SpinTax($string));
   ### $this->SpinTax parses the spintax from a string I have. It has to be generated for each row.
}
$this->db->update_batch('table', $update, 'id');
?>

最初の 20,000 レコードは問題なく更新されますが、504 Gateway Time-out完了する前にエラーが発生します。

nginx サーバーのタイムアウトをとんでもない値 (10 分など) に増やしてみましたが、それでもエラーが発生します。

これをタイムアウトにしないようにするにはどうすればよいですか。更新を分割するために多くの回答と HOW-TO を読みましたが、引き続きサーバーのタイムアウトが発生します。または CodeIgniter ソリューションが優れているPHPため、このコードを使用していない可能性のある複数のサーバーに展開する必要がありますnginx(Apache での同様のエラー)。

前もって感謝します。

4

1 に答える 1

3

これは、コマンド ラインとset_time_limit(0). codeigniter を使用している場合は、ユーザー ガイドでコマンド ラインを実行する方法を確認してください。http://codeigniter.com/user_guide/general/cli.html

さて、それを行う前に、配列チャンクを使用していると述べました。データベースからすべての値を取得している場合は、を使用する必要はありませんarray_chunk。たとえば、get 変数を設定するだけです。/your/url?offset=1000、それが終了したら、同じものにリダイレクトしますが、終了するまで 2000 などでリダイレクトします。

最もきれいでもきれいでもありませんが、おそらくそれを成し遂げるでしょう。

于 2012-09-13T22:59:28.703 に答える