重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
php处理数据时会有一个等待时间,就是所说的超时时间,而且如果使用mysql的话,它也有一个超时时间,运行一串代码时间如果超过配置文件的时间,会被中断不运行。第一种你可以修改php配置文件timeout的运行时间,第二你可以分批处理大量数据,注意是分批处理,就OK了。
创新互联主营肃南裕固族自治网站建设的网络公司,主营网站建设方案,成都App制作,肃南裕固族自治h5成都微信小程序搭建,肃南裕固族自治网站营销推广欢迎肃南裕固族自治等地区企业咨询
这个需要配合js,打开一个html页面,首先js用ajax请求页面,返回第一个页面信息确定处理完毕(ajax有强制同步功能),ajax再访问第二个页面。(或者根据服务器状况,你可以同时提交几个URL,跑几个相同的页面)
参数可以由js产生并传递url,php后台页面根据URL抓页面。然后ajax通过php,在数据库或者是哪里设一个标量,标明检测到哪里。由于前台的html页面执行多少时候都没问题,这样php的内存限制和执行时间限制就解决了。
因为不会浪费大量的资源用一个页面来跑一个瞬间500次的for循环了。(你的500次for循环死了原因可能是获取的数据太多,大过了php限制的内存)
不过印象中curl好像也有强制同步的选项,就是等待一个抓取后再执行下一步。但是这个500次都是用一个页面线程处理,也就是说肯定会远远大于30秒的默认执行时间。
在curl_close($curl);前面加上$error = curl_error($curl);
然后打印看看有没有报错信息。
另外可以在当前文件最前面加入
ini_set('display_errors','on');
error_reporting(E_ALL);
看看运行有没有什么错误提示。
大概是 odbc_exec 的兼容性问题 , 我使用 mysqli 局没有这个现象 以前用adodb 也处理过 30万以上的记录..
?php
require_once('php/json/mysqli_dbset.php');
/* $valstr="";
for ( $i=1;$i120000;$i++){
$valstr.="(0,'name".$i."'),";
}
$valstr.="(0,'name120000')";
$sql_str="insert into tttt values $valstr";
$rs=$mysqli-query($sql_str);
echo "insert ok"; */
$sql_str="select * from tttt";
$rs=$mysqli-query($sql_str);
while($row = $rs-fetch_array(MYSQL_ASSOC)){
echo $row['iname'].'/br';
}
?