使用PHP/Laravel分批解析许多XML文件

使用PHP/Laravel分批解析许多XML文件,php,xml,laravel,mariadb,Php,Xml,Laravel,Mariadb,我的代码已经开始工作了,它将解析文件并插入记录,这个问题一直困扰着我,因为我从来没有这样做过,我如何告诉我的代码解析1-300个文件,然后等待,然后解析下一个“批处理”301-500等等,直到它解析完所有文件。我需要解析超过5万个文件,所以很明显我已经达到了php的内存限制和执行时间,这已经增加了,但我认为我无法将其设置得非常高,以处理5万个文件 我需要关于如何告诉我的代码运行1-x,然后重新运行并运行x-y的帮助 我的代码是(注意,我正在收集更多的信息,而不是我的剪报下面的内容) 最简单的解决

我的代码已经开始工作了,它将解析文件并插入记录,这个问题一直困扰着我,因为我从来没有这样做过,我如何告诉我的代码解析1-300个文件,然后等待,然后解析下一个“批处理”301-500等等,直到它解析完所有文件。我需要解析超过5万个文件,所以很明显我已经达到了php的内存限制和执行时间,这已经增加了,但我认为我无法将其设置得非常高,以处理5万个文件

我需要关于如何告诉我的代码运行1-x,然后重新运行并运行x-y的帮助

我的代码是(注意,我正在收集更多的信息,而不是我的剪报下面的内容)


最简单的解决方案是使用偏移量多次调用脚本,并使用for循环而不是forach

$xml_files = glob(storage_path('path/to/*.xml'));
$offset = $_GET['offset'];
// Or if calling the script via command line:
// $offset = $argv[1];
$limit = $offset + 300;

for ($i = $offset; $i < $limit; $i++) {
    $data = simplexml_load_file($xml_files[$i]);
    // process and whatever
}
$xml\u files=glob(存储路径('path/to/*.xml');
$offset=$_GET['offset'];
//或者,如果通过命令行调用脚本:
//$offset=$argv[1];
$limit=$offset+300;
对于($i=$offset;$i<$limit;$i++){
$data=simplexml_load_文件($xml_文件[$i]);
//过程什么的
}
如果将脚本作为网页调用,只需添加一个查询参数,如
my xml parser.php?offset=300
,并按如下方式获取offset:
$offset=$\u get['offset']

如果您将其作为命令行脚本调用,请如下调用:
php my-xml-parser.php 300
,并从argv获取偏移量:
$offset=$argv[1]

编辑 如果是web脚本,您可以尝试添加一个curl调用,该调用将使用下一个偏移量调用自身,而无需等待回答。

查看并分享您的解决方案:)
$xml_files = glob(storage_path('path/to/*.xml'));
$offset = $_GET['offset'];
// Or if calling the script via command line:
// $offset = $argv[1];
$limit = $offset + 300;

for ($i = $offset; $i < $limit; $i++) {
    $data = simplexml_load_file($xml_files[$i]);
    // process and whatever
}