W3docs

file()

La funzione file() di PHP legge il contenuto di un file e lo memorizza in un array, una riga per elemento. Scopri sintassi, flag e gestione degli errori.

Cos'è la funzione file()?

La funzione file() legge un intero file in un array, dove ogni elemento dell'array corrisponde a una riga del file. È il modo più rapido per ottenere le righe di un file in un array PHP con una sola chiamata — non è necessario aprire un handle, iterare con fgets() o chiudere nulla in seguito.

Usa file() quando vuoi elaborare un file riga per riga: contare le righe, filtrare le voci, leggere un elenco di valori o analizzare un piccolo log. Per ottenere una singola stringa invece di un array, usa file_get_contents(); per scrivere un file in una sola chiamata, usa file_put_contents().

Sintassi

file(string $filename, int $flags = 0, ?resource $context = null): array|false
ParametroDescrizione
$filenamePercorso del file da leggere. Può essere un percorso locale o un URL (se allow_url_fopen è abilitato).
$flagsFacoltativo. Uno o più flag, combinati con l'operatore OR bit a bit (|). Vedi la tabella seguente.
$contextFacoltativo. Una risorsa di contesto stream creata con stream_context_create().

Valore restituito: un array di righe, oppure false in caso di errore (ad esempio, se il file non esiste). Per impostazione predefinita, ogni riga mantiene il carattere di ritorno a capo finale (\n).

Il parametro flags

$flags consente di controllare il modo in cui vengono lette le righe. Combinali con |:

FlagEffetto
FILE_IGNORE_NEW_LINESRimuove il carattere di nuova riga alla fine di ogni riga.
FILE_SKIP_EMPTY_LINESSalta le righe vuote (più utile insieme a FILE_IGNORE_NEW_LINES).
FILE_USE_INCLUDE_PATHCerca il file anche nell'include_path.
<?php
// Lines without trailing "\n", and no blank lines.
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

Come usare la funzione file()

Un esempio autonomo che crea un file, lo legge con file() e itera sulle righe:

<?php

// Create a small file to read.
file_put_contents('myfile.txt', "First line\nSecond line\nThird line\n");

$lines = file('myfile.txt');

foreach ($lines as $lineNumber => $line) {
    echo "Line #{$lineNumber}: " . trim($line) . "\n";
}

Questo stampa:

Line #0: First line
Line #1: Second line
Line #2: Third line

Le chiavi dell'array sono numeri di riga a base zero e i valori sono il contenuto delle righe. Usiamo trim() per rimuovere il carattere di nuova riga finale che file() mantiene per impostazione predefinita — passare FILE_IGNORE_NEW_LINES produrrebbe lo stesso risultato al momento della lettura.

Contare le righe di un file

Poiché file() restituisce un array, count() fornisce direttamente il numero di righe:

<?php

file_put_contents('myfile.txt', "alpha\nbeta\ngamma\n");

$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES);

echo "The file has " . count($lines) . " lines.\n";  // The file has 3 lines.

Gestione degli errori

Quando il file non può essere letto, file() restituisce false ed emette un avviso. Controlla sempre il risultato prima di iterare:

<?php

$lines = @file('does-not-exist.txt');

if ($lines === false) {
    echo "Could not read the file.\n";
} else {
    echo "Read " . count($lines) . " lines.\n";
}

L'operatore @ sopprime l'avviso predefinito, così puoi gestire l'errore autonomamente.

Attenzioni

  • L'intero file in memoria. file() carica tutte le righe in un array in una sola volta. Per file molto grandi, apri un handle con fopen() e leggi riga per riga con fgets().
  • I caratteri di nuova riga vengono mantenuti a meno che non si passi FILE_IGNORE_NEW_LINES. Questo causa problemi nei confronti di stringhe esatti, ad esempio $lines[0] === 'value' fallisce quando l'elemento è in realtà "value\n".
  • Verifica l'esistenza prima se vuoi evitare avvisi: abbinalo a file_exists() oppure sopprimilo con @.

Conclusione

La funzione file() è il modo più semplice per leggere un file in un array di righe in PHP. Usa i flag FILE_IGNORE_NEW_LINES e FILE_SKIP_EMPTY_LINES per ottenere righe pulite, controlla sempre che il valore restituito non sia false e preferisci fgets() per i file troppo grandi da tenere in memoria.

Esercitati

Pratica
Quali funzioni vengono usate in PHP per leggere e scrivere su un file?
Quali funzioni vengono usate in PHP per leggere e scrivere su un file?
Was this page helpful?