2011-11-17 12 views
7

Ho il seguente codice ma sto cercando di accorciarlo per essere praticamente una o due righe siccome sono sicuro che il mio valutazione del se non è necessario, c'è comunque il codice qui sotto può essere abbreviato per anche una linea singolare?E 'possibile fare "se il file esiste poi aggiungi, altrimenti crea un nuovo file" più breve di questo

if(file_exists($myFile)) 
    { 
     $fh = fopen($myFile, 'a'); 
     fwrite($fh, $message."\n"); 
    } 
    else 
    { 
     $fh = fopen($myFile, 'w'); 
     fwrite($fh, $message."\n"); 
    } 
+0

Qual è il motivo per accorciarlo? – Marcus

+3

Il [PHP Manual for 'fopen'] (http://php.net/fopen) indica chiaramente' a': * "Apri solo per scrittura, posiziona il puntatore del file alla fine del file. esiste, tenta di crearlo. "* - quindi qual è la domanda? – Gordon

risposta

41
if (file_exists($myFile)) { 
    $fh = fopen($myFile, 'a'); 
    fwrite($fh, $message."\n"); 
} else { 
    $fh = fopen($myFile, 'w'); 
    fwrite($fh, $message."\n"); 
} 
fclose($fh); 

==

if (file_exists($myFile)) { 
    $fh = fopen($myFile, 'a'); 
} else { 
    $fh = fopen($myFile, 'w'); 
} 
fwrite($fh, $message."\n"); 
fclose($fh); 

==

$fh = fopen($myFile, (file_exists($myFile)) ? 'a' : 'w'); 
fwrite($fh, $message."\n"); 
fclose($fh); 

== (perché a controlla se il file esiste e crea se non)

$fh = fopen($myFile, 'a'); 
fwrite($fh, $message."\n"); 
fclose($fh); 

==

file_put_contents($myFile, $message."\n", FILE_APPEND); 

... naturalmente, file_put_contents() è solo meglio se è l'unica scrittura che si esegue su un dato maniglia. Se hai altre chiamate allo fwrite() sullo stesso handle di file, è meglio andare con la risposta di @ Pekka.

4
$method = (file_exists($myFile)) ? 'a' : 'w'; 
$fh = fopen($myFile,$method); 
fwrite($fh, $message."\n"); 
2
$fh = file_exists($myFile) ? fopen($myFile, 'a') : fopen($myFile, 'w'); 
fwrite($fh, $message."\n"); 
+0

Ma perché? Che senso ha il controllo, in primo luogo? –

+0

La tua risposta ha più senso :) – matino

16

Umm ... perché? a già fa quello che ti serve fuori dalla scatola.

Aperto solo per scrittura; posiziona il puntatore del file alla fine del file. Se il file non esiste, provare a crearlo.

+0

+1 Stavo pensando allo stesso ma non ricordavo la bandiera – Sarfraz

3

fopen(). modalità a tutto ciò di cui hai bisogno.

+0

scusa, errore mio. modificato – legiero

1

La modalità di aggiunta fa già solo ciò che descrivi. Dalla pagina del manuale PHP per fopen:

'a': aperto solo per scrittura; posiziona il puntatore del file alla fine del file. Se il file non esiste, provare a crearlo.

2
$fh = (file_exists($myFile)) ? fopen($myFile,'a') : fopen($myFile,'w'); 
fwrite($fh, $message."\n"); 
1

Secondo il manuale di PHP questo dovrebbe essere sufficiente. Vedere la description of "a"

fopen($myFile, "a"); 
fwrite($fh, $message."\n"); 
+1

Manca ';' dopo 'fopen ($ myFile," a ")' – stealthyninja

+1

risolto. Grazie – Bluewind

0

credo che la modalità a (append) lo fa già ... accodare se esiste, altrimenti creare nuovi

fopen($myFile, "a"); 
0
$method = (file_exists($myFile)) ? 'a' : 'w'; 

$fh = fopen($myFile,$method); 

fwrite($fh, $message."\n"); 

Non è forse $ myFile contiene assoluto percorso/relativo ..?

Problemi correlati