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

更新时间:2019-07-03    来源:magento    手机版     字体:

【www.bbyears.com--magento】

这是magento脚本的另外一种写法。

个人觉得写的还行,高手莫见笑。

用SplFileObject来处理大数据的csv文件效率高

 

 代码如下 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($this->_files)){
die(self::usageHelp());
}
}
// Shell script point of entry
public function run() {
self::getDataFromCsv();
if(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(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($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);
 
 
 
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);
}
// Usage instructions
public function usageHelp()
{
return << 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文件并写入到数据库中去哦。

本文来源:http://www.bbyears.com/wangyezhizuo/56207.html