Merhaba,
xmltomysql.php diye bir sayfa oluşturdum. 3 kolokdan oluşan 5mb lık ve 65000 satırlık veri girişi olan bir xml dosyasını 1 dk da kendi localimdeki mysql a 1 dk da atkatara biliyorum. fakat web server da bunu denediğimde. 1 saatden fazla vakit alıyor. Sizde web server ayarlarında ne eksik olabilir.
mysql veri aktarımı neden yavaştır?
7
●408
- 05-02-2015, 09:58:24Kod bu : dosya varmı yok mu dosya güncell mi değil mi kontrolü , doğru çalıştığında ve hata olduğundada mail gönderiyor. Saçma olan localinde 1 dk web server da 1 saaati geçiyor.
<?php ob_start(); define('IN_SITE', true); ini_set('memory_limit', -1); include ("includes/conn.php"); @baglan(); $z = new XMLReader; $dosyaadisi = "denemexmldepo/LX02.xml"; $z->open("$dosyaadisi"); /* mail gonder */ date_default_timezone_set('Etc/UTC'); require 'phpmailler/PHPMailerAutoload.php'; $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPDebug = 0; $mail->CharSet = 'UTF-8'; $mail->Debugoutput = 'html'; $mail->Host = "mail.deneme.com"; $mail->Port = 25; $mail->SMTPAuth = true; $mail->Username = "web@deneme.com"; $mail->Password = "deneme@123"; $recipients = array( 'deneme@deneme.com' => 'deneme' ); foreach($recipients as $email => $name) { $mail->addAddress($email, $name); } ?> <html> <head> <meta charset='utf-8' /> <meta name="robots" content="noindex" /> <meta http-equiv="Cache-control" content="no-cache" /> </head> <body> <?php if(file_exists("$dosyaadisi")) { date_default_timezone_set('Europe/Istanbul'); $last_time_modified = filemtime($dosyaadisi); // datemodified bilgiyi gösteren fonksiyon $ftpuzamani = date("Y-m-d h:i:s",$last_time_modified); $last_mod = "<br />Değiştirilme Zamanı " . $ftpuzamani."<br />"; echo $last_mod; $sqlms = "Select * from xmllog order by id desc limit 0,1"; $Sorz = @mysql_query( $sqlms ); $kataas = @mysql_fetch_array($Sorz); if($kataas['xmlftpdate']!=$ftpuzamani) { $sorgu = mysql_query("TRUNCATE TABLE stok"); $q = mysql_query($sorgu); echo $kataas['xmlftpdate']."_____".$ftpuzamani; $doc = new DOMDocument; // move to the first <product /> node while ($z->read() && $z->name !== 'veri'); $arraylabunu = "MATNR,CHARG,VERME"; $arrayla= explode(",",$arraylabunu); $arraysay = count($arrayla); echo $arraysay; $baslangisdate = date('Y-m-d h:i:s'); $xmllogbir = "Insert Into xmllog Values ('','stok','0','','','$ftpuzamani','$baslangisdate','','0')"; $Eklexml = @mysql_query($xmllogbir); $websid = mysql_insert_id(); // now that we're at the right depth, hop to the next <product/> until the end of the tree while ($z->name === 'veri') { // either one should work //$node = new SimpleXMLElement($z->readOuterXML()); $node = simplexml_import_dom($doc->importNode($z->expand(), true)); ob_start(); for ( $say=0 ; $say < $arraysay ; $say++ ) { echo "'".$node->$arrayla[$say]."',"; } $arrayapca = ob_get_clean(); $karaktersaya = strlen($arrayapca); $karektereksia = $karaktersaya-1; $mbsuble = substr($arrayapca,0,$karektereksia); $SQLzs = "Insert Into stok Values ($mbsuble)"; $ekleares= @mysql_query( $SQLzs ); // go to next <product /> $z->next('veri'); } $bitisdate = date('Y-m-d h:i:s'); $SQLtm = "SELECT mid FROM stok"; $istvidtm = @mysql_num_rows(mysql_query( $SQLtm )); //Set the subject line $mail->setFrom('web@deneme.com', 'deneme xml stok'); $mail->addReplyTo('web@deneme.com', 'deneme xml stok'); $mail->Subject = 'xml stok guncelleme '.$bitisdate.''; $body = '<b style="color:green;">Stok güncellendi.</b><br /><br /> <b>Ftp dosya yüklenme zamanı:</b> '.$ftpuzamani.'<br /> <b>Güncelleme Başlama Tarihi:</b> '.$baslangisdate.'<br /> <b>Güncelleme Bitiş Tarihi:</b> '.$bitisdate.'<br /> <b>Toplam Kayıt:</b> '.$istvidtm.'<br /> '; // HTML okuyamayan mail okuyucularda görünecek düz metin: $textBody = "Bu mail SMTP server ile gönderilmiştir."; $mail->Body = $body; $mail->AltBody = $textBody; if ($mail->Send()) { $senddi = "1"; Echo ("gönderildi");} else { $senddi = "0"; Echo ("gönderilmedi"); } /* email end */ $xmlayari = @mysql_query("Update xmlayar Set stok = '$bitisdate' where id='1'"); $xmllogiki = @mysql_query("Update xmllog Set udatefinish = '$bitisdate',emailsend = '$senddi', kayit = '$istvidtm' where id='$websid'"); } else { // ftp ile esit guncellememis ftp deki dosyayi $mail->setFrom('web@deneme.com', 'deneme xml stok HATA!'); $mail->addReplyTo('web@deneme.com', 'deneme xml stok HATA!'); $mail->Subject = 'xml stok GUNCELLENMEDİ!! '.$bitisdate.''; $body = '<b style="color:red;">Stok güncellenmedi.</b><br /><br /> <b>Ftp dosya yüklenme zamanı:</b> '.$ftpuzamani.'<br /> '; // HTML okuyamayan mail okuyucularda görünecek düz metin: $textBody = "Bu mail SMTP server ile gönderilmiştir."; $mail->Body = $body; $mail->AltBody = $textBody; if ($mail->Send()) { $senddi = "1"; Echo ("gönderildi");} else { $senddi = "0"; Echo ("gönderilmedi"); } /* email end */ $baslangisdate = date('Y-m-d h:i:s'); $xmllogbir = "Insert Into xmllog Values ('','stok','1','ftp güncel değil','','$ftpuzamani','$baslangisdate','$baslangisdate','$senddi')"; $Eklexml = @mysql_query($xmllogbir); } } else { echo "dosya yok<br/>"; $mail->setFrom('web@deneme.com', 'deneme xml Stok HATA Dosya Yok!'); $mail->addReplyTo('web@deneme.com', 'deneme xml Stok HATA!'); $mail->Subject = 'xml Stok GUNCELLENMEDİ!! Dosya Yok '.$bitisdate.''; $body = '<b style="color:red;">Stok güncellenmedi. Dosya Yok</b><br /><br /> <b>Ftp dosya yüklenme zamanı:</b> '.$ftpuzamani.'<br /> '; // HTML okuyamayan mail okuyucularda görünecek düz metin: $textBody = "Bu mail SMTP server ile gönderilmiştir."; $mail->Body = $body; $mail->AltBody = $textBody; if ($mail->Send()) { $senddi = "1"; Echo ("gönderildi");} else { $senddi = "0"; Echo ("gönderilmedi"); } /* email end */ $baslangisdate = date('Y-m-d h:i:s'); $xmllogbir = "Insert Into xmllog Values ('','Stok','1','dosya yok','','$ftpuzamani','$baslangisdate','$baslangisdate','$senddi')"; $Eklexml = @mysql_query($xmllogbir); } ?> </body> </html>burda örnek xml dosyası :
<?xml version="1.0" encoding="utf-8"?> <veriler> <veri> <MATNR>20000003</MATNR> <CHARG>0001015759</CHARG> <VERME>55555,000</VERME> </veri> <veri> <MATNR>20000003</MATNR> <CHARG>0001015758</CHARG> <VERME>500,000</VERME> </veri> <veri> <MATNR>20000003</MATNR> <CHARG>0001015757</CHARG> <VERME>500,000</VERME> </veri> <veri> <MATNR>20000003</MATNR> <CHARG>0001015756</CHARG> <VERME>500,000</VERME> </veri> </veriler>
- 05-02-2015, 11:17:45mail ve veritabanı işlemlerini kaldırıp sadece dosya işlemlerini bırak dene bakalım.
yaptıgın işlem mantığı nedir xml dosyasını başka yerden mi çekiyorsun bilmiyorum. ama eğer ki kendi sunucundaki bi xml dosyası ise. verileri direk veritabanına kaydet. xml olarak da vermek istiyorsan veritabanından çektiğin verileri xml olarak göster daha basit olacaktır senin için. yapmak istediğin şey özelse paylaşmak istemiyorsan pm le de bilgilendirme yapabilirsin daha anlaşılır olması bakımından. daha hızlı bir sistem yazılabilir diye düşünüyorum - 05-02-2015, 12:05:06neyse LOAD XML LOCAL INFILE xml yöntemi ile çözdüm.
https://www.r10.net/php/1399759-load-...-hakkinda.html