Corso PHP: 19 – Leggere e scrivere files (Parte 2^)

c) Lettura di un intero file in un array.

Si può leggere un intero file in un array anziché in una stringa come visto precedentemente. Com’è piuttosto ovvio gli elementi dell’array saranno costituiti dalle righe del file. La funzione da utilizzare è file() che ha la seguente sintassi:

array file (string $filename [, int $use_include_path [, resource $context ]])

La funzione è utile per leggere un file di testo che abbia i caratteri di linefeed alla fine di ciascuna riga. Da notare che il carattere di linefeed verrà mantenuto alla fine di ciascun elemento dell’array.

Se si verifica un errore, la funzione restituisce FALSE.

Il funzionamento di file() può comportare alcuni problemi nel caso di caratteri speciali e non solo. Guardiamo il seguente esempio:

<?php
$file = file('fileread_test.php');  // Sorgente dello script
foreach($file as $NumRiga => $Riga) {
   echo "Riga #<b>{$NumRiga}</b> : " . $Riga . "<br>";
}
?>

In cui listiamo lo script php che stiamo eseguendo.

Il risultato a video sarà il seguente:

Riga #0 : Riga #1 : $file = file(‘fileread_test.php’); // Sorgente dello script
Riga #2 : foreach($file as $NumRiga => $Riga) {
Riga #3 : echo “Riga #{$NumRiga} : ” . $Riga . “
“;
Riga #4 : }
Riga #5 : ?>

Come si può vedere la prima riga (Riga #0 corrispondente a <?php)  è completamente omessa; inoltre il <br> viene assimilato al linefeed spezzando così la riga in due.

d) Lettura di un carattere di un file.

Può essere letto un carattere da un file usando la funzione fgetc che ha la seguente sintassi:

string fgetc (resource $handle)

$handle rappresenta il puntatore al file che viene fornito dalla funzione fopen(). La funzione ritorna una stringa contenente un solo carattere letto dal file. Ovviamente si tratta del primo carattere del file.

Se si verifica un errore, la funzione restituisce FALSE.

Per esempio si potrebbe scrivere una funzione perchiedere una conferma all’utente come segue:

 

<?php
echo 'Confermi la cancellazione? (S/N)) ';
$input = fgetc(STDIN);
return $input;
?>

e) Lettura di una riga di un file.

Si può legger un’intera riga di caratteri da un file con la funzione fgets() che ha la sintassi seguente:

string fgets (resource $handle, int $length)

$handle è il puntatore al file che viene fornito dalla funzione fopen().Viene restituita una stringa di lunghezza $length – 1 byte, a meno che non venga incontrato prima il carattere di newline oppure la fine del file. Il parametro $length è opzionale; se omesso, si assume come lunghezza 1024 bytes.

Per il test se è stata raggiunta la fine del file si usa la funzione feof() per il cui utilizzo si veda il punto successivo.

Se si verifica un errore, la funzione restituisce FALSE.

Per esempio per leggere un file riga per riga si può usare uno script di questo genere:

 

<?php
$handle = fopen("/MiaDir/testfile.txt", "r");
while (!feof($handle)) {
   $riga = fgets($handle, 4096);
   echo $riga;  // Trattamento singola riga
}
fclose($handle);
?>

Check su fine file.

Per testare se si è raggiunta la fine del file si deve usare la funzione feof() con la seguente sintassi:

bool feof (resource $handle)

La funzione restituisce TRUE se si è raggiunta la fine del file. Ovviamente $handle è il puntatore al file che viene fornito dalla funzione fopen().

Un esempio dell’utilizzo di questa funzione è stato visto nello script precedente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *