Nasıl bir dosya kaynak "on" şu anda satır ne söyleyebilirsiniz

4 Cevap php

PHP kullanarak, fopen ve fgets kullanarak bir dosyanın içeriğini kapalı okumak mümkündür. Her zaman fgets denir, bu dosyada bir sonraki satırı döndürür.

Nasıl gelmez fgets know ne satır okumak için? Diğer bir deyişle, nasıl o son satırı 5 okumak olduğunu biliyor, bu yüzden hattı 6 içindekilerin bu kez dönmesi gerekir? Bana bu hat numarası verilere erişmek için bir yolu var mı?

(Ben file ile bir diziye dosyanın tüm içeriğini okuyarak benzer bir şey yapmak mümkün olduğunu biliyorum, ama ben fopen ile bunu gerçekleştirmek istiyorum.)

4 Cevap

Açılan her dosya için hafızada tutulur bir "pozisyon" yoktur; bu otomatik dosyadan bir satır / karakter / ne olursa olsun okuduğunuz her zaman güncellenir.

Sen ile bu pozisyon alabilirsiniz ftell , and modify it with fseek :

ftell — Returns the current position of the file read/write pointer

fseek - Bir dosya tanıtıcısı üzerinde Arıyor

Ayrıca ... sarmak için ... Bu işaretçi konumunu rewind kullanabilirsiniz.


This is not getting you a position as a line number, but closer to a position as a character number (actually, you are getting the position as a number of bytes from the beginning of the file) ; when you have that, reading a line is just a metter of reading characters until yu hit an end of line character.


BTW : as far as I remember, these functions are coming from the C language -- PHP itself being written in C ;-)

Dosyalar sonuna kadar baştan okumak, veri sadece bir akışı vardır. OS bu dosyada şimdiye kadar okuduğum konumunu hatırlar. Gerekirse, hem de uygulamada bu sayede oldukça basittir. OS yalnızca bayt pozisyonları değil, olsa çizgiler umurunda.

Sadece 52 kart sırayla bir güverte uğraşan hayal. Sen ilk kartı kapalı el. Bir dahaki sefere 2.. Kartı. Eğer 3. Kartını vermek istediğinizde, tekrar baştan saymaya başlamak gerekmez, hatta size sadece bir sonraki kartı dağıtmak nerede hatırlayarak, ve üçüncü olacak.

Eğer preformance uğruna gerçek dosyadan okunan veri tampon isterdim, çünkü satırları okumak için gereken, biraz daha fazla iş olabilir, ama bu size verilerin son parça ofset kaydetmek için daha kendisine çok daha fazla değil dağıttı, yeni satır karakteri bulmak ve bu 2 nokta arasındaki tüm verileri elini.

Ilgili tüm sistem bakım "sonraki satır" olduğu PHP ne OS etrafında satır sayısını tutmak için gerçek bir ihtiyaç vardır. Eğer satır numarasını bilmek istiyorsanız, bir sayaç tutmak ve bunu app bir satır okur her zaman artırmak.

$lineno=0;
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    lineno++; // keep track of the line number
     ...

}

i onun size yardımcı olabilir hob bu eski örneği hav :)

$File = file('path');
$array = array();

$linenr = 5;

foreach( $File AS $line_num => $line )
{
$array = array_push( $array , $line );
}

echo $array[($linenr-1)];

Sadece fgets aramak ve bir var $line_number Her zaman onu aramak artırmak olabilir. Bu size üzerinde olduğu çizgi söylerdim.