file_put_contents()
La funzione file_put_contents() di PHP scrive dati in un file, lo crea se non esiste e sovrascrive il contenuto esistente.
La funzione file_put_contents() scrive una string in un file con una singola chiamata. È il moderno sostituto in una riga della sequenza classica fopen() → fwrite() → fclose(): PHP apre il file, scrive i dati e chiude l'handle per te. Questa pagina tratta la sintassi, i parametri, il valore restituito, i flag per accodare e bloccare, e gli errori più comuni in cui ci si imbatte.
Sintassi
file_put_contents(string $filename, mixed $data, int $flags = 0, ?resource $context = null): int|falseParametri
| Parametro | Obbligatorio | Descrizione |
|---|---|---|
$filename | Sì | Percorso del file in cui scrivere. Se non esiste, PHP lo crea. |
$data | Sì | I dati da scrivere — una string, un array di string (unite senza separatore, come implode('', $array)), oppure una risorsa stream il cui contenuto rimanente viene copiato. |
$flags | No | Una bitmask: FILE_APPEND, LOCK_EX e/o FILE_USE_INCLUDE_PATH. Il valore predefinito è 0 (sovrascrittura). |
$context | No | Una risorsa stream context creata con stream_context_create(), ad esempio per impostare gli header HTTP quando si scrive su uno stream remoto. |
Valore restituito
file_put_contents() restituisce il numero di byte scritti, oppure false in caso di errore. Poiché 0 è un risultato valido (ma falsy) quando si scrive una string vuota, verifica sempre l'errore con il confronto stretto === false anziché un test di veridicità generico.
Scrittura di un file
Per impostazione predefinita la funzione sovrascrive il contenuto esistente del file (o crea il file se mancante):
<?php
$filename = 'myfile.txt';
$data = 'This is some data to be written to the file.';
$bytes = file_put_contents($filename, $data);
if ($bytes === false) {
echo "Failed to write to $filename";
} else {
echo "Wrote $bytes bytes to $filename";
}Output:
Wrote 44 bytes to myfile.txtIl conteggio restituito, 44, è la lunghezza della string in byte.
Accodare invece di sovrascrivere
Passa il flag FILE_APPEND per aggiungere contenuto alla fine del file anziché sostituirne il contenuto — comodo per i file di log:
<?php
$log = 'app.log';
file_put_contents($log, "First line\n", FILE_APPEND);
file_put_contents($log, "Second line\n", FILE_APPEND);
echo file_get_contents($log);Output:
First line
Second lineSenza FILE_APPEND, la seconda chiamata cancellerebbe la prima riga.
Bloccare il file durante la scrittura
Se più processi potrebbero scrivere sullo stesso file contemporaneamente, aggiungi LOCK_EX per acquisire un blocco esclusivo per la durata della scrittura. Combina i flag con l'operatore OR bit a bit (|):
<?php
file_put_contents('counter.txt', "ping\n", FILE_APPEND | LOCK_EX);Questo impedisce a due writer di sovrapporre il loro output e corrompere il file.
Scrittura di un array
Quando $data è un array, i suoi elementi string vengono concatenati senza separatore. Uniscili tu stesso se hai bisogno di delimitatori:
<?php
$lines = ['apple', 'banana', 'cherry'];
file_put_contents('fruits.txt', implode("\n", $lines));
echo file_get_contents('fruits.txt');Output:
apple
banana
cherryErrori comuni
- Fallimento silenzioso per i permessi. Se la directory non è scrivibile, la chiamata restituisce
falseed emette un avviso — non lancia un'eccezione. Controlla il valore restituito (=== false) oppure racchiudi la chiamata e ispezionaerror_get_last(). - La directory padre deve esistere.
file_put_contents()crea il file ma non le directory mancanti. Chiama primamkdir($dir, 0777, true)se necessario. FILE_APPENDnon è lo stesso della sovrascrittura. Dimenticare il flag è la causa più comune del "il mio log viene continuamente cancellato."- I dati vuoti sono validi. Scrivere
''restituisce0, che è falsy — usa=== falseper non confondere una scrittura vuota riuscita con un errore.
Funzioni correlate
file_get_contents()— la controparte in lettura che carica l'intero file in una string.fwrite()— scrittura di livello inferiore quando si ha bisogno di un handle aperto (ad es. molte piccole scritture in un ciclo).fopen()— apre un handle di file per la lettura o la scrittura in streaming.file_exists()— verifica se un file è presente prima di scrivere.
Conclusione
file_put_contents() è il modo più semplice per scrivere una string in un file in PHP: una singola chiamata apre, scrive e chiude il file. Usa FILE_APPEND per aggiungere contenuto a un file, LOCK_EX per writer concorrenti, e verifica sempre il successo con un controllo stretto === false.