好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

magento导入csv文件到数据库脚本 - php高级应用

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);    &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,  '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高级应用的详细内容...

  阅读:53次