Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.csv文件和PHP缓慢上载_Php_Performance_Mongodb_Csv_File Upload - Fatal编程技术网

使用.csv文件和PHP缓慢上载

使用.csv文件和PHP缓慢上载,php,performance,mongodb,csv,file-upload,Php,Performance,Mongodb,Csv,File Upload,我创建了一个使用PHP上传csv文件并将其内容插入Mongo数据库的函数 上传要花很多时间才能完成,我不知道如何构建更好的代码来完成 下面是我在PHP中的函数: public function importEmail($file,$list_name,$header){ $data = $this->ReadCSV($file, $has_header); global $Email; $falhas = 0; array_shift($

我创建了一个使用PHP上传csv文件并将其内容插入Mongo数据库的函数

上传要花很多时间才能完成,我不知道如何构建更好的代码来完成

下面是我在PHP中的函数:

public function importEmail($file,$list_name,$header){

    $data = $this->ReadCSV($file, $has_header);        
    global $Email;
    $falhas = 0;

    array_shift($data);

    if($data === false) {
        return false;
    } else {                  
        foreach($data as $key => $value) {
            $Email->email = $value[$header["email"]];
            $Email->first_name = $value[$header["fName"]];
            $Email->last_name = $value[$header["lName"]];
            $Email->gender = strtoupper($value[$header["gender"]]);
            $Email->status = $value[$header["status"]] !="" ? $value[$header["status"]] : "1";
            $Email->list_name = $list_name;
            $Email->opt_out = $v = (strtoupper($value[$header["opt"]]) != "" ? strtoupper($value[$header["opt"]]) : "N");               

           if(!$Email->update(trim($value[$header["email"]]))) $falhas++;              
        }   

      }      

        return $falhas === 0 ? true : false;
}
已编辑 这是update()方法,负责将记录插入MongoDB

public function update($id) {
    global $mongo, $gClient;

    $update = array(
        '$set' => array(
            'userData.name' => $this->first_name,
            'userData.lastName' => $this->last_name,
            'userData.gender' => $this->gender,
            'userData.optOut' => $this->opt_out == "Y" || $this->opt_out == "N" ? $this->opt_out : "Y",
            'userData.lastUpdate' => (int)(microtime(true) * 1000),
            'userData.status' => $this->status == 0 || $this->status == 1 ? +$this->status : 0
        ),
        '$setOnInsert' => array(
            'userData.registerDate' => (int)(microtime(true) * 1000)
        )
    );

    if(is_string($this->list_name) && strlen($this->list_name) > 0)
        $update['$push'] = array(
            'userData.meta' => array(
                'type' => 'listname',
                'name' => $this->list_name
            )
        );

    $result = $mongo->{$gClient->slug}->usersHistory->update(array(
        'userEmail' => $id
    ), $update, array(
        'upsert' => true
    ));

    if(!$this->email) $this->email = $id;

    $mongo->{$gClient->slug}->usersHistory->update(array(
        'userEmail' => $id
    ), array(
        '$set' => array(
            'userEmail' => $this->email
        )
    ));

    return $result['n'] > 0;
}
那些.csv文件总是大于50k(行)


我怎样才能构建比这种方法更快的东西?

你在问题中说上传时间太长,但你给了我们数据处理部分的代码。哪一部分比较慢,你怎么知道,你还试过什么?update()方法负责插入Mongodb。所以上传函数花费的时间太长了?如果是这种情况,那么该方法的代码在哪里?具体来说,您做了哪些工作来缩小问题的范围?IE:你怎么知道这是文件上传,而不是插入MongoDB?@U-pete问题用update()方法更新。