Bạn không bao giờ nên lưu trữ thông tin đăng nhập nhạy cảm trong mã của mình. Lưu trữ cấu hình trong môi trường là một trong những nguyên lý của ứng dụng mười hai yếu tố. Mọi thứ có khả năng thay đổi giữa các môi trường triển khai – chẳng hạn như thông tin đăng nhập cơ sở dữ liệu hoặc thông tin đăng nhập cho các dịch vụ của bên thứ 3 – nên được trích xuất từ mã thành các biến môi trường
Về cơ bản, tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 là một cách dễ dàng để tải các biến cấu hình tùy chỉnh mà ứng dụng của bạn cần mà không phải sửa đổi. htaccess hoặc máy chủ ảo Apache/nginx. Điều này có nghĩa là bạn sẽ không phải chỉnh sửa bất kỳ tệp nào bên ngoài dự án và tất cả các biến môi trường luôn được đặt bất kể bạn chạy dự án của mình như thế nào - Apache, Nginx, CLI và thậm chí cả máy chủ web tích hợp của PHP. Đó là CÁCH dễ dàng hơn tất cả các cách khác mà bạn biết để thiết lập các biến môi trường và bạn sẽ thích nó
- KHÔNG chỉnh sửa máy chủ ảo trong Apache hoặc Nginx
- KHÔNG thêm cờ
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];
4 vào. tập tin htaccess - DỄ DÀNG di chuyển và chia sẻ các giá trị ENV cần thiết
- TƯƠNG THÍCH với máy chủ web tích hợp của PHP và trình chạy CLI
PHP dotenv là phiên bản PHP của Ruby dotenv gốc
Cài đặt
Cài đặt siêu dễ dàng thông qua Composer
$ composer require vlucas/phpdotenv
hoặc thêm nó bằng tay vào tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];5 của bạn
nâng cấp
Chúng tôi tuân theo phiên bản ngữ nghĩa, có nghĩa là có thể xảy ra các thay đổi vi phạm giữa các bản phát hành chính. Chúng tôi có các hướng dẫn nâng cấp dành cho V2 lên V3, V3 lên V4 và V4 lên V5 tại đây
Cách sử dụng
Tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 thường không được kiểm soát phiên bản vì nó có thể chứa các khóa và mật khẩu API nhạy cảm. Một tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];7 riêng biệt được tạo với tất cả các biến môi trường bắt buộc được xác định ngoại trừ những biến nhạy cảm, do người dùng cung cấp cho môi trường phát triển của riêng họ hoặc được thông báo ở nơi khác cho cộng tác viên dự án. Sau đó, các cộng tác viên của dự án sao chép độc lập tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];7 sang một
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 cục bộ và đảm bảo tất cả các cài đặt đều chính xác cho môi trường cục bộ của họ, điền vào các khóa bí mật hoặc cung cấp các giá trị của riêng họ khi cần thiết. Trong cách sử dụng này, tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 nên được thêm vào tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->safeLoad[];1 của dự án để nó không bao giờ được các cộng tác viên cam kết. Việc sử dụng này đảm bảo rằng sẽ không có mật khẩu nhạy cảm hoặc khóa API nào trong lịch sử kiểm soát phiên bản, do đó ít có nguy cơ vi phạm bảo mật hơn và các giá trị sản xuất sẽ không bao giờ phải được chia sẻ với tất cả các cộng tác viên của dự án
Thêm cấu hình ứng dụng của bạn vào tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 trong thư mục gốc của dự án của bạn. Đảm bảo tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 được thêm vào tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->safeLoad[];1 của bạn để nó không bị mã đăng ký
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];3
Bây giờ hãy tạo một tệp có tên
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];7 và kiểm tra tệp này trong dự án. Điều này phải có các biến ENV mà bạn cần đặt, nhưng các giá trị phải để trống hoặc chứa dữ liệu giả. Ý tưởng là để cho mọi người biết những biến nào được yêu cầu, nhưng không cung cấp cho họ các giá trị sản xuất nhạy cảm
S3_BUCKET="devbucket" SECRET_KEY="abc123"
Sau đó, bạn có thể tải
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 trong ứng dụng của mình bằng
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];
Để chặn ngoại lệ được ném ra khi không có tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9, bạn có thể
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->safeLoad[];
Theo tùy chọn, bạn có thể chuyển tên tệp làm tham số thứ hai, nếu bạn muốn sử dụng tên khác ngoài
S3_BUCKET="devbucket" SECRET_KEY="abc123"9
$ composer require vlucas/phpdotenv1
Tất cả các biến được xác định hiện có sẵn trong siêu toàn cục
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];1 và
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];2
$ composer require vlucas/phpdotenv4
Putenv và Getenv
Việc sử dụng
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];0 và
$ composer require vlucas/phpdotenv12 không được khuyến khích mạnh mẽ do thực tế là các chức năng này không an toàn cho luồng, tuy nhiên vẫn có thể hướng dẫn PHP dotenv sử dụng các chức năng này. Thay vì gọi
$ composer require vlucas/phpdotenv13, người ta có thể gọi
$ composer require vlucas/phpdotenv14, điều này sẽ thêm
$ composer require vlucas/phpdotenv15 đằng sau hậu trường. Các biến môi trường của bạn bây giờ sẽ có sẵn bằng cách sử dụng phương thức
$ composer require vlucas/phpdotenv16, cũng như các biến siêu toàn cầu
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];1
Biến lồng nhau
Có thể lồng một biến môi trường trong một biến môi trường khác, hữu ích để giảm bớt sự lặp lại
Điều này được thực hiện bằng cách gói một biến môi trường hiện có trong
$ composer require vlucas/phpdotenv17 e. g
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];3
Tính bất biến và tùy chỉnh kho lưu trữ
Tính bất biến đề cập đến việc Dotenv có được phép ghi đè lên các biến môi trường hiện có hay không. Nếu bạn muốn Dotenv ghi đè lên các biến môi trường hiện có, hãy sử dụng
$ composer require vlucas/phpdotenv18 thay vì
$ composer require vlucas/phpdotenv19
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];6
Đằng sau hậu trường, điều này đang hướng dẫn "kho lưu trữ" cho phép bất biến hay không. Theo mặc định, kho lưu trữ được định cấu hình để cho phép ghi đè các giá trị hiện có theo mặc định, điều này phù hợp nếu một người đang gọi phương thức "tạo" bằng cách sử dụng
$ composer require vlucas/phpdotenv40 để xây dựng một kho lưu trữ tùy chỉnh hơn
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];30
Ví dụ trên sẽ ghi các giá trị được tải vào
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];1 và
$ composer require vlucas/phpdotenv42, nhưng khi nội suy các biến môi trường, chúng ta sẽ chỉ đọc từ
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];1. Hơn nữa, nó sẽ không bao giờ thay thế bất kỳ biến nào đã được đặt trước khi tải tệp
Bằng một ví dụ khác, người ta cũng có thể chỉ định một tập hợp các biến được phép liệt kê. Tức là chỉ các biến trong danh sách cho phép mới được tải
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];31
Yêu cầu các biến được đặt
PHP dotenv đã tích hợp chức năng xác thực, bao gồm cả việc thực thi sự hiện diện của một biến môi trường. Điều này đặc biệt hữu ích để cho mọi người biết bất kỳ biến bắt buộc rõ ràng nào mà ứng dụng của bạn sẽ không hoạt động nếu không có
Bạn có thể sử dụng một chuỗi duy nhất
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];32
Hoặc một mảng các chuỗi
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];33
Nếu thiếu bất kỳ lọ ENV nào, Dotenv sẽ ném một
$ composer require vlucas/phpdotenv44 như thế này
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];34
Biến rỗng
Ngoài việc chỉ yêu cầu một biến được đặt, bạn cũng có thể cần đảm bảo biến đó không trống
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];35
Nếu biến môi trường trống, bạn sẽ nhận được Ngoại lệ
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];36
Biến số nguyên
Bạn cũng có thể cần đảm bảo rằng biến có giá trị nguyên. Bạn có thể làm như sau
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];37
Nếu biến môi trường không phải là số nguyên, bạn sẽ nhận được Ngoại lệ
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];38
Người ta có thể chỉ muốn thực thi các quy tắc xác thực khi một biến được đặt. Chúng tôi cũng ủng hộ điều này
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];39
Biến Boolean
Bạn có thể cần đảm bảo một biến ở dạng boolean, chấp nhận "true", "false", "On", "1", "Yes", "Off", "0" và "No". Bạn có thể làm như sau
S3_BUCKET="devbucket" SECRET_KEY="abc123"0
Nếu biến môi trường không phải là boolean, bạn sẽ nhận được Ngoại lệ
S3_BUCKET="devbucket" SECRET_KEY="abc123"1
Tương tự, người ta có thể viết
S3_BUCKET="devbucket" SECRET_KEY="abc123"2
Giá trị được phép
Cũng có thể xác định một tập hợp các giá trị mà biến môi trường của bạn phải là. Điều này đặc biệt hữu ích trong các trường hợp chỉ có một số tùy chọn hoặc trình điều khiển thực sự được hỗ trợ bởi mã của bạn
S3_BUCKET="devbucket" SECRET_KEY="abc123"3
Nếu biến môi trường không có trong danh sách các giá trị được phép này, bạn sẽ nhận được một Ngoại lệ tương tự
S3_BUCKET="devbucket" SECRET_KEY="abc123"4
Cũng có thể định nghĩa một biểu thức chính quy mà biến môi trường của bạn phải là
S3_BUCKET="devbucket" SECRET_KEY="abc123"5
Bình luận
Bạn có thể nhận xét tệp
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 của mình bằng ký tự
$ composer require vlucas/phpdotenv46. e. g
S3_BUCKET="devbucket" SECRET_KEY="abc123"6
Phân tích cú pháp mà không cần tải
Đôi khi, bạn chỉ muốn phân tích cú pháp tệp và giải quyết các biến môi trường lồng nhau, bằng cách cung cấp cho chúng tôi một chuỗi và trả lại một mảng cho bạn. Mặc dù điều này đã có thể thực hiện được, nhưng nó hơi khó sử dụng, vì vậy chúng tôi đã cung cấp một cách trực tiếp để thực hiện việc này
S3_BUCKET="devbucket" SECRET_KEY="abc123"7
Điều này hoàn toàn giống như
S3_BUCKET="devbucket" SECRET_KEY="abc123"8
thôi, thay vì cung cấp thư mục để tìm tệp, bạn đã cung cấp trực tiếp nội dung tệp
Ghi chú sử dụng
Khi một nhà phát triển mới sao chép cơ sở mã của bạn, họ sẽ có thêm một bước để sao chép thủ công tệp
$dotenv = Dotenv\Dotenv::createImmutable[__DIR__]; $dotenv->load[];7 sang
S3_BUCKET="devbucket" SECRET_KEY="abc123"9 và điền vào các giá trị của riêng họ [hoặc nhận bất kỳ giá trị nhạy cảm nào từ đồng nghiệp của dự án]
Bảo vệ
Nếu bạn phát hiện ra lỗ hổng bảo mật trong gói này, vui lòng gửi email tới security@tidelift. com. Mọi lỗ hổng bảo mật sẽ được khắc phục kịp thời. Bạn có thể xem chính sách bảo mật đầy đủ của chúng tôi tại đây
Giấy phép
PHP dotenv được cấp phép theo Giấy phép 3 khoản BSD
Dành cho doanh nghiệp
Có sẵn như là một phần của Đăng ký Tidelift
Những người bảo trì của
$ composer require vlucas/phpdotenv49 và hàng nghìn gói khác đang làm việc với Tidelift để cung cấp hỗ trợ thương mại và bảo trì cho các phần phụ thuộc nguồn mở mà bạn sử dụng để xây dựng các ứng dụng của mình. Tiết kiệm thời gian, giảm rủi ro và cải thiện tình trạng của mã, đồng thời trả tiền cho người duy trì chính xác các phụ thuộc mà bạn sử dụng. Tìm hiểu thêm