php - example - file_put_contents salto de linea
file_put_contents, file_append y saltos de lĂnea (7)
Estoy escribiendo un script PHP que agrega números a un archivo de texto. Quiero tener un número en cada línea, así:
1
5
8
12
Si uso file_put_contents($filename, $commentnumber, FILE_APPEND)
, el resultado se ve así:
15812
Si agrego un salto de línea como file_put_contents($filename, $commentnumber . "/n", FILE_APPEND)
, los espacios se agregan después de cada número y una línea vacía al final (el subrayado representa espacios):
1_
5_
8_
12_
_
_
¿Cómo consigo esa función para agregar los números de la manera que quiero, sin espacios?
¿Has probado con PHP EOL constante?
file_put_contents($filename, $commentnumber . PHP_EOL, FILE_APPEND)
--- Adicional ---
Me acabo de dar cuenta de que mi editor de archivos hace lo mismo, pero no se preocupe, es solo un personaje fantasma que el editor coloca allí para indicar que hay una nueva línea. Puede probar esto
A file with EOL after the last number looks like: 1_ 2_ 3_ EOF but a file without that last character looks like 1_ 2_ 3 EOF where _ means a space character
Puedes intentar analizar el contenido del archivo usando php para ver qué hay dentro
$lines = explode( PHP_EOL, file_get_contents($file));
foreach($lines as $line ) {
var_dump($line);
}
...difícil
Después de leer su código y sus respuestas, se me ocurrió una teoría ...
Como no puedo ver que haya algún problema con su código, ¿cómo abrió y leyó el archivo? ¿Realmente lo abriste en un editor de texto? ¿Usaste un script PHP para hacerlo? Si es así, abra el archivo con un editor de texto y verifique que haya espacios al final de cada línea. Si hay realmente es ... bueno, ignora el resto de esta respuesta, entonces. Si no, solo sigue leyendo.
Por ejemplo, si usas algo como esto:
<?php
$lines = file($filename);
if($lines) // Error reading
die();
foreach($lines as $line)
echo $line."<br />";
Entonces, siempre habrá un espacio en blanco al final de la línea debido a la forma en que funciona file()
. Asegúrese de que cada $line
no tenga espacios en blanco, como un carácter de nueva línea , al final.
Dado que HTML maneja todos los espacios en blanco (espacios, pestañas, nuevas líneas , etc.) como espacios, si hay un espacio en blanco al final de la $line
, esos aparecerán como espacios en la salida HTML.
Solución: use rtrim($line)
para eliminar los espacios en blanco al final de las líneas. Usando el siguiente código:
<?php
$lines = file($filename);
if($lines) // Error reading
die();
foreach($lines as $line)
echo rtrim($line)."<br />";
no tendría los mismos problemas que el primer ejemplo, y todos los espacios al final de las líneas desaparecerían.
Es porque cada vez que escribes en el archivo, el archivo se está terminando, file_put_contents
inserta un salto de línea adicional al final
No hay nada en el código que proporcionó que generaría esos espacios, a menos que $commentnumber
ya contenga el espacio para empezar. Si ese es el caso, simplemente use trim($commentnumber)
lugar.
Tampoco hay nada en su código que explique las líneas vacías en la parte inferior del archivo, a menos que $commentnumber
pueda ser una cadena vacía. Si ese es el caso, y desea que produzca el número 0
lugar, use intval($commentnumber)
.
Por supuesto, solo necesitas uno de esos dos. Si desea conservar el contenido similar a una cadena, use trim()
; Si siempre desea números enteros, use intval()
, que ya lo recorta automáticamente.
También es posible que accidentalmente escribiste " /n"
lugar de "/n"
en tu código real, pero en el código que publicaste aquí es correcto.
Ohh chicos! Solo usa
/ r / n
insted de / n
molesto registro, lo que tienes allí es absolutamente bien. PHP_EOL y "/ n" son exactamente iguales.
El código que proporcionó no tiene nada de malo, por lo que debe ser el valor de $ commentnumber que tiene un espacio al final. como se indica, ejecute su $ commentnumber a través de la función trim ().
file_put_contents($filename, trim($commentnumber . "/n"), FILE_APPEND);
Buena suerte.
pauls respuesta tiene el enfoque correcto pero tiene un error. Lo que necesitas es lo siguiente:
file_put_contents($filename, trim($commentnumber).PHP_EOL, FILE_APPEND);
La constante PHP_EOL se asegura de usar la línea correcta que termina en los sistemas mac, windows y unix. La función de recorte elimina cualquier nueva línea o espacio en blanco en ambos lados de la cadena. la conversión a entero sería un gran error porque 1. podría terminar teniendo cero, especialmente debido a espacios en blanco o caracteres especiales (de donde provengan ...) 2. Los identificadores no necesariamente tienen que ser enteros