<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="php(SplFileObject)+ajax导入大数据时产生的问题处理" id="card1">
<p> 游客</p><p>
标题:php(SplFileObject)+ajax导入大数据时产生的问题处理<br/>
正文:<br/>
遇到的问题就从先到后的一一说吧。问题1 按照我最初的想法，先上传文件再读取文件。这里问题就来了，当文件较大的时候上传较慢，导致客户看到的操作一直处于等待状态，不人性化。处理办法：我是这样做的，大神有更好的办法，求介绍。我先把文件上传上去，然后把文件存到一个特定的文件夹就叫 import吧   ，然后返回一个这个文件名字。这样就确保了文件是上传成功的。并且我可以在他返回名字的这一步用js  给客户一个提示。然后就是ajax去请求php读取文件，插入数据库。可是问题来了。问题2 当我用ajax去请求php读取文件并插入数据库的时候，遇到一个问题，就是ajax请求总是在1min的时候，断掉。我一想 ，这应该是php的最大执行时间max_execution_time的原因吧，结果我修改为300秒。还是这样，那我就认为会不会是apache的 最大get时间max_input_time呢，我就在代码加一个 ini_set  结果，用ini_get   查看max_input_time,用ini_set设置无效，还是60秒，在网上查了很多资料，还是不知道为啥。有大神知道的，请给我回复下。菜鸟先谢过了。那没办法，我只能去服务器把php.ini配置修改了。经理说不让修改的，为了测试，偷偷改了--最后修改回来了。修改之后，测试，还是不行。还是到一分钟 就执行超时。真的很纳闷。不知道什么原因。求指教。那没办法。这种办法行不通了，对一个5m的文件只能分行读取了。然后就是对代码的一通修改，分行读取是这样操作的，先ajax请求，然后每次读取2000条  然后对这2000条数据进行处理，插入数据库（文章最后介绍一个好用的分行读取函数）。然后每次ajax执行完，返回一个状态符，和本次读取到的行数，然后下次接着读。知道最后读取完。这中间还遇到一个问题：就是当我对每一行数据进行查重的时候遇到的，是这样的，我对得到的内容进行循环，然后查一下每行是否存在，当我判断$count是否大于0 的时候，当已存在的时候，我用continue，执行下一次循环。但是当我在导入10000条的时候，总是在8000条的时候报错说 服务器内部错误。很闷，不解问什么，结果只能用if  else代替了。纳闷。一个小提醒：插入数据库的时候 不要一条一条的<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1634&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1634&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1634&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1634&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1634&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1634">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1634">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>