Dosyasını kullanma () aşamalı?

3 Cevap php

Ben bu mümkün ise, ben bir çözüm için googling oldum emin değilim ... Ama, aslında, ben, ben bir dizide saklamak istediğiniz hangi hatları çok büyük bir dosya var. Böylece, () dosyası kullanıyorum, ama gruplar halinde bunu bir yolu var mı? Yarattığı her, diyelim, 100 hatları, bu "duraklar" Öyle mi?

Ben bir foreach döngü ya da bir şey ile yapabileceğiniz bir şey olma olasılığı olduğunu düşünüyorum, ama ben bu konuda doğru yolu düşünüyorum emin değilim ...

Gibi

$i=0;
$j=0;
$throttle=100;

foreach($files as $k => $v) {
  if($i < $j+$throttle && $i > $j) {
     $lines[] = file($v);
     //Do some other stuff, like importing into a db
  }
  $i++;
  $j++;
}

Ama bu gerçekten, çünkü $ i & çalışmaz düşünüyorum $ J her zaman bulanık duygu ... Neyse, eşit olacaktır ... Birisi bana bir lil 'net düşünmek yardımcı olabilir misiniz?

3 Cevap

$ I ya $ j artırılır asla ... Ne yapabilirsiniz, gibi bir şey:

    $data = array();
    $chunk = 100;
    $f = fopen($file, 'r');
    while (!feof($f)) {
        for ($i = 0; $i < $chunk; $i++) {
            $tmp = fgets($f);
            if ($tmp !== false) {
                $data[] = $tmp;
            } else {
                //No more data, break out of the inner loop
                break;
            }
        }
        //Process your data


        $data = array();
    }
    fclose($f);

Bir dizi her satırı ekleyerek, size ihtiyacınız ancak birçok hatları için satır satır dosyasını okuyun. Dizi istenen uzunluk, süreç onu alır, ve dizi boş zaman. Örneğin:

$handle = @fopen("/tmp/inputfile.txt", "r");
$throttle = 100;
$data = array();
if ($handle) {
    while(!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $data[] = $buffer;
        if(count($data) == $throttle) {
            doSomething($data);
            $data = array();
        }
    }
    fclose($handle);
}

http://php.net/manual/en/function.sleep.php: "pause" ile, size gerçekten komut dosyası yürütülmesine, kullanımı, uyku ya da bazı varyantlar duraklatmak istediğiniz anlamına eğer