Escrevendo uma nova linha para um arquivo em PHP (alimentação de linha)

109

Meu 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 algum motivo, ele está sendo escrito \ncomo uma string, então o arquivo tem a seguinte aparência:

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

Do Google, ele me diz para usar \r\n, mas \ré um retorno de carro que não parece ser o que eu quero fazer. Eu só quero que o arquivo fique assim:

40119
40122
40120
42155
36925
45881
42145
45880

Obrigado.

VIVA LA NWO
fonte

Respostas:

278

Substitua '\n'por "\n". A sequência de escape não é reconhecida quando você usa '.

Veja o manual .

Para saber como escrever terminações de linha, consulte a nota aqui . Basicamente, diferentes sistemas operacionais têm diferentes convenções para terminações de linha. O Windows usa "\ r \ n", os sistemas operacionais baseados em Unix usam "\ n". Você deve seguir uma convenção (eu escolheria "\ n") e abrir seu arquivo no modo binário ( fopendeve obter "wb", não "w").

Artefacto
fonte
Mudei "\ r \ n" para "\ n" no final da minha linha e funcionou. Obrigado.
csonuryilmaz
agora meu código usa os dois "e 'me incomoda
Sr. PizzaGuy
Na verdade, você pode notar que \ n fica realçado ao usar "", mas não ao usar ''. (Isto é, se o seu editor usa destaque de sintaxe, o meu é Sublime Text 3)
DarkVeneno
68

Use PHP_EOLquais saídas \r\nou \ndependendo do sistema operacional.

Aldarien
fonte
4
Não tenha problemas, sempre use, a \nmenos que queira abrir o arquivo em um sistema operacional específico - em caso afirmativo, use a combinação de nova linha desse sistema operacional, e não o sistema operacional no qual você está executando o PHP ( PHP_EOL).
Alix Axel,
60

PHP_EOL é uma constante predefinida no PHP desde o PHP 4.3.10 e PHP 5.0.2. Veja a postagem do manual :

Usar isso economizará codificação extra em desenvolvimentos de plataforma cruzada.

IE.

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

Se você repetir isso duas vezes, verá em 'algumarquivo':

some data
some data
user1649798
fonte
23

Você também pode usar file_put_contents():

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