热门标签 | 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。 ... [详细]
  • PHP玩家基地系统毕业设计(附源码、运行环境)的用户登录界面、游戏管理和玩家作品管理
    本文介绍了一个PHP玩家基地系统的毕业设计,包括用户登录界面、游戏管理和玩家作品管理等功能。附带源码和运行环境,并提供免费赠送本源代码和数据库的方式,请私信获取详细信息。摘要共计约XXX字。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 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下。 ... [详细]
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社区 版权所有