PDA

View Full Version : آموزش: دریافت XML عظیم از وب سرویس و import به MySQL ظرف فقط چند ثانیه!



Arsess
دوشنبه 30 خرداد 1390, 12:23 عصر
بدلیل کمبود وقت و اصرار بعضی از دوستان عزیز مستقیم میرم سر اصل مطلب و بحث در مورد جزییات رو به خودتون میسپارم

برای دریافت XML از یه سایت دیگه و ذخیره در سایت خودتون


@$ContentsXml = file_get_contents('http://webservice.ir/');
$TempXmlFile = fopen('Temp.xml', 'w');
fwrite($TempXmlFile, $ContentsXml);
fclose($TempXmlFile);
unset($ContentsXml);
unset($TempXmlFile);


برای خواندن XML ذخیره شده در سایت خودتان


$TempSimpleXmlVariable = simplexml_load_file('Temp.xml');

بعد از اون لطفا حافظه رو آزاد کنین

unlink('Temp.xml');
حالا این XML رو به شکل CSV در میاریم


$TempCsvFile = fopen('Temp.csv', 'w');
foreach ($TempSimpleXmlVariable->Item as $OneItem) {
fputcsv($TempCsvFile, (str_replace("&","&",get_object_vars($OneItem))),',','"');
}
fclose($TempCsvFile);

حالا فقط کافیه فایل CSV مون رو با یه دستور وارد Table کنیم


$Load_Data_Result = mysql_query("LOAD DATA LOCAL INFILE '/.../htdocs/Temp.csv' INTO TABLE `MyTable` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");

درنهایت هم فایلمونو پاک میکنیم

unlink("Temp.csv");

Arsess
چهارشنبه 01 تیر 1390, 13:44 عصر
با این روش موفق میشیم حدود سی میلیون رکورد رو در حدود یک دقیقه توی تیبل خودمون بریزیم
توجهتون رو به تاپیکهای زیر جلب میکنم:
http://barnamenevis.org/showthread.php?250239-insert-%D8%B3%DB%8C-%D9%85%DB%8C%D9%84%DB%8C%D9%88%D9%86-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%B3%D8%A7%D8%B9%D8%AA%DB%8C-%DB%8C%DA%A9%D8%A8%D8%A7%D8%B1!
و
http://barnamenevis.org/showthread.php?251058-%D9%85%D8%B4%DA%A9%D9%84-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%B7%D9%88%D9%84%D8%A7%D9%86%DB%8C-%D9%85%D8%AF%D8%AA-%D8%AF%D8%B1-php