php循环502坏网关
下午好 我对phpphp循环502坏网关,php,mysql,loops,memory-limit,Php,Mysql,Loops,Memory Limit,下午好 我对phpforeach循环有问题 我使用simplexml解析xml文件(~20mb),然后将数据插入mysql 在xml中有超过37000个条目,我必须循环37000次,才能从xml中读取数据 每100次迭代,我创建如下字符串: 插入我的表格值(…) 但我在10500次迭代中得到一个502错误 我尝试在循环后发送字符串,但再次出现错误: memory_limit=240 max_execution_time 500 我怎样才能解决这个问题。 谢谢并致以最诚挚的问候。我认为问题在于
foreach
循环有问题
我使用simplexml解析xml文件(~20mb),然后将数据插入mysql
在xml中有超过37000个条目,我必须循环37000次,才能从xml中读取数据
每100次迭代,我创建如下字符串:
插入我的表格值(…)
但我在10500次迭代中得到一个502错误
我尝试在循环后发送字符串,但再次出现错误:
memory_limit=240
max_execution_time 500
我怎样才能解决这个问题。
谢谢并致以最诚挚的问候。我认为问题在于您的脚本超时,您可以通过在脚本中使用
set\u time\u limit(0)
或在php.ini
中更改max\u execution\u time
来克服这一问题:
while(1) {
set_time_limit(0);
// do something
}
您还需要通过编辑php.ini
并重新启动Web服务器来增加内存限制
阅读的文档我认为问题在于您的脚本超时,您可以通过在脚本中使用set\u time\u limit(0)
或更改php.ini中的max\u execution\u time
来克服这一问题:
while(1) {
set_time_limit(0);
// do something
}
您还需要通过编辑php.ini
并重新启动Web服务器来增加内存限制
阅读的文档可以将一个大xml拆分为几个小文件吗?
我会把37000个项目分成几个批次,然后一个接一个地或异步地处理它们。我已经用PHP做过几次了。对于这样的工作,更好的语言应该是Phyton或RoR
不过,请尝试创建批项目。
关于存储数据,我在MySQL中使用CSV批插入。
我使用此函数将字符串转换为CSV格式:
<?php
function convertStrToCsv($data, $delimiter = ';', $enclosure = '"')
{
ob_start();
$fp = fopen('php://output', 'w');
fputcsv($fp, $data, $delimiter, $enclosure);
fclose($fp);
return ob_get_clean();
}
阅读更多关于此的信息:
快乐编码 可以将一个大xml拆分为几个小文件吗?
我会把37000个项目分成几个批次,然后一个接一个地或异步地处理它们。我已经用PHP做过几次了。对于这样的工作,更好的语言应该是Phyton或RoR
不过,请尝试创建批项目。
关于存储数据,我在MySQL中使用CSV批插入。
我使用此函数将字符串转换为CSV格式:
<?php
function convertStrToCsv($data, $delimiter = ';', $enclosure = '"')
{
ob_start();
$fp = fopen('php://output', 'w');
fputcsv($fp, $data, $delimiter, $enclosure);
fclose($fp);
return ob_get_clean();
}
阅读更多关于此的信息:
快乐编码 您是否考虑过使用MySQL批量插入,它可以直接从XML文件中提取数据?()是的,xml的结构是一个糟糕的例子val3。。。为什么那么糟糕?使用XSLT将其转换为与目标表格式匹配的格式。您是否考虑过使用MySQL批量插入,它可以直接从XML文件中提取?()是的,xml的结构是一个糟糕的例子val3。。。为什么那么糟糕?使用XSLT将其转换为与目标表格式匹配。脚本执行很长,是的,但我认为问题在于服务器认为它是一个无限循环。我不能使用mysql命令“从文件加载”,因为xml的结构是bad@Kandrat-您运行的是nginx还是apache?脚本执行时间很长,是的,但我认为问题在于服务器认为这是一个无限循环。我不能使用mysql命令“从文件加载”,因为xml的结构是bad@Kandrat-您正在运行nginx或apache吗?您的方法很好,但要将xml转换为有效格式(如果不是mysql返回错误),我必须循环所有xml,然后执行mysql查询,但在循环中我得到错误(您可以尝试部分加载xml。看看占用内存较少且基于SAX的速度非常快的方法。您可以找到此解析器的一个示例。xml解析器的另一个替代方法是,它更易于实现,但占用内存较多,执行速度较慢。您的方法很好,但可以将xml转换为有效格式(若不是mysql返回错误)我必须循环所有xml,然后执行mysql查询,但在循环中我得到错误(您可以尝试部分加载xml。请看一看内存消耗较少且基于SAX的速度非常快的语法分析器。您可以找到此语法分析器的一个示例。xml语法分析器的另一个替代方法是,它更易于实现,但占用更多内存,执行速度较慢。