¿Cómo puedo saber qué línea un recurso de archivo se encuentra actualmente “en” en PHP?

StackOverflow https://stackoverflow.com/questions/1352598

  •  20-09-2019
  •  | 
  •  

Pregunta

Uso de PHP, es posible leer el contenido de un archivo utilizando fopen y fgets. Cada vez que se llama fgets, devuelve la siguiente línea en el archivo.

¿Cómo fgets saben línea de lo que leen? En otras palabras, ¿cómo sabe que la última leer la línea 5, por lo que debe devolver el contenido de la línea 6 en esta ocasión? ¿Hay alguna manera para que tenga acceso a esos datos, número de línea?

(Sé que es posible hacer algo similar mediante la lectura de todo el contenido del archivo en una matriz con file, pero me gustaría lograr esto con fopen.)

¿Fue útil?

Solución

Hay una "posición" guardado en la memoria para cada archivo que se abre; que se actualiza automáticamente cada vez que usted está leyendo una línea / personaje / lo que sea a partir del archivo.

Usted puede obtener esta posición con ftell , y modificarlo con < a href = "http://php.net/manual/en/function.fseek.php" rel = "nofollow noreferrer"> fseek :

  

ftell - Devuelve la posición actual   de la lectura de archivos / puntero de escritura

     

fseek - una búsqueda sobre un apuntador de archivo

También puede utilizar rebobinar para rebobinar ... ... la posición de ese puntero.


Esto no se está recibiendo una posición como un número de línea, pero más cerca de una posición como una serie de caracteres (en realidad, que está recibiendo la posición como número de bytes desde el principio del archivo) ; cuando se tiene que leer una línea es sólo un metter de lectura de caracteres hasta yu alcanzó un carácter de fin de línea.


Por cierto: por lo que yo recuerdo, estas funciones están llegando desde el lenguaje C - PHP en sí está escrito en C; -)

Otros consejos

Los archivos son sólo un flujo de datos, leer desde el principio hasta el final. El sistema operativo recordará la posición que ha leído hasta ahora en ese archivo. Si es necesario, hacerlo en la aplicación, así es bastante simple. El sistema operativo sólo se preocupa por posiciones de bytes sin embargo, no líneas.

Imagínese tratar a cabo una baraja de 52 cartas en secuencia. Que la mano de la primera tarjeta. 2. La próxima vez la tarjeta. Cuando se quieren dar a conocer la tarjeta 3., que no es necesario para empezar a contar de nuevo desde el principio, o incluso recordar dónde estaba usted acaba de repartir la siguiente carta disponibles, y ese será el tercero.

Puede ser que sea un poco más de trabajo que se necesita para leer las líneas, ya que querrías para amortiguar los datos leídos del archivo real por el bien Preformance, pero no es mucho más que para registrar el desplazamiento de la última pieza de datos que se entregarán a cabo, encontrar el siguiente carácter de nueva línea y de la mano de todos los datos entre los 2 puntos.

PHP ni el sistema operativo realmente no tiene necesidad de mantener el número de línea en todo, ya que todo el sistema de atención acerca es "siguiente línea". Si usted quiere saber el número de línea, se mantiene un contador y se incrementará cada vez que su aplicación lee una línea.

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

}

i haber esta vieja muestra i vitrocerámica su puede ayudarle a:)

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

$linenr = 5;

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

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

Se podía llamar y fgets incrementar un $line_number var cada vez que la llame. Eso te lo diría a la línea que se encuentra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top