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!
php env getenv putenv
Commentami!