MySQL tablodan büyük bir sınırlandırılmış dosyası alma

0 Cevap php

Ben USDA's sitesinden bu büyük (ve garip bir şekilde biçimlendirilmiş txt dosyası) var. Bu NUT_DATA.txt dosyasıdır.

Ama sorun neredeyse 27MB olmasıdır! Ben birkaç diğer küçük dosyaları ithal başarılı oldu, ama benim yöntem ben RAM 27 + mb budak çalışırsanız bir hata atılmış olacağını neden mantıklı file_get_contents hangi kullanıyordum.

Peki nasıl bir zaman aşımı ve RAM sorunu içine çalıştırmadan benim MySQL DB için bu büyük bir dosya aktarabilirim? Ben sadece dosyasından bir defada bir satır alıyorum denedim, ama bu zaman aşımı sorunu içine koştu.

PHP 5.2.0 kullanma.

İşte eski komut dosyası (. Ne numara neyi temsil ettiği besin, bu veriler çok kötü belgesi bulunan kod çirkinlik üzgünüm çözemedim çünkü DB alanlar sadece sayılar vardır):

<?

    $file = "NUT_DATA.txt";

    $data = split("\n", file_get_contents($file)); // split each line

    $link = mysql_connect("localhost", "username", "password");
    mysql_select_db("database", $link);

    for($i = 0, $e = sizeof($data); $i < $e; $i++)
    {
        $sql = "INSERT INTO `USDA` (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17) VALUES(";
        $row = split("\^", trim($data[$i])); // split each line by carrot
        for ($j = 0, $k = sizeof($row); $j < $k; $j++) {
            $val = trim($row[$j], '~');
            $val = (empty($val)) ? 0 : $val;
            $sql .= ((empty($val)) ? 0 : $val) . ','; // this gets rid of those tildas and replaces empty strings with 0s
        }
        $sql = rtrim($sql, ',') . ");";
        mysql_query($sql) or die(mysql_error()); // query the db
    }

    echo "Finished inserting data into database.\n";

    mysql_close($link);

?>

0 Cevap