magento导入csv文件到数据库脚本
magento导入csv文件到数据库方法我们会使用到一个插件了SplFileObject,利用SplFileObject可以实现大数据量导入了,当然我们自己写得也是可以的,但是不一定比这个要好呀.
这是magento脚本的另外一种写法,个人觉得写的还行,高手莫见笑,用SplFileObject来处理大数据的csv文件效率高,代码如下:
<?php require_once 'shell/abstract.php' ; class Faarao_Import_Customer extends Mage_Shell_Abstract { protected $_files = array (); protected $_datas = array (); public function __construct() { parent::__construct(); set_time_limit(0); if ( $this ->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 ( empty empty ( $this ->_files)){ die (self::usageHelp()); } } // Shell script point of entry public function run() { self::getDataFromCsv(); if ( empty empty ( $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 ( empty empty (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 ( empty empty ( $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测试数据'; $customerData [ 'country' ] = 'Finland' ; $customerData [ 'password' ] = self::randomkeys(10); 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, '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); } //开源软件:phpfensi测试数据 // Usage instructions public function usageHelp() { return <<<USAGE Usage: php tetuan_customer_import.php --file a.csv,b.csv \n USAGE; } } // Instantiate $shell = new Faarao_Import_Customer(); // Initiate script $shell ->run();补充: 有一些朋友使用的是excel文档,这样这个程序就不可以使用了,我们可以使用phpexcel插件来读取excel文件并写入到数据库中去.
查看更多关于magento导入csv文件到数据库脚本 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30400