2010-07-19 19 views
6

Escribo un código y debo escribir un número en una línea específica. Esto es lo que tengo hasta ahora:Escribir en línea específica en PHP

<?php 

$statsloc = getcwd() . "/stats/stats.txt"; 
$handle = fopen($statsloc, 'r+'); 

for($linei = 0; $linei < $zone; $linei++) $line = fgets($handle); 
$line = trim($line); 
echo $line; 

$line++; 
echo $line; 

No sé por dónde continuar después de esto. Necesito escribir $ line en esa línea, manteniendo todas las otras líneas.

+0

Esta afirmación es bastante ambigua: "Necesito escribir $ line en esa línea" ¿Qué es lo que realmente intentas lograr "escribiendo $ line en 'esa' línea?" –

+1

¿Sabe que el bucle 'for' está seleccionando la línea numerada $ zone en este momento y sin hacer nada más? Si es así, hay formas más fáciles de hacerlo. – waiwai933

+0

Estoy confundido. Necesito acceder a esa línea, extraer los datos, agregar uno y luego volver a escribir. Eso es todo lo que necesito. – Robert

Respuesta

14

puede utilizar el archivo para obtener el archivo como un conjunto de líneas, a continuación, cambie la línea que necesita, y volver a escribir todo el lote de nuevo al archivo.

<?php 
$filename = getcwd() . "/stats/stats.txt"; 
$line_i_am_looking_for = 123; 
$lines = file($filename , FILE_IGNORE_NEW_LINES); 
$lines[$line_i_am_looking_for] = 'my modified line'; 
file_put_contents($filename , implode("\n", $lines)); 
+0

Supuse que necesitas modificar una línea, no inyectar una nueva, si necesitas inyectar una nueva ver la respuesta de deceze, en cuanto a la diferencia entre join e implode, no hay ninguna, join es un alias de implode. – nathan

+0

Le he arrebatado a 'FILE_IGNORE_NEW_LINES' su respuesta, es una buena idea incluirlo. :) – deceze

+0

@deceze bienvenido, no hay problema y buena idea – nathan

4

Esto debería funcionar. Sin embargo, será bastante ineficiente si el archivo es demasiado grande, por lo que depende de su situación si esta es una buena respuesta o no.

$stats = file('/path/to/stats', FILE_IGNORE_NEW_LINES); // read file into array 
$line = $stats[$offset]; // read line 
array_splice($stats, $offset, 0, $newline); // insert $newline at $offset 
file_put_contents('/path/to/stats', join("\n", $stats)); // write to file 
+0

No estoy seguro de cómo encaja esto con el código que ya tengo. ¿Me puede ayudar? ¿Por favor? – Robert

+0

Disculpa, esta pieza es bastante autoexplicativa, tendrás que probarla tú mismo. – deceze

0

Lo he encontrado hoy y quería resolverlo con las 2 respuestas publicadas pero eso no funcionó. Tuve que cambiarlo a esto:

<?php 
$filepathname = "./stats.txt"; 
$target = "1234"; 
$newline = "after 1234"; 

$stats = file($filepathname, FILE_IGNORE_NEW_LINES); 
$offset = array_search($target,$stats) +1; 
array_splice($stats, $offset, 0, $newline); 
file_put_contents($filepathname, join("\n", $stats)); 
?> 

Debido a que estas líneas no funcionan ya que el Arg de la matriz no es un índice:

$line = $stats[$offset]; 
$lines[$line_i_am_looking_for] = 'my modified line'; 

tuvo que añadir que tienen 1 a la nueva línea debajo del texto buscado.

Cuestiones relacionadas