Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Import data from csv
Last Updated: Sep 04 2013 18:54, Started by
tibobirotica
, Sep 03 2013 17:30
·
0
#1
Posted 03 September 2013 - 17:30
salut,
am nevoie de putin ajutor. am un script care citeste date dintr-un csv si le importa in baza de date. csv-ul are peste 5000 de linii si ruleaza mai mult de 30 secunde si mi-l blocheaza serveru. am gasit rezolvarea prin a incerca sa citesc partial csv-ul scriptul pe care-l folosesc este acesta (partial): <?php $file_handle = fopen("fisier.csv", "r"); $counter = 0; while (!feof($file_handle) ) { $line_of_text = fgetcsv($file_handle, 1024," "); echo $line_of_text[0] . " " . $line_of_text[1] . "<br />"; $counter++; if ($counter == 1000) break; } fclose($file_handle); ?>asta imi citeste primele 1000 liniii dupa care urmeaza scriptul de introducere in db vreau sa fac separat alt script care sa citeasca de la linia 1001 la 2000 si nu reusesc . ma poate ajuta cineva? pls? |
#2
Posted 03 September 2013 - 17:45
Cea mai simplă soluţie e prin shell. VPS-urile sunt ieftine în zilele noastre. Hai cron, dacă vrei să cârpeşti.
|
#3
Posted 03 September 2013 - 17:56
Pai cron folosesc. Si nu vreau VPS DEOCAMDATA.
Cer doar ajutorul sa gasesc codul respectiv. |
#4
Posted 03 September 2013 - 18:01
Foloseste o tranzactie in baza de date.
N-ar trebui sa dureze atat pentru doar 5000 de randuri. |
#5
Posted 03 September 2013 - 18:35
Update-ul se face simultan in mai multe tabele.
e vorba de actualizare stocuri in magento. Ma chinui de vrea 3 ore sa nimeresc codul pentru a afisa liniile Edited by tibobirotica, 03 September 2013 - 18:38. |
#6
Posted 03 September 2013 - 19:17
tibobirotica, on 03 septembrie 2013 - 17:56, said:
Pai cron folosesc. Si nu vreau VPS DEOCAMDATA. Cer doar ajutorul sa gasesc codul respectiv. Dacă eşti zgârcit la 2 lei, asta primeşti. Afacerile (magento) serioase nu se ţin pe shared hosting, măcar din motive de securitate (=respect fată de clienţii tăi). |
#7
Posted 03 September 2013 - 19:43
Nu e vorba de bani.
am avut 2 incercari cu VPS si nu m-am descurcat cu configurarea serverului. Imi mergea mai prost decat cu shared. am platit cateva luni numai pentru teste. Nu asta e motivul |
#8
Posted 03 September 2013 - 20:44
Atunci plăteşte oameni competenţi să-ţi facă treaba.
Oricum, problema nu ţine de programare în PHP, ci de limitaţiile pe care le accepţi de la hosting. |
#9
Posted 03 September 2013 - 20:56
OriginalCopy, on 03 septembrie 2013 - 20:44, said:
Atunci plăteşte oameni competenţi să-ţi facă treaba. Oricum, problema nu ţine de programare în PHP, ci de limitaţiile pe care le accepţi de la hosting. Intrebare: vad ca ai peste 15000 mesaje. Ai dat vreunul ontopic? eu intreb de cod si tu o ti cu VPS-ul |
#10
Posted 03 September 2013 - 21:00
|
#11
Posted 03 September 2013 - 22:09
#12
Posted 03 September 2013 - 22:11
Pai cu acea functie "sari" prin fisier. Si te duci acolo unde ai ramas ultima data si mai citesti 1000 linii sau cate vrei tu acolo.
|
#13
Posted 04 September 2013 - 03:09
Nu cred ca o sa'ti dea cineva mura in gura mai ales daca nu pui fisierul e posibil sa nu se 'lipeasca' la fix.
1 - De ce nu faci o functie citeste(fisier) care sa citasca 500-1000 de inregistrari si sa iti returneze continutul? Poti folosi fseek() si ftell() pentru a stii unde te aflii si/sau a te repozitiona. function citeste($file_handler){.....} function save_result($array){....} while(feof($file_handler)){ $result = citeste($file_handler); save_result($result) }2 - Partea cu vps-ul ( ce zicea OC-ul mai sus ) cred ca se referea la configuratia masinii pe care iti ruleaza scriptul. De vazut timpul de executie si memoria alocata in php.ini. Edited by opo, 04 September 2013 - 03:09. |
#14
Posted 04 September 2013 - 15:47
Ai nevoie neaparata de script-ul asta, sau de rezultat, sa bagi in baza de date acel CSV?
|
#15
Posted 04 September 2013 - 16:01
DominatoR, on 04 septembrie 2013 - 15:47, said:
Ai nevoie neaparata de script-ul asta, sau de rezultat, sa bagi in baza de date acel CSV? am un php, pe care-l accesez pe situl unui furnizor, care genereaza un csv. scriptul pe care-l folosesc eu pentru introducerea stocurilor in baza mea de date e urmatorulȘ <?php error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('memory_limit','1024M'); include('app/Mage.php'); Mage::App('default'); //get magento db connection for query $db_query = Mage::getSingleton('core/resource')->getConnection('core_read'); //get magento db connection for update, add, delete sql statements $db_update = Mage::getSingleton('core/resource')->getConnection('core_write'); $filename = 'fisier.php'; if ($handle_file = fopen($filename,'r')); while (($data = fgetcsv($handle_file, 1000, ' '))!== FALSE) //read tab delimited { if ($counter == 1350) break; { $sku= $data[0]; $qty = $data[1]; $exists = $db_query->query("SELECT COUNT(sku) cnt FROM catalog_product_entity WHERE sku = '$sku' LIMIT 1"); $found = (($exists->fetchObject()->cnt) > 0) ? true : false; if ($found == true) //product found, update { $entity_id = getEntityIdBySku($db_query, $sku); updateStockQty ($db_update, $entity_id, $qty); echo 'product $sku inventory updated?'; $sku_success.= $sku; } else { //sku not found, notify by email $body = "SKU#:".$sku." of ".$file." with a qty of ".$qty." was not found in the the inventory"; sendMsg("SKU#:".$sku." not found!",$to,$body); } } $counter++; } fclose($handle_file); $body = "<strong>SKU?S IMPORTED</strong>".$sku_success."<br/>"; sendMsg($file." successfully imported!",$to,$body); closedir($handle); function getEntityIdBySku($db_connection, $sku) //get entity id by its sku { $entity_row = $db_connection->query("SELECT entity_id FROM catalog_product_entity p_e WHERE p_e.sku = '$sku'")->fetchObject(); $entity_id = $entity_row->entity_id; return $entity_id; } function updateStockQty($db_connection, $entity_id, $qty) //updates the stock quantity { $db_connection->query("UPDATE cataloginventory_stock_item s_i, cataloginventory_stock_status s_s SET s_i.qty = '$qty', s_i.is_in_stock = IF('$qty'>0, 1,0), s_s.qty = '$qty', s_s.stock_status = IF('$qty'>0, 1,0) WHERE s_i.product_id = '$entity_id' AND s_i.product_id = s_s.product_id "); } function sendMsg($subject, $to, $body)//sends email { $headers = 'MIME-Version: 1.0' . '\\n'; $headers .= 'Content-type: text/html; charset=iso-8859-1'. '\\n'; $headers .= 'To: '.$to. '\\n'; $headers .= 'From: [email protected]'. '\\n'; } ?>Eu am limitare la 60 secunde. In timpul asta nu imi actualizeaza decat primele 1350-1400 produse. in total sunt 5500. fisierul csv are 2 coloane - cod produs si cantitate. nu inteleg cum draq sa-l sparg in 4 bucati. Ma pricep foarte putin sau deloc . eu vreau sa rulez asta intr-un cron la fiecare 30-60 minute Edited by tibobirotica, 04 September 2013 - 16:01. |
|
#17
Posted 04 September 2013 - 17:14
Da. L-am pus sa se opreasca dupa 1350 linii.
nu am idee cum sa-l fac sa citeasca si urmatoarele 1350 si urmatoarele... |
#18
Posted 04 September 2013 - 17:20
Pai s-a spus cum.
Lasa codul in cauza deoparte pentru moment si joaca-te cu functiile de prelucrare a fisierelor. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users