现在我在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');
?>
前20k记录更新得很好,但在完成之前我得到504 Gateway Time-out
。
我已经尝试将nginx服务器超时增加到一些荒谬的东西(比如10分钟),但我仍然得到错误。
如何才能使不超时。我已经阅读了许多答案和HOW-TO来分割更新,但我继续得到服务器超时。 PHP
或CodeIgniter解决方案非常好,我需要将此代码部署到可能未使用nginx
的多个服务器(Apache中的类似错误)。
提前致谢。
答案 0 :(得分:3)
您可能需要通过命令行和set_time_limit(0)
运行此操作。如果你在codeigniter中,请查看如何通过用户指南运行命令行。 http://codeigniter.com/user_guide/general/cli.html
现在,在你这样做之前,你提到你正在使用数组块。如果您从数据库中获取所有值,则无需使用array_chunk
。例如,设置一个get变量。
/ your / url?offset = 1000,当完成时,重定向到同一个东西,但是用2000等等直到它完成。
不是最好或最干净的,但可能会完成它。