热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

magento导入csv文件到数据库方法我们会使用到一个插件了SplFileObject,利用SplFileObject可以实现大数据量导入了,当然我们自己写得也是可以的,但是不一定比这个要好呀...
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 <$length; $i++) {
            $returnStr.= $pattern{mt_rand(0, 61) };
        }
        return $returnStr;
    }
    public function getDataFromCsv() {
        $this->_files = array_unique($this->_files);
        $csvCustomers = array();
        foreach ($this->_files as $filename) {
            echo "current file: {$filename}\r\n";
            setlocale(LC_ALL, &#39;en_US.UTF-8&#39;);
            $cOntent= file_get_contents($filename);
            $data = mb_detect_encoding() ($content, &#39;UTF-8&#39;, 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, &#39;rb&#39;);
            $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(&#39;;&#39;, implode(&#39;;&#39;, $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文件并写入到数据库中去 .


本文地址:

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

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • jmeter实践:从csv中获取带引号的数据详情的技巧和运行全部数据的方法
    本文分享了jmeter实践中从csv中获取带引号的数据的解决办法,包括设置CSV Data Set Config和运行脚本获取数据的方法。另外还介绍了循环运行csv中全部数据的解决方法,避免每次修改csv用例都需要修改脚本的麻烦。通过了解和掌握工具的细节点,可以更好地解决问题和提高技术水平。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
author-avatar
手浪用户2602924633
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有