遇到的问题就从先到后的一一说吧。 问题1 按照我最初的想法,先上传文件再读取文件。这里问题就来了,当文件较大的时候上传较慢,导致客户看到的操作一直处于等待状态,不人性化。 处理办法:我是这样做的,大神有更好的办法,求介绍。我先把文件上传上去,然后把文件存到一个特定的文件夹就叫 import吧 ,然后返回一个这个文件名字。这样就确保了文件是上传成功的。并且我可以在他返回名字的这一步用js 给客户一个提示。然后就是ajax去请求php读取文件,插入数据库。可是问题来了。 问题2 当我用ajax去请求php读取文件并插入数据库的时候,遇到一个问题,就是ajax请求总是在1min的时候,断掉。我 在开发Web应用时,我们经常会遇到处理大数据导入的问题。在这个场景中,PHP和AJAX的组合被用来上传和处理大文件。以下是对标题和描述中所述问题的详细解答。 问题1: 原始方案是用户上传文件,然后后台读取并导入数据库。但这种方式在处理大文件时,由于上传时间较长,用户体验不佳。解决方法是将文件上传和数据处理两个步骤分离。用户上传文件后,文件被保存在一个特定的目录(如“import”),同时返回文件名。通过JavaScript,可以显示上传成功的提示。接着,使用AJAX异步请求PHP读取文件并插入数据库。这样,用户不会看到长时间的等待过程。 问题2: 在使用AJAX请求PHP读取大文件并插入数据库时,请求在1分钟时被中断。这是由于PHP的默认最大执行时间限制(`max_execution_time`)导致的。通常情况下,可以使用`ini_set`函数在PHP脚本中动态调整这个值。然而,在这个问题中,即使将`max_execution_time`设置为300秒,仍然没有效果。此外,考虑到可能是Apache的`max_input_time`配置导致的问题,尝试修改此值,但发现`ini_set`设置无效。这可能是因为`max_input_time`无法在运行时更改,或者服务器配置不允许。在这种情况下,只能直接修改服务器上的php.ini文件。然而,这种方法并不总是可行,尤其是当服务器管理有严格限制时。 当修改php.ini无效后,开发者决定采用分块读取和处理大文件的方法。具体操作是,使用AJAX发送请求,每次读取并处理2000条数据,然后插入数据库。每次处理完后,返回状态和当前处理到的行数,以便下一次请求继续读取。这种方式有效地避免了单次请求超时的问题。 在分块处理数据时,遇到了新的挑战。在检查重复数据时,使用`continue`语句跳过已存在的行,但在导入大约10000条数据时,系统在大约8000条时出现内部错误。可能的原因是内存或资源限制,因此,最终选择了使用`if...else`结构代替`continue`。 在数据库插入方面,推荐使用批量插入(例如`INSERT INTO ... VALUES`语法)来提高效率,而不是逐条插入。此外,PHP的`SplFileObject`类提供了一种有效处理大文件的行读取功能,它可以用于分块读取文件内容。 在处理大数据导入时,需要考虑文件上传、服务器配置限制、数据处理策略以及性能优化。通过合理地分离任务,利用异步请求,分块处理和批量插入,可以显著改善处理大数据的效率和用户体验。对于遇到的具体问题,如配置设置无效或内部错误,通常需要深入分析服务器环境和代码逻辑,以找到合适的解决方案。
























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Git rebase 与 merge 的区别与使用场景.doc
- Python 面试题:生成器与迭代器的区别?.doc
- 利用 Docker 快速部署你的 Flask 应用.doc
- 深夜删库:我在线恢复MySQL的全过程记录.doc
- Web 安全常识合集:XSS、CSRF、防御策略.doc
- JavaScript 原型链通俗易懂讲解.doc
- java8 组件化编程思想(动态加载组件)
- Python 调用 GPT 接口实现自动摘要功能.doc
- HTTP_HTTPS 发展史与核心加密机制.doc
- halegreen-smart-traffic-admin-backend-31784-1749434184286.zip
- Python 自动化办公案例合集.doc
- 使用 WebRTC 实现在线音视频通信系统.doc
- 技术知识星球写作模板整理(适合搬运).doc
- 三小时学会使用 RabbitMQ 进行异步通信.doc
- 用 Vue + Koa 实现前后端分离后台管理系统.doc
- 自学编程者的5个常见误区及解决方法.doc



评论0