Escrevendo uma nova linha para arquivar no PHP (Feed de linha)
Pergunta
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, está escrevendo \n
Como uma string, então o arquivo se parece com o seguinte:
40119\n40122\n40120\n42155\n36925\n45881\n42145\n45880
Do Google'ing, me diz para usar \r\n
, mas \r
é um retorno de carruagem 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.
Solução
Substituir '\n'
com "\n"
. A sequência de fuga não é reconhecida quando você usa '
.
Veja o manual.
Para a questão de como escrever finais de linha, consulte a nota aqui. Basicamente, diferentes sistemas operacionais têm convenções diferentes para finais de linha. O Windows usa " r n", sistemas operacionais baseados em UNIX usam " n". Você deve seguir uma convenção (eu escolhi " n") e abrir seu arquivo no modo binário (fopen
deve obter "wb", não "w").
Outras dicas
Usar PHP_EOL
quais saídas \r\n
ou \n
dependendo do sistema operacional.
PHP_EOL é uma constante predefinida no PHP desde o PHP 4.3.10 e o PHP 5.0.2. Veja o manual Postagem:
Usar isso economizará codificação extra em desenvolvimentos de plataforma cruzada.
Ou seja.
$data = 'some data'.PHP_EOL;
$fp = fopen('somefile', 'a');
fwrite($fp, $data);
Se você se enrolasse por isso duas vezes veria em 'SomeFile':
some data
some data
Você também pode usar file_put_contents()
:
file_put_contents('ids.txt', implode("\n", $gemList) . "\n", FILE_APPEND);