我已经购买了共享主机,他们已经为php文件执行设置了30秒限制。我的脚本使用 CRON 运行,执行时间可能超过30秒。
基本上在我的脚本中有一个foreach循环,用于向DB添加条目。
foreach( $items as $item ) {
// prepare pdo query etc.
$db->execute();
}
有什么方法可以省略限制吗? 比如在20秒后暂停循环,然后重新运行或者......?/ / p>
我无法使用set_time_limit()
btw。
CRON作业每天只运行一次。
答案 0 :(得分:0)
在您的php脚本中,添加此行
ini_set ('max _ execution_time', -1);
当然,只有托管服务器允许时才有效。
答案 1 :(得分:0)
您可以做的是检查脚本在每次迭代中运行的时间,以及何时关闭最长执行时间,保存您处理的最后一条记录。然后在下一次运行中赶上并开始该特定记录。它应该是这样的:
// place this at the very start of your script.
$start_time = microtime(true); // true is important, otherwise it'll return a string.
$max_execution_time = ini_get('max_execution_time');
// logic to retrieve the records, take the last processed record into account
// so in your query do something like WHERE id > last_record_processed
foreach( $items as $item ) {
// do something interesting with the item
$current_time = microtime(true);
if( ( $current_time - $start_time) > ( $max_execution_time - 5) ) {
$last_record_processed = $item;
// store the id or whatever somewhere;
break;
}
}
您必须自己弄清楚存储最后处理记录的最佳方式是什么,您想要构建的安全边际(现在:5秒)等等。
为了实现这一目标,你每小时都要运行一次cron,或者甚至更常规。否则,它每天都会处理您的部分记录。但是,您应首先检查它是否继续当前批次,或者必须重新开始(这应该只在一天过去时才会发生)。