我正在建立一个档案库,人们可以在该档案库中搜索在以色列获得流动性停车许可证登记的汽车。
我有一个CSV文件,每天都会从以色列交通运输部进行更新。
我希望运行一个cron作业,以下载文件,解析文件并将每个车牌插入数据库。
问题是服务器,大约5000条记录后返回503错误。我该怎么办才能拆分拥有50,000多个车牌的文件?
谢谢!
答案 0 :(得分:1)
我注意到您在测试代码时通过浏览器进行了测试。当PHP达到最大执行时间时,会发生503
异常。
要缓解此问题,您可以执行以下两个操作之一:
1。更新您的php.ini文件
max_execution_time = 180
这将使您的代码运行180秒。记住要重新启动php。
2。直接在您的PHP代码中设置时间限制
set_time_limit(180);
这将设置代码触发后的最大执行时间。这只会影响当前的PHP脚本。
从PHP documentation:
set_time_limit ( int $seconds ) : bool
设置允许脚本运行的秒数。如果达到此目的,脚本将返回致命错误。默认限制为30秒,如果存在,则为php.ini中定义的max_execution_time值。
答案 1 :(得分:0)
503表示您的php请求失败。处理大型CSV文件时,时间或RAM可能已用完。 php通常为Web服务器的许多用户处理Web页面的显示,因此它通常具有30秒和几十兆字节的可用内存。但是您正在使用它来处理类似批量的大型请求。
您可能可以通过询问查看Web服务器的错误日志来了解更多信息。几乎可以肯定有一些日志条目解释了导致503错误的原因
该怎么办?您有一些选择。
您可以要求在您的Web服务器上维护php程序的人员增加该程序可用的RAM和/或时间限制。您最喜欢的搜索引擎将为您(或该人)提供有关如何执行这些操作的信息。 (对于您的CSV文件,文件上传大小限制可能也太小。)
如果您可以使用mysql
客户端程序或某些其他客户端程序(HeidiSQL?MySQL Workbench?)直接从保存CSV文件的计算机连接到MySQL数据库,则可以使用LOAD DATA INFILE解析CSV并将行直接加载到表中。这是快速而有效的。读这个。 MYSQL import data from csv using LOAD DATA INFILE
您可以使用计算机上的程序将CSV文件拆分为较小的块,然后分别上传每个文件。有很多简单的程序可以分割CSV文件。在不知道您的计算机是Windows / Mac / Linux等系统的情况下,很难推荐一个计算机。
您可以在计算机上运行一个程序(必须创建一个程序),以将昨天的CSV文件与今天的CSV文件进行比较,并且仅上传不同的行。