【问题标题】:Reading large TXT to MYSQL is timing out读取大 TXT 到 MYSQL 超时
【发布时间】:2014-02-24 23:26:38
【问题描述】:

我有一个 10MB 的文件,我想使用 PHP 将其写入 MYSQL。

在这里(修剪):

if(isset($_FILES['EDIT_DATABASE']))
{        
$TARGET = 'TEXTFILE/geo.txt';
move_uploaded_file($_FILES['EDIT_DATABASE']['tmp_name'], $TARGET);

$FILE = fopen($TARGET,'r');

while($LINE = fgets($FILE)) 
{           
INSERT INTO MYSQL
}}

运行一段时间后它会不断停止。因此我不能一次添加所有数据。

我的 max_execution_time 是 30,但脚本运行了大约 10-20 分钟,然后才用完。 max_input_time 为 -1(无限制)。我检查了其他 PHP MySQL 设置,一切似乎都井井有条。我错过了什么?

什么可能导致问题。我运行它时绝对没有错误。它只是在 10-20 分钟内停止而没有完成。有什么想法吗?

【问题讨论】:

    标签: php mysql timeout


    【解决方案1】:

    只是想一想,为什么不一次将 50 行文本文件读入数据库,而不是一次全部读入?

    【讨论】:

    • 我实际上正在考虑这样做,阅读大约 10000。但我不确定如何阅读 10000 然后重新启动并阅读下一个 10000。我个人想解决问题而不是绕过它。
    • 您可能要考虑在卡盘中读取的原因是尝试将数据发送到数据库时可能会丢失数据。分块发送将确保接收时数据的完整性。这并不是真正的解决方法,它更像是一个理想的解决方案,然后将 10k+ 行数据发送到数据库。您必须跟踪您已阅读的行数以及您在文本文件中的位置。将数据推送到数据库中,然后从您的位置计数器开始。
    • 没有用。我找到了一种摆脱数组并单独处理每一行“1 个数据包”的方法,但它仍然超时。 :(
    • 保持存储在会话中的指针变量,然后在达到最大行后刷新。
    • 我使用来自 url 的 $_GET 做到了这一点。每 1000 个条目刷新一次,但在 5000 个条目时,它停止了。我猜是浏览器停止了代码。
    猜你喜欢
    • 2013-12-10
    • 2015-09-05
    • 2013-10-05
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多