3 commenti php

Le operazioni che generalmente vengono eseguite con i file possno essere molteplici: verificarne l'esistenza, leggere, scrivere, rinominare, copiare, verificare i permessi. Php ci mette a disposizione una gamma di funzioni che, se combinate opportunamente, possono gestire tali operazioni.

 

 

LA FUNZIONE FILE_EXISTS()

La funzione file_exists() verifica se un file esiste. Essa prende come parametro il percorso al file di cui si vuole verificare l'esistenza. Restituisce un valore boleano (TRUE/FALSE).

Essa può essere impiegata per fare controlli interni nello script. Ad esempio:

<?php
$file = "cartella/file.php";
if(!file_exists($file))
   {
   exit ("lo script richiede un file non esistente!");
   }
?>

 

 

LA FUNZIONE FILE_GET_CONTENTS()

La funzione file_get_contents() consente di leggere l'output di un file dentro una stringa

Essa prende come unico paremetro il file (anche esterno al dominio) e ne restituisce l'output: badate che, se si tratta (ad esempio) di un file .php essa non restituirà  il codice sorgente ma l'output (ad esempio l'HTML) da questo generato.

Nel caso il file non viene trovato restituisce FALSE genera un errore di tipo warning.

<?php
echo file_get_contents("http://google.it");
?>

 

 

LA FUNZIONE FILE()

La funzione file() esegue una lettura rigo per rigo di un file. Essa accetta come unico parametro il percorso al file che si desidera leggere ed esegue una lettura del file rigo per rigo restituendo un array in cui ciascun elemento è costituito da un singolo rigo.

La funzione risulta essere molto utile in caso di piccoli database testuali.

<?php
$var = 'cartella/file.txt';

$righi = file($var);

foreach($righi as $key => $rigo)
   {
   echo $rigo.'<br />';
   }
?>

 

 

LA FUNZIONE FILESIZE()

La funzione filesize() serve per conoscere la dimensione di un file (o di una risorsa) presente sul filesystem del server. Essa prende come parametro una stringa indicante il percorso al file e restituisce il un numero indicante i byte del file.

Se il file non viene trovato restituisce FALSE e genera un errore di tipo warning.

<?php
$var = 'cartella/file.txt';
$dimensione = filesize($var);

echo 'La dimensione del file è '. $dimensione;
?>

 

 

LA FUNZIONE UNLINK()

La funzione unlink() elimina un file. Essa accetta validamente come parametro una stringa indicante il percorso al file. Restituisce TRUE in caso di successo, FALSE in caso di fallimento.

<?php
$file_da_cancellare = 'doc.txt';
unlink($file_da_cancellare);
?>

 

 

LA FUNZIONE RENAME()

La funzione rename() rinomina un file. Esso accetta due parametri: il primo è una stringa indicante al percorso al file che deve essere rinominato; il secondo è una stringa indicante il percorso al nuovo file con il nuovo nome. Essa restituisce un valore boleano (TRUE/FALSE), TRUE in caso di successo, FALSE in caso di fallimento.

Se il file da rinominare (primo parametro) non esiste si genera un errore di tipo warning.

Nelle versioni meno recenti di php tale funzione presenta problemi nei sistemi Windows.

<?php
$old_name = 'file.txt';
$new_name = 'myfile.txt';
if(rename($old_name, $new_name) === TRUE)
   {
   echo 'File rinominato';
   }
?>

 

 

LA FUNZIONE COPY()

La funzione copy() copia un file. Esso accetta due parametri: il primo è una stringa indicante al percorso al file che deve essere copiato; il secondo è il percorso (comprensivo del nome del file) in cui sarà destinato la copia file.

Essa restituisce un valore boleano (TRUE/FALSE), TRUE in caso di successo, FALSE in caso di fallimento.

Se nella cartella di destinazione esiste già un file con quel nome esso verrà sovrascritto. Se il file da copiare non esiste genera un errore di tipo warning.

<?php
$file = 'directory/file.txt';
$new_file = 'percorso/myfile.txt';
if(copy($file, $new_file) === TRUE)
   {
   echo 'File copiato';
   }
?>

 

 

LE FUNZIONI IS_WRITABLE() E IS_READABLE()

Le funzioni is_writable() e is_readable() verificano rispettivamente se il file può essere letto e se può essere scritto (dipenderà dai permessi posti alla cartella e/o al file).

Esse prendono come parametro una stringa indicante il percorso al file e daranno come risultato un valore boleano, TRUE se il file può essere letto/scritto.

<?php
$var = 'cartella/file.txt';

if(is_writable($var))
   {
   echo 'Il file può essere scritto';
   }
?>

 

 

LE FUNZIONI FOPEN(), FREAD(), FWRITE(), FCLOSE()

Questo gruppo di funzioni servono rispettivamente per aprire, leggere, scrivere e chiudere un file.

La funzione fopen() serve per aprire un file. Essa richiede due parametri: il primo una stringa indicante il percorso al file; il secondo è una stringa che ci indicherà il tipo di operazione che si desidera effettuare sul file.
Il secondo parametro potrà assumere i seguenti valori:

  • r: Apre il file in modalità di sola lettura
  • r+: Apre il file in modalità di lettura e scrittura
  • w: Apre il file in modalità di sola scrittura cancellando il contenuto esistente. Se il file non esiste, PHP tenta di crearlo.
  • w+: Apre il file in modalità di scrittura e lettura cancellando il contenuto esistente. Se il file non esiste, PHP tenta di crearlo.
  • a: Apre il file in modalità di sola scrittura posizionando il puntatore alla fine del file per l'inserimento. Se il file non esiste, PHP tenta di crearlo.
  • a+: Apre il file in modalità di scrittura e lettura posizionando il puntatore alla fine del file per l'inserimento. Se il file non esiste, PHP tenta di crearlo.


Se l'apertura del file riesce essa restituisce l'identificatore della risorsa (detto anche puntatore o handle), altrimenti restituisce FALSE e genera un errore di tipo warning.

La funzione fread() serve per leggere il file dopo averlo aperto. Essa richiede due parametri: il primo è l'identificatore della risorsa detto anche puntatore, ottenibile con fopen(); il secondo è il numero di byte che si desiderano leggere.
In relazione al secondo parametro, qualora si voglia leggere l'intero file è possibile ricorrere alla funzione filesize() che restituisce le dimensione in byte del file.

Nel caso in cui si volia ottenere l'output di un file, occorre impiegare altre funzioni: funzione file_get_contents() se si desidera ottenere il contenuto del file in una stringa, oppure file() se si desidera trattare in maniera isolata i singoli righi del file.


La fwrite() serve per scrivere una stringa in un file. Essa accetta tre parametri: il primo è l'identificatore della risorsa detto anche puntatore, ottenibile con fopen(); il secondo è la stringa che si desidera scrivere; il terzo è opzionale e ci indica il numero di byte che si desidera scrivere.
Essa restituisce il numero di byte scritti oppure FALSE generando un errore di tipo warning.

La funzione fputs() è analoga a fwite().

La funzione fclose() serve per chiudere la risorsa. Essa accetta come unico parametro l'identificatore della risorsa. Restituisce TRUE in caso di successo, FALSE in caso di fallimento.

Facciamo un esempio in cui utilizzeremo molte delle funzioni sopra descritte:

 

<?php
// indichiamo il file sul quale desideriamo scrivere
$txt = 'documento.txt';

// verifichiamo che il file esiste e può essere letto e scritto
// se è tutto ok apriamo il file
if(!file_exists($txt))
   {
   exit('Il file '.$txt.' non esiste!');
   }
else if(!is_readable($txt))
   {
   exit('Il file '.$txt.' non può essere letto!');
   }
else if(!is_writable($txt))
   {
   exit('Il file '.$txt.' non può essere scritto!');
   }

// se il form è stato inviato
if(isset($_POST['scrivi']))
   {
   // apriamo il file in modalità lettura-scrittura o errore
   $puntatore = fopen($txt, 'a') or die ('Fallimento apertura del file '.$txt);

   // scriviamo sul file o errore
   fwrite($puntatore, $_POST['stringa']) or die ('Fallimento scrittura del file '.$txt);

   // chiudiamo il file
   fclose($puntatore);
   }

// visualizziamo il contenuto del file
$contenuto = file_get_contents($txt);
echo $contenuto;
?>
<form action="" method="post">
<input type="text" name="stringa" />
<input type="submit" name="scrivi" value="scrivi" />
</form>

 

Vai alla lezione successiva

Vai alla lezione precedente

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

3 Commenti presenti

avatar Stefania

Stefania

10 December 2014 ore 21:08

Salve, vorrei mettermi in contatto con lei a proposito di una possibile affiliazione, ma non trovo la sua mail. Un saluto Stefania

avatar oly1982

oly1982

09 August 2012 ore 16:04

@isacco: puoi farlo tranquillamente. Se fai l'upload di uun file puoi attribuirgli lo stesso nome di uno già esistente; ed in pratica questo verrà sostituito.

La funzione che dovrai impiegare è move_uploded_file() e come potrai leggere nel manuale ufficiale "If the destination file already exists, it will be overwritten". Nel tuo caso questa cosa và a tuo favore.

Ho scritto anche un tutorial per eseguire l'upload di un file con php.

avatar isacco

isacco

08 August 2012 ore 16:38

Mi servirebbe un aiuto, prima mi congratulo e ti ringrazio per il materiale, quello che volevo chiederti è così è possibile rinominare un file in una cartella, senza sapere il nome di quel file, (mi spiego meglio io vorrei che in una cartella ci fosse sempre lo stesso file image.jpg ogni immagine che viene caricata lì viene rinominata e sovrascritta alla precedente image.jpg è possibile?

Isacco