Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Love Lies Bleeding - 2024

Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...
 Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...
 problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...

Jante noi shitbox
 Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani
 

Import data from csv

- - - - -
  • This topic is locked This topic is locked
21 replies to this topic

#1
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Cea mai simplă soluţie e prin shell. VPS-urile sunt ieftine în zilele noastre. Hai cron, dacă vrei să cârpeşti.

#3
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013
Pai cron folosesc. Si nu vreau VPS DEOCAMDATA.
Cer doar ajutorul sa gasesc codul respectiv.

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Foloseste o tranzactie in baza de date.
N-ar trebui sa dureze atat pentru doar 5000 de randuri.

#5
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Posttibobirotica, 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
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013
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
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
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
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013

View PostOriginalCopy, 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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,604
  • Înscris: 30.07.2003
http://php.net/manua...ction.fseek.php
Iar de aici pui in aplicare scenariul.

#11
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013

View Postneagu_laurentiu, on 03 septembrie 2013 - 21:00, said:

http://php.net/manua...ction.fseek.php
Iar de aici pui in aplicare scenariul.

merci mult de raspuns.
din pacate nu ma duce sa-mi dau seama ce dreaq tre sa-i fac. imi plesneste capul...

#12
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,604
  • Înscris: 30.07.2003
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
opo

opo

    Senior Member

  • Grup: Senior Members
  • Posts: 2,591
  • Înscris: 24.08.2006
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
DominatoR

DominatoR

    Member

  • Grup: Members
  • Posts: 374
  • Înscris: 24.09.2006
Ai nevoie neaparata de script-ul asta, sau de rezultat, sa bagi in baza de date acel CSV?

#15
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013

View PostDominatoR, 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 Posted Image.

eu vreau sa rulez asta intr-un cron la fiecare 30-60 minute

Edited by tibobirotica, 04 September 2013 - 16:01.


#16
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,604
  • Înscris: 30.07.2003
Codul postat e scris de tine ?

#17
tibobirotica

tibobirotica

    New Member

  • Grup: Members
  • Posts: 12
  • Înscris: 03.09.2013
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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,604
  • Înscris: 30.07.2003
Pai s-a spus cum.
Lasa codul in cauza deoparte pentru moment si joaca-te cu functiile de prelucrare a fisierelor.

Anunturi

Chirurgia spinală minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate