php循环502坏网关

php循环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 我怎样才能解决这个问题。 谢谢并致以最诚挚的问候。我认为问题在于

下午好

我对php
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语法分析器的另一个替代方法是,它更易于实现,但占用更多内存,执行速度较慢。