Escribir una nueva línea en un archivo en PHP (salto de línea)

109

Mi código:

$i = 0;
$file = fopen('ids.txt', 'w');
foreach ($gemList as $gem)
{
    fwrite($file, $gem->getAttribute('id') . '\n');
    $gemIDs[$i] = $gem->getAttribute('id');
    $i++;
}
fclose($file);

Por alguna razón, se escribe \ncomo una cadena, por lo que el archivo se ve así:

40119\n40122\n40120\n42155\n36925\n45881\n42145\n45880

De Google'ing me dice que use \r\n, pero \res un retorno de carro que no parece ser lo que quiero hacer. Solo quiero que el archivo se vea así:

40119
40122
40120
42155
36925
45881
42145
45880

Gracias.

VIVA LA NWO
fuente

Respuestas:

278

Reemplazar '\n'con "\n". La secuencia de escape no se reconoce cuando usa '.

Consulte el manual .

Para la pregunta de cómo escribir finales de línea, vea la nota aquí . Básicamente, los diferentes sistemas operativos tienen diferentes convenciones para los finales de línea. Windows usa "\ r \ n", los sistemas operativos basados ​​en Unix usan "\ n". Debería ceñirse a una convención (yo elegí "\ n") y abrir su archivo en modo binario ( fopendebería obtener "wb", no "w").

Artefacto
fuente
He cambiado "\ r \ n" a "\ n" para el final de mi línea y funcionó. Gracias.
csonuryilmaz
ahora mi código usa ambos "y 'me molesta
Mr PizzaGuy
De hecho, puede notar que \ n se resalta cuando se usa "" pero no cuando se usa ''. (Esto es, si su editor usa resaltado de sintaxis, el mío es Sublime Text 3)
DarkVeneno
68

Utilice PHP_EOLqué salidas \r\no \nsegún el sistema operativo.

Aldarien
fuente
4
No se meta en problemas, utilícelo siempre a \nmenos que desee abrir el archivo en un sistema operativo específico; si es así, use la combinación de nueva línea de ese sistema operativo, y no el sistema operativo en el que está ejecutando PHP ( PHP_EOL).
Alix Axel
60

PHP_EOL es una constante predefinida en PHP desde PHP 4.3.10 y PHP 5.0.2. Vea la publicación manual :

Usar esto le ahorrará codificación adicional en desarrollos multiplataforma.

ES DECIR.

$data = 'some data'.PHP_EOL;
$fp = fopen('somefile', 'a');
fwrite($fp, $data);

Si recorriste esto dos veces, verías en 'algún archivo':

some data
some data
usuario1649798
fuente
23

También puede utilizar file_put_contents():

file_put_contents('ids.txt', implode("\n", $gemList) . "\n", FILE_APPEND);
Alix Axel
fuente