Práce s velkým souborem a uložení dat do databáze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zool
Člen | 144
+
0
-

Ahoj chtěl jsem se zeptat, chtěl jsem v presenteru načíst poměrně velký soubor cca 20MB a uložit data do databáze, používám verzi 2.0.10 a nette/database. Ale pokud jsem začal šahat do databáze, tak mi program napíše, že alokuji hodně paměti. Soubor načítám asi takto

$radek = file(WWW_DIR . "/soubory/data/data.txt");
 foreach($radek as $rad)
        {
		$data = explode("|",$this->UTF($rad));
		$dataa['id']           = intval($data[1]);
           	$dataa['kod']   = $dataa['id'];
            	$data = explode("|",$this->UTF($rad));
		if($this->zbozi->get($dataa['id']))
               		$id = $this->zbozi->update($dataa['id'], $dataa);
            	else
            	{
                	$dataa['datum']   = new \Nette\DateTime();
                	$id = $this->zbozi->insert($dataa);
            	}
	unset($dataa);
	unset($data);
	}

Nevíte kde by mohl být zakopaný pes? Když to udělám mimo nette, tak to jede bez problému.

vvoody
Člen | 910
+
0
-

Skús to čítať a súčasne spracúvať riadok po riadku http://php.net/…on.fgets.php aby si nemusel držať v pamäti celý obsah súboru

zool
Člen | 144
+
0
-

To jsem zkoušel a stejný výsledek.
Asi takto

$fp = fopen(WWW_DIR . "/soubory/data/PDK066.TXT", 'rb');
while(($rad = fgets($fp,1024)) !== false)//foreach($radek as $rad)//
        {
            //$dat = $this->UTF($rad);
            $data = explode("|",$this->UTF($rad));
.
.
.

Editoval zool (19. 4. 2013 5:59)