lunedì 30 agosto 2021

PHP: Salvare una variabile in un file php


Un post per utenti avanzati che utilizzano php per scrivere programmi lato server....

Stavo scrivendo qualche pagina php per un nuovo sito e mi si è posto il problema di creare un login  per vari utenti ma senza usare un database (tipo MySQL, ecc.).

Mi sono ricordato che con php il server può scrivere file con poche linee di codice ed anche che si può serializzare le variabili (mettere un’intera istanza in una stringa, per poi poterla riconvertire in istanza facendo l’unserialize), perciò ho scritto qualche linea, ma ancora non ero soddisfatto.

Il nuovo problema che mi si presentava era quello che il contenuto del file serializzato era visualizzabile dal browser (conoscendo il nome del file php), così con un piccolo escamotage ho aggiunto <?php /* all'inizio del file e */ ?> alla fine e il gioco è fatto! La stringa non appare più ma la variabile è recuperabile! 

La soluzione che quindi ho trovato è stata di creare un file php vuoto (ad es. db.php) poi un file che ho chiamato varIO.php :

<?php
    
/* **********************************************************************************
*     REGISTRA UNA VARIABILE IN UN FILE .PHP PER NASCONDERE I RECORDS 
*
*   in pratica aggiunge <?php all'inizio e ?> alla fine del file e serializza 
* la variabile per poterla scrivere e successivamente rileggerla
*     $php_file_Name DEVE ESSERE UN FILE VUOTO CON ESTENSIONE .php
* GAMA 2021 http://trucchimac.blogspot.com
* ***********************************************************************************/

// es: saveSerializedVar($variable_to_save,"db.php");

//es: $saved_var =  getSerializedVar("db.php")

// **********************************************************************************

 function saveSerializedVar($variable,$php_file_Name){

$content = serialize($variable);
$save = "<?php /* ".$content." */ ?>";
$fh = fopen($php_file_Name, 'w') or die("can't open file");
fwrite($fh, $save);
fclose($fh);
 }

 function getSerializedVar($php_file_Name){
if (filesize($php_file_Name)>0){
        $fh = fopen($php_file_Name, 'r');
        $theData = fread($fh, filesize($php_file_Name));
        fclose($fh);
      } else {return "File error";}
 
$theData = substr($theData, 9,-6);

      return unserialize($theData); // return the variable
 }

?>

A questo punto mi è bastato includere il file varIO.php  nella pagina login.php:

<? php
include " varIO.php";

e salvare tutti gli user in un' array multidimensionale, quindi scrivendo :

saveSerializedVar($variabile_da_salvare,"db.php");

il server riscriverà il file db.php (che richiamato da browser non scrive nulla).

Ora quando mi servirà l'array salvato mi basterà inizializzare una variabile con i dati scritti nel file db.php:

 $variabile_recuperata =  getSerializedVar("db.php");

e tutti i dati contenuti saranno di nuovo disponibili!

Nessun commento: