Author Archive for stefo

Page 2 of 3

Reindirizzare verso un’altra pagina

Questo è il metodo per reindirizzare l'utente su un'altra pagina con php. Ad esempio, volendolo reindirizzare su nomepagina.php ...

PHP:
  1. header ("Location: nomepagina.php");

E' importante ricordarsi che questo comando non può essere utilizzato dopo un qualsiasi output html, ma sempre prima.

Cancellare un file

La cosa importante da ricordare quando si vuole eliminare un file è che non bisogna fare riferimento al solo file ma a dove il file si trova all'interno del server. La funzione da utilizzare è
unlink(file)
Ecco come:

PHP:
  1. $percorsofile="/var/percorso/directory/file.txt";
  2. if (file_exists($percorsofile)) {
  3.     unlink($percorsofile);
  4. }

Appunti: Avere i giusti permessi di scrittura.

Inviare una mail in modo semplice

La funzione che permette di inviare mail in php è mail():
mail(destinatario, oggetto, corpo, headers)
Per sfruttare questa funzione nel modo più semplice possibile è sufficente specificare destinatario, oggetto, e corpo (messaggio) della mail. Il paramentro headers è opzionale (te lo spiegherò poi)
Ecco come fare.

PHP:
  1. <?php
  2. $destinatario="indirizzo@destinatario.com";
  3. $oggetto="Oggetto della maill";
  4. $corpo="Questo è il testo che vuoi inviare";
  5. mail($destinatario, $oggetto, $corpo);
  6. ?>

Upload di file

Eseguire upload di file con php non è molto complicato, almeno scrivento un codice di livello base.
Primo accorgimento ovviamente è assicurarsi di eseguire l'upload su una directory scrivibile (chmod 777 per i server linux).
Inoltre è importante ricordare di mettere sempre il parametro multipart/form-data nei form di invio.
Lo script che ti mostro di seguito come esempio, comprende sia il form di invio che il codice per effettuare l'upload, tutto su un unico file, upload.php.
Prima il form...

PHP:
  1. <form method="post" action="upload.php" enctype="multipart/form-data">
  2.     <input type="file" name="file_da_uplodare">
  3.     <input type="submit" value="Invia">
  4. </form>

e poi la parte di codice che tratterà il file da caricare...

PHP:
  1. <?php
  2. // definisce la directory dove va uplodato il file
  3. $directory = 'directoryupload/';
  4. // verifica l'esistenza del file
  5. if (isset($_FILES['file_da_uplodare'])) {
  6.     $file_temporaneo= $_FILES['file_da_uplodare']['tmp_name'];
  7.     $nome_file = $_FILES['file_da_uplodare']['name'];
  8.         //esegue l'upload e controlla che vada a buon fine
  9.     if (move_uploaded_file($file_temporaneo, $directory  . $nome_file)){
  10.         echo "Il file è stato caricato";
  11.     } else {
  12.         echo "Si è verificato un errore durante l'upload";
  13.     }
  14. }
  15. ?>

Utili modifiche che si possono fare a questo script potrebbero ad esempio riguardare l'implementazione di codice per:

  • controllare la dimensione del file che si vuole caricare;
  • rinominare il file in modo univoco in modo da evitare sovrascritture;
  • ecc...

Download di file senza svelarne il percorso

Può essere utile in alcuni casi permettere il download di files senza però mostrarne il percorso e quindi la directory dove sono contenuti.
Utile nei casi in cui si vuole impedire di sfogliare la directory non svelandola, appunto (anche se sarebbe sempre meglio impedirlo direttamente dall'httpd.conf o con un file .htaccess)
Oppure quando i file sono in una directory all'interno del server ma non raggiungibile via web.
Il link non deve quindi essere verso il file da scaricare ma verso una pagina php (es. download.php) alla quale passerai il nome del file come variabile, in questo modo:

HTML:
  1. <a href="download.php?file=nomefile.zip">Scarica</a>

il file download.php sarà invece strutturato così.

PHP:
  1. <?php
  2. $file=$_GET['file'];
  3. $percorso="/var/percorso/directory/download/";
  4. $percorso_file=$percorso.$file;
  5. $dimensione_file=filesize($percorso_file);
  6. header("Content-Type: application; name=".$file);
  7. header("Content-Transfer-Encoding: binary");
  8. header("Content-Length: ".$dimensione_file);
  9. header("Content-Disposition: inline; filename=".$file);
  10. header("Expires: 0");
  11. header("Cache-Control: no-cache, must-revalidate");
  12. header("Cache-Control: private");
  13. header("Pragma: public");
  14. readfile($percorso_file);
  15. ?>

Update: inoltre con poche altre righe di php, utilizzando questo sistema è possibile monitorare il download.

Cancellare un cookie

Già visto come inizializzare un cookie.
Cancellarlo è ancora più semplice. Basta infatti renderlo scaduto.
Eccoti l'esempio di come cancellare un cookie chiamato nome_visitatore

PHP:
  1. setcookie("nome_visitatore", "", time()-9999);

Estensione di un nome di file

Può essere utile ricavare l'estensione dal nome di un file di cui ad esempio si è fatto l'upload e lo si vuole rinominare con un nome univoco. Chiaramente l'estensione in questo caso non va cambiata, è quindi necessario estrappolarla dal nome del file e conservala.
Ecco una funzione che può essere di aiuto in questo senso.

PHP:
  1. function estensione($nome){
  2.     $trova_punto = explode(".", $nome);
  3.     $estensione = $trova_punto[count($trova_punto) - 1];
  4.     $estensione = strtolower($estensione);
  5.     if (isset($trova_punto[1]) == FALSE){
  6.         return "Nessuna estensione";
  7.     }
  8.     return $estensione;
  9. }
  10. $file="pippo.jpg";
  11. echo estensione($file); /// restituisce jpg

Formattare un testo

Chi fa il web master o il web developer sa che una delle cose più fastidiose è quando il cliente fornisce i testi scritti tutto in maiuscolo. Altrettanto fastidioso è quando un cliente ha l'amministrazione dei contenuti del sito e, appunto, ha il brutto vizio a scrivere tutto in maiscolo.
Con questa funzione il testo viene riformattato con il primo carattere dopo il punto in maiuscolo, e il resto in minuscolo.
Di particolare importanza 2 funzioni:

PHP:
  1. $text="TEST. TESTO MAIUSCOLO. COME FARE.";
  2.  
  3. function formatta_testo ($stringa){
  4.     $stringa = explode ('.', $stringa);
  5.     $n = count ($stringa);
  6.     for ($i = 0; $i <$n; $i++){
  7.         $stringa[$i]  = ucfirst(strtolower (trim ($stringa[$i])));
  8.         if ($i> 0){
  9.             $stringa[$i] = '&nbsp;' . $stringa[$i];
  10.         }
  11.     }
  12.     $stringa = implode ('.', $stringa);
  13.     return $stringa;
  14. }
  15.  
  16. echo formatta_testo ($text); // Test. Testo maiuscolo. Come fare.

Inizializzare un cookie

Per inizializzare un cookie con php si utilizza la funzione
setcookie(nome, valore, scadenza, percorso, dominio, sicurezza);
che va messa all'inizio dello script.
I parametri, di facile lettura:

  • nome: è il nome che avrà il cookie;
  • valore: il valore del cookie;
  • scadenza: indica quando scadrà il cookie in secondi;
  • percorso: del server su cui il cookie sarà disponiblie
  • dominio: il dominio relativo
  • sicurezza: se settato su TRUE il cookie si inizializza solo se esiste una connessione https (possiamo tralasciare)

Supponiamo di voler chiedere ad un visitatore il suo nome per registrarlo su un cookie e salutarlo ogni volta che ritorna sul sito.
Per prima cosa nella pagina index.php verifichiamo che il cookie non esista già, se non esiste chiediamo al visitatore di inserire il suo nome tramite un semplice form che invierà le informazioni a set_cookie.php, altrimenti possiamo già salutarlo chiamandolo per nome.

PHP:
  1. <?php
  2. $the_cookie=$_COOKIE['nome_visitatore'];
  3.  
  4. if (empty($the_cookie)) {
  5.     echo "  <form method=\"post\" action=\"set_cookie.php\">
  6.           Ciao, come ti chiami?
  7.           <input type=\"text\" name=\"nome\" />
  8.           <input type=\"submit\" name=\"Submit\" value=\"Submit\" />
  9.           </form>";
  10.  } else {
  11.      echo "Ciao ".$the_cookie."!";
  12.  }
  13.  ?>

in set_cookie.php avremo dunque il recupero del nome inviato e l'inizializzazione del cookie.

PHP:
  1. <?php
  2. $nome_da_registrare=$_POST['nome'];
  3. setcookie("nome_visitatore",$nome_da_registrare, time()+3600, "/");
  4.  
  5. echo "Cookie inizializzato, <a href=\"index.php\">Torna indietro</a>";
  6. ?>

N.B.
time()+3600 -> equivale a un'ora.
"/" -> il coockie è valido per tutto il dominio
il paramentro dominio può essere tralasciato se non esistono subdomini

Contare i caratteri di una stringa

Prendo spunto da una chiave di ricerca utilizzata per arrivare qua.
Contare i caratteri di una stringa in php è molto semplice perchè esiste già una funzione adatta a questo scopo:
strlen($stringa)
Una cosa da tenere sempre presente è che gli spazi vuoti sono considerati un carattere come qualsiasi altro e vengono quindi conteggiati.

PHP:
  1. $stringa = "sempreverde";
  2. echo strlen($stringa); // il risultato sarà 11
  3.  
  4. $stringa = "stringa con spazi vuoti";
  5. echo strlen($stringa); // il risultato sarà 23