Gestire i file env in PHP senza framework

Mattepuffo's logo
Gestire i file env in PHP senza framework

Gestire i file env in PHP senza framework

Siamo abituati al fatto che i framework usano i file .env per gestire le varie configurazioni.

Ma, ad esempio, in un mio progetto personale voglio usare questi files senza usare framework.

Come possiamo fare?

Con una semplice classe PHP; considerate che PHP ha le varie funzioni putenv e getenv per gestire le variabili d'ambiente

Partiamo da un esempio di file .env:

APP_NAME=MY_APP
APP_ENV=dev

Qui sotto una classe di esempio:

class MyEnv {

    protected $path;

    public function __construct(string $path) {
        if (file_exists($path)) {
            $this->path = $path;
        } else {
            throw new \InvalidArgumentException('Il file non esiste!');
        }
    }

    public function load(): void {
        $lines = file($this->path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        foreach ($lines as $line) {

            if (strpos(trim($line), '#') === 0) {
                continue;
            }

            list($name, $value) = explode('=', $line, 2);
            $name = trim($name);
            $value = trim($value);

            if (!array_key_exists($name, $_SERVER) && !array_key_exists($name, $_ENV)) {
                putenv(sprintf('%s=%s', $name, $value));
                $_ENV[$name] = $value;
                $_SERVER[$name] = $value;
            }
        }
    }

}

Ovviamente l'eventuale eccezione per il file non esistente gestitela come meglio credete.

Comunque in sostanza cosa facciamo:

  • leggiamo il file riga per riga
  • se comincia con il cancelletto vuole dire che la riga è commentata e la saltiamo
  • sennò spezziamo la riga dove c'è il segno =
  • controlliamo che la chiave non esista nell'oggetto globale $_SERVER
  • se non esiste l'aggiungiamo

Possiamo richiamare questa classe così:

include_once './lib/config/MyEnv.php';

(new MyEnv(__DIR__ . '/.env'))->load();
echo getenv('MY_APP');

Enjoy!


Condividi

Commentami!