+2

Quản lý các biến môi trường với phpdotenv

Chào mọi người, bài viết này mình muốn giới thiệu về 1 package không phải xa lạ gì với PHP Developer đó là phpdotenv. Cùng theo dõi bài viết của mình nhé 😃

Phpdotenv là gì?

Chắc hẳn trong khi code, bạn sẽ gặp trường hợp cần setting các biến môi trường (environment) cho các môi trường khác nhau mà không muốn đẩy biến môi trường này lên github đúng không? VD: Thông tin Database hay AWS chẳng hạn... Vậy phpdotenv sẽ hỗ trợ bạn làm việc này một cách trơn tru mà không phải lo lắng gì cả.

Link github: phpdotenv (PHP dotenv)

Cài đặt

Install with composer

php composer.phar require vlucas/phpdotenv

Cách sử dụng

Sử dụng cơ bản

File .env

URL = "http://example.com"

File sample.php

<? php

require_once  './vendor/autoload.php' ;

// The argument specifies the directory where the ".env" file is located 
$ dotenv  =  new  Dotenv\Dotenv(DIR); 
$ dotenv->load();

echo  getenv('URL');    // http://example.com 
echo  $_ENV['URL'];     // http://example.com 
echo  $_SERVER['URL'];  // http://example.com

Thêm comments vào file .env

Thêm comment bằng dấu #

.env

# comment 1
URL = "http://example.com" # comment 2

sample.php

<? php

require_once './vendor/autoload.php' ;

$ dotenv  =  new Dotenv\Dotenv(DIR); 
$ dotenv->load();

echo  $_ENV['URL'];     //http://example.com

Sử dụng các biến môi trường trong file như một biến thông thường bằng dấu ${}

.env

SUBDOMAIN = "hoge"
URL = "http://${SUBDOMAIN}.example.com"

sample.php

<? php

require_once  './vendor/autoload.php' ;

$dotenv  =  new Dotenv\Dotenv(DIR); 
$dotenv->load();

echo $_ENV['URL'];     //http://hoge.example.com

Sử dụng file khác ngoài .env

Bạn có thể sử dụng file khác mặc định bằng cách thêm biến thứ hai khi tạo mới một đối tượng Dotenv

hoge.env

URL = "http://hoge.example.com"

sample.php

<? php
require_once  './vendor/autoload.php' ;

// Specify the file name as the second argument 
$dotenv = new Dotenv\Dotenv(DIR , 'hoge.env'); 
$dotenv->load();

echo $_ENV['URL'];     //http://hoge.example.com

Overwrite trong phpdotenv

Trong trường hợp 2 file đều có biên môi trường giống nhau, khi sử dụng biến môi trường trong file sau sẽ không thể ghi đè lên biến môi trường của file trước.

File .env

SUBDOMAIN = "hoge"
URL = "http://${SUBDOMAIN}.example.com"
HOGE = ".env"

File .env2

SUBDOMAIN = "fuge"
URL = "http://${SUBDOMAIN}.example2.com"
FUGE = ".env2"

Action default

<? php

require_once  './vendor/autoload.php' ;

$dotenv = new Dotenv\Dotenv(DIR); 
$dotenv->load();

$dotenv = new Dotenv\Dotenv(DIR , ".env2"); 
$dotenv->load();

print_r($_ENV);

/*
Array
(
    [SUBDOMAIN] => hoge
    [URL] => http://hoge.example.com
    [HOGE] =>.env
    [FUGE] =>.env2
)
*/

Các biến môi trường trong file hoge.envfuge.env đã được đọc, nhưng SUBDOMAIN và URL không được ghi đè

Action overwrite

Nếu bạn muốn ghi đè các biến môi trường hãy sử dụng phương thức overload()

<? php

require_once  './vendor/autoload.php' ;

$dotenv = new Dotenv\Dotenv(DIR); 
$dotenv->load();

$dotenv = new Dotenv\Dotenv(DIR, ".env2"); 
$dotenv->overload();

print_r($_ENV);

/*
Array
(
    [SUBDOMAIN] => fuge
    [URL] => http://fuge.example2.com
    [HOGE] =>.env
    [FUGE] =>.env2
)
*/

Các biến môi trường trong file hoge.envfuge.env đã được đọc và SUBDOMAIN và URL đã được ghi đè.

Các loại biến môi trường

Các biến dưới đây đều được coi là string

SAMPLE_1="true"
SAMPLE_2=true
SAMPLE_3="1"
SAMPLE_4=1

Required trong phpdotenv

phpdotenv có một phương thức required. Ví dụ dưới đây sẽ throw Dotenv\Exception\ValidationException nếu SAMPLE_1 không được khai báo

<? php

require_once './vendor/autoload.php' ;

$dotenv = new Dotenv\Dotenv(DIR); 
$dotenv->load(); 
$dotenv->required('SAMPLE_1');

Bạn có thể chỉ định một mảng

// throw an exception if both environment variables are not set 
$dotenv->required (['SAMPLE_ 1' ,  'SAMPLE_2']);

Hoặc chỉ định thêm method đằng sau

// If SAMPLE_1 is a number => OK 
$dotenv->required('SAMPLE_1')->isInteger();
// If SAMPLE_1 is numeric and 100 or 101 => OK 
$ dotenv->required('SAMPLE_1')->isInteger()->allowedValues([100 , 101]); 

Phương thức required có thể được sử dụng khi ứng dụng của bạn muốn kiểm tra nội dung một cách chặt chẽ.

Như vậy mình đã giới thiệu cho các bạn cách quản lý các biến môi trường với backage phpdotenv. Cảm ơn mọi người đã theo dõi bài viết của mình 😃)


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.