2010-06-18 6 views
80

Il mio codice:Scrivi nuova linea di file in PHP

$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); 

Per qualche ragione, è la scrittura \n come una stringa, quindi il file è simile al seguente:

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

Da Google'ing mi dice di usare \r\n, ma \r è un ritorno a capo che non sembra essere quello che voglio fare. Voglio solo che il file assomigli a questo:

40119 
40122 
40120 
42155 
36925 
45881 
42145 
45880 

Grazie.

risposta

219

Sostituire '\n' con "\n". La sequenza di escape non viene riconosciuta quando si utilizza '.

Vedere manual.

Per la domanda su come scrivere la fine della linea, vedere la nota here. In sostanza, diversi sistemi operativi hanno convenzioni diverse per le terminazioni di linea. Windows usa "\ r \ n", i sistemi operativi basati su unix usano "\ n". È necessario attenersi a una convenzione (avrei scelto "\ n") e aprire il file in modalità binaria (fopen dovrebbe avere "wb", non "w").

+0

Grazie mille, dovrebbero hanno pensato che io :) io posso solo accettare la tua risposta in 9 minuti, ma quando Posso farlo. –

+0

Ho cambiato "\ r \ n" in "\ n" per la mia riga che termina e ha funzionato. Grazie. – csonuryilmaz

18

È inoltre possibile utilizzare file_put_contents():

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

Usa PHP_EOL che emette \r\n o \n seconda del sistema operativo.

+4

Non metterti nei guai, usa sempre '\ n' a meno che tu non voglia aprire il file in un sistema operativo specifico - se è così, usa la combinazione newline di quel SO, e non il sistema operativo su cui stai eseguendo PHP (' PHP_EOL '). –

44

PHP_EOL è una costante predefinita in PHP da PHP 4.3.10 e PHP 5.0.2. Vedere la pubblicazione manual:

L'utilizzo di questo consente di risparmiare ulteriore codifica sugli sviluppi multipiattaforma.

IE.

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

Se loop attraverso questo due volte si dovrebbe vedere in 'somefile':

some data 
some data