×

Hướng dẫn viết class để đọc và ghi file .env trong PHP

Việc sử dụng file .env để lưu trữ các biến môi trường là một cách tiếp cận phổ biến trong lập trình PHP, nhất là trong phát triển các ứng dụng web. File này giúp bạn tách các thông tin nhạy cảm, như thông tin xác thực cơ sở dữ liệu, khỏi mã nguồn chính, giúp quản lý dễ dàng hơn và bảo mật tốt hơn. Trong bài viết này, chúng ta sẽ hướng dẫn bạn cách viết một lớp (class) trong PHP để đọc và ghi file .env.

Cấu trúc của file .env

Trước khi bắt đầu viết lớp, chúng ta cần hiểu cấu trúc của file .env. Thông thường, file này chứa các cặp khóa-giá trị, mỗi cặp sẽ được ngăn cách bởi dấu "=". Ví dụ:

DB_HOST=localhost
DB_USER=root
DB_PASS=password
APP_ENV=local

Tạo lớp Env

Bắt đầu với việc tạo một lớp Env có khả năng đọc và ghi các biến môi trường từ file .env. Dưới đây là cách tổ chức lớp này:

Cấu trúc lớp

class Env {
    private $filePath;
    private $variables = [];

    public function __construct($filePath) {
        $this->filePath = $filePath;
        $this->load();
    }

    private function load() {
        if (file_exists($this->filePath)) {
            $lines = file($this->filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
            foreach ($lines as $line) {
                if (strpos(trim($line), '#') === 0) {
                    continue; // Bỏ qua comment
                }
                list($key, $value) = explode('=', trim($line), 2);
                $this->variables[trim($key)] = trim($value);
            }
        }
    }

    public function get($key, $default = null) {
        return isset($this->variables[$key]) ? $this->variables[$key] : $default;
    }

    public function set($key, $value) {
        $this->variables[$key] = $value;
        $this->save();
    }

    public function save() {
        $content = '';
        foreach ($this->variables as $key => $value) {
            $content .= "{$key}={$value}\n";
        }
        file_put_contents($this->filePath, $content);
    }
}

Giải thích lớp

  • __construct($filePath): Hàm khởi tạo nhận đường dẫn của file .env. Hàm này sẽ gọi phương thức load() để nạp dữ liệu từ file.

  • load(): Phương thức này sẽ kiểm tra xem file có tồn tại hay không. Nếu có, nó sẽ đọc từng dòng, bỏ qua các comment (bắt đầu bằng '#') và tách các cặp khóa-giá trị để lưu vào mảng $variables.

  • get($key, $default = null): Phương thức này nhận một khóa và trả về giá trị tương ứng. Nếu khóa không tồn tại, nó sẽ trả về giá trị mặc định được cung cấp.

  • set($key, $value): Phương thức này dùng để thiết lập giá trị cho một khóa và gọi save() để lưu lại file.

  • save(): Phương thức này sẽ ghi lại tất cả các biến vào file .env. Nó tạo một chuỗi chứa tất cả các cặp khóa-giá trị và lưu vào file.

Sử dụng lớp Env

Bây giờ, chúng ta sẽ thấy cách sử dụng lớp Env vừa tạo để đọc và ghi file .env.

// Khởi tạo đối tượng Env
$env = new Env('.env');

// Đọc giá trị
$dbHost = $env->get('DB_HOST', 'default_host');
echo "DB Host: " . $dbHost;

// Thiết lập giá trị mới
$env->set('DB_PASS', 'new_password');

echo "New DB Password: " . $env->get('DB_PASS');

Lưu ý về bảo mật

Khi làm việc với file .env, bạn cần nhớ rằng file này chứa thông tin nhạy cảm. Do đó, hãy đảm bảo rằng file này không bị công khai. Bạn nên thêm nó vào .gitignore trong dự án của mình nếu bạn sử dụng Git để quản lý mã nguồn.

Kết luận

Trong hướng dẫn này, chúng ta đã xây dựng một lớp Env đơn giản để đọc và ghi file .env trong PHP. Việc quản lý các biến môi trường giúp tách biệt mã nguồn và các cấu hình, điều này làm cho mã của bạn an toàn hơn và dễ bảo trì hơn. Bạn có thể mở rộng lớp này bằng cách thêm các tính năng như kiểm tra kiểu dữ liệu, xử lý các trường hợp đặc biệt hơn và ghi lại log khi đọc hoặc ghi file.

Comments