欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

magento导入csv文件到数据库脚本

程序员文章站 2023-12-31 17:14:52
...
magento导入csv文件到数据库方法我们会使用到一个插件了SplFileObject,利用SplFileObject可以实现大数据量导入了,当然我们自己写得也是可以的,但是不一定比这个要好呀.

这是magento脚本的另外一种写法,个人觉得写的还行,高手莫见笑,用SplFileObject来处理大数据的csv文件效率高,代码如下:

getArg('file')) {
            $this->_files = array_merge($this->_files, array_map('trim', explode(',', $this->getArg('file'))));
            foreach ($this->_files as $key => $file) {
                $extension = self::get_extension($file);
                if ($extension != 'csv') {
                    unset($this->_files[$key]);
                }
            }
        }
        if (emptyempty($this->_files)) {
            die(self::usageHelp());
        }
    }
    // Shell script point of entry
    public function run() {
        self::getDataFromCsv();
        if (emptyempty($this->_datas)) {
            die("not found data in csv ! \r\n");
        }
        $emailBooks = array();
        foreach ($this->_datas as $name => $datas) {
            echo "filename: {$name} =======================\r\n";
            $importNum = 0;
            foreach ($datas as $key => $data) {
                if (emptyempty(trim($data[4]))) {
                    continue;
                }
                $customerData['firstname'] = trim($data[0]);
                $customerData['lastname'] = trim($data[1]);
                $customerData['phone'] = trim($data[2]);
                $customerData['mobile'] = trim($data[3]);
                $customerData['email'] = trim($data[4]);
                $customerData['company'] = trim($data[5]);
                $customerData['billing_address'] = $data[6] . $data[7] . $data[8];
                $customerData['billing_postcode'] = sprintf("%05d", trim($data[9]));
                $customerData['billing_city'] = trim($data[10]);
                $customerData['billing_country'] = trim($data[11]);
                $customerData['shipping_address'] = $data[12] . $data[13] . $data[14];
                if (emptyempty($data[15]) && is_numeric($data[16])) {
                    $customerData['shipping_postcode'] = sprintf("%05d", trim($data[16]));
                    $customerData['shipping_city'] = trim($data[17]);
                    $customerData['shipping_country'] = trim($data[18]);
                } else {
                    $customerData['shipping_postcode'] = sprintf("%05d", trim($data[15]));;
                    $customerData['shipping_city'] = trim($data[16]);
                    $customerData['shipping_country'] = trim($data[17]);
                }
                // $customerData['email'] = 'zouhongzhao@126.com';
                $customerData['country'] = 'Finland';
                $customerData['password'] = self::randomkeys(10); & nbsp;
                echo "customer email {$customerData['email']} ...\r\n";
                print_r($customerData);
                $customer = Mage::getModel('customer/customer');
                $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
                $customer->loadByEmail($customerData['email']);
                if (!$customer->getId()) {
                    echo "insert ... \r\n";
                    $customer->setEmail($customerData['email']);
                    $customer->setFirstname($customerData['firstname']);
                    $customer->setLastname($customerData['lastname']);
                    $customer->setPassword($customerData['password']);
                } else {
                    echo "update ... \r\n";
                }
                try {
                    $customer->save();
                    $customer->setConfirmation(null);
                    $customer->save();
                    //Make a "login" of new customer
                    Mage::getSingleton('customer/session')->loginById($customer->getId());
                    $importNum++;
                    $emailBooks[$customerData['email']] = array(
                        'firstname' => $customerData['firstname'],
                        'lastname' => $customerData['lastname'],
                        'customer_mage_id' => $customer->getId() ,
                        'passwd' => $customerData['password']
                    );
                    echo "customer save ok !\r\n";
                }
                catch(Exception $ex) {
                    echo "customer save fail !\r\n";
                    continue;
                }
                if (trim($customerData['billing_address']) == trim($customerData['shipping_address']) && $customerData['billing_postcode'] == $customerData['shipping_postcode'] && $customerData['billing_city'] == $customerData['shipping_city']) {
                    $same_address = array(
                        'firstname' => $customerData['firstname'],
                        'lastname' => $customerData['lastname'],
                        'street' => $customerData['billing_address'],
                        'company' => $customerData['company'],
                        'city' => $customerData['billing_city'],
                        'region_id' => '',
                        'region' => '',
                        'postcode' => $customerData['billing_postcode'],
                        'country_id' => 'FI',
                        'telephone' => $customerData['phone'],
                    );
                    $customAddress = Mage::getModel('customer/address');
                    //$customAddress = new Mage_Customer_Model_Address();
                    $customAddress->setData($same_address)->setCustomerId($customer->getId())->setIsDefaultBilling('1')->setIsDefaultShipping('1')->setSaveInAddressBook('1');
                    try {
                        $customAddress->save();
                        echo "sameAddress save ok !\r\n";
                    }
                    catch(Exception $ex) {
                        echo "sameAddress save fail !\r\n";
                        continue;
                    }
                } else {
                    $billing_address = array(
                        'firstname' => $customerData['firstname'],
                        'lastname' => $customerData['lastname'],
                        'street' => $customerData['billing_address'],
                        'company' => $customerData['company'],
                        'city' => $customerData['billing_city'],
                        'region_id' => '',
                        'region' => '',
                        'postcode' => $customerData['billing_postcode'],
                        'country_id' => 'FI',
                        'telephone' => $customerData['phone'],
                    );
                    self::setBillingAddress($billing_address, $customer);
                    $shipping_address = array(
                        'firstname' => $customerData['firstname'],
                        'lastname' => $customerData['lastname'],
                        'street' => $customerData['shipping_address'],
                        'company' => $customerData['company'],
                        'city' => $customerData['shipping_city'],
                        'region_id' => '',
                        'region' => '',
                        'postcode' => $customerData['shipping_postcode'],
                        'country_id' => 'FI',
                        'telephone' => $customerData['phone'],
                    );
                    self::setShippingAddress($shipping_address, $customer);
                }
                // die;
                
            }
            echo "import num: {$importNum} =======================\r\n";
        }
        //save passwd
        $fp = fopen('customer_record.log', 'w');
        fwrite($fp, json_encode($emailBooks));
        fclose($fp);
    }
    public function setBillingAddress($data, $customer) {
        $customerAddress = Mage::getModel('customer/address');
        if ($defaultShippingId = $customer->getDefaultBilling()) {
            $customerAddress->load($defaultShippingId);
        } else {
            $customerAddress->setCustomerId($customer->getId())->setIsDefaultBilling('1')->setSaveInAddressBook('1');
            $customer->addAddress($customerAddress);
        }
        try {
            $customerAddress->addData($data)->save();
            echo "BillingAddress save ok !\r\n";
        }
        catch(Exception $e) {
            // Mage::log('Address Save Error::' . $e->getMessage());
            echo "BillingAddress save fail !\r\n";
        }
    }
    public function setShippingAddress($data, $customer) {
        $customerAddress = Mage::getModel('customer/address');
        if ($defaultShippingId = $customer->getDefaultShipping()) {
            $customerAddress->load($defaultShippingId);
        } else {
            $customerAddress->setCustomerId($customer->getId())->setIsDefaultShipping('1')->setSaveInAddressBook('1');
            $customer->addAddress($customerAddress);
        }
        try {
            $customerAddress->addData($data)->save();
            echo "ShippingAddress save ok !\r\n";
        }
        catch(Exception $e) {
            // Mage::log('Address Save Error::' . $e->getMessage());
            echo "ShippingAddress save fail !\r\n";
        }
    }
    public function randomkeys($length) {
        $returnStr = '';
        $pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
        for ($i = 0; $i _files = array_unique($this->_files);
        $csvCustomers = array();
        foreach ($this->_files as $filename) {
            echo "current file: {$filename}\r\n";
            setlocale(LC_ALL, 'en_US.UTF-8');
            $content = file_get_contents($filename);
            $data = mb_detect_encoding() ($content, 'UTF-8', true);
            // $data = iconv("CP1257","UTF-8", $content);
            file_put_contents($filename, $content);
            // fclose($handle);
            // print_r($content);die;
            $basename = basename($filename, ".csv");
            $data = array();
            $tmp = array();
            $spl_object = new SplFileObject($filename, 'rb');
            $spl_object->seek(filesize($filename));
            $start = 0;
            $num = $spl_object->key();
            $spl_object->seek($start);
            while ($num-- && !$spl_object->eof()) {
                $data[] = $spl_object->fgetcsv();
                $spl_object->next();
            }
            foreach ($data as $key => $values) {
                if ($key == 0) {
                    continue;
                }
                $mergeValue = explode(';', implode(';', $values));
                // if(count($mergeValue) != 20){
                // continue;
                // }
                array_push($tmp, $mergeValue);
            }
            $this->_datas[$basename] = $tmp;
        }
        return $this;
    }
    public function get_extension($filename) {
        return pathinfo($filename, PATHINFO_EXTENSION);
    }
    // Usage instructions
    public function usageHelp() {
        return run();

补充:

有一些朋友使用的是excel文档, 这样这个程序就不可以使用了, 我们可以使用phpexcel插件来读取excel文件并写入到数据库中去 .


本文地址:

转载随意,但请附上文章地址:-)

上一篇:

下一篇: