使用PHP如何将1000个配置文件加载到数据库中?

使用PHP如何将1000个配置文件加载到数据库中?,php,performance,refactoring,Php,Performance,Refactoring,在一个文件夹中,我有34000个配置文件。每个文件都包含一个具有唯一配置规范的对象。以下是文件内容的示例: $obj = new obj(); $obj->name = "name": $obj->location "nyc"; ... ... etc 每个文件大约有100到200行长,大小约为17k 要将这些数据输入数据库,我有以下功能: function retrieve_files(){ $objs = array(); $path = 'filefolde

在一个文件夹中,我有34000个配置文件。每个文件都包含一个具有唯一配置规范的对象。以下是文件内容的示例:

$obj = new obj();
$obj->name = "name":
$obj->location "nyc";
...
...
etc
每个文件大约有100到200行长,大小约为17k

要将这些数据输入数据库,我有以下功能:

function retrieve_files(){
    $objs = array();

    $path = 'filefolder';

    //retrieve a list of files as an array of objects
    $files = get_files('/\.inc$/', $path, 'filename', 0);

    foreach ($files as $file) {
            include_once $path.'/'.$file->filename;
            $objs[$obj->name] = $obj;
    }

    return $objs;
}
返回对象数组后,它将在另一个函数中循环,并序列化,每个数组都保存到数据库中

目前,我的服务器是一个Intel双核3.06 Ghz处理器,具有8 Gig的RAM。我通过Ubuntu 12.04中的命令行运行脚本

在脚本处理过程中,CPU以100%的速度达到最大值,内存不断攀升,直到所有8个Gig都达到最大值。然后脚本崩溃


如何使这个脚本或整个流程更高效?我宁愿呆在这个职能范围内。我也更愿意一次完成。是否有一种方法可以重构此函数,即在创建数组并迭代循环时使用较少的资源或释放资源?

很明显,在第一个函数结束时,最终数组中的对象太多了

34000个文件意味着阵列中有34000个对象
$objects


可能您应该将对象保存在循环中。对于包含的每个文件,将序列化对象保存在数据库中。您将在数据库中为1个配置文件设置1行。

与其返回所有对象,不如一次返回100个对象。像这样的

function retrieve_files(){
    $objs = array();

    $path = 'filefolder';

    //retrieve a list of files as an array of objects
    $files = get_files('/\.inc$/', $path, 'filename', 0);
    $count = 0;
    foreach ($files as $file) {
            include_once $path.'/'.$file->filename;
            $objs[$obj->name] = $obj;
            if ( $count++%100 == 0 )
            {
                function_to_process_obj($objs);
                $objs = null;
                $objs = array();
            }
    }
}