Tôi có thể sử dụng .env trong php không?

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/phpdotenv
1

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/phpdotenv
4

Putenv và Getenv

Việc sử dụng

$dotenv = Dotenv\Dotenv::createImmutable[__DIR__];
$dotenv->load[];
0 và
$ composer require vlucas/phpdotenv
12 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/phpdotenv
13, người ta có thể gọi
$ composer require vlucas/phpdotenv
14, điều này sẽ thêm
$ composer require vlucas/phpdotenv
15 đằ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/phpdotenv
16, 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/phpdotenv
17 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/phpdotenv
18 thay vì
$ composer require vlucas/phpdotenv
19

$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/phpdotenv
40 để 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/phpdotenv
42, 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/phpdotenv
44 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/phpdotenv
46. 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/phpdotenv
49 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

Có an toàn để sử dụng không. tập tin env?

Như. các tệp env được lưu trữ ở dạng văn bản thuần túy [không chỉ các biến môi trường trong bộ nhớ], chúng có nguy cơ bị người dùng trái phép đọc mà không có dấu vết kiểm tra về quyền truy cập và các thay đổi được thực hiện.

Ngôn ngữ nào. tập tin env được viết bằng?

Tệp chỉ đóng vai trò là cấu hình 'văn bản', được mô-đun phân tích cú pháp. Cấu hình đã phân tích cú pháp được sử dụng làm cơ sở để thêm các biến môi trường. Vì vậy, bản thân tệp env không thực sự được viết bằng bất kỳ ngôn ngữ lập trình nào .

Làm cách nào tôi có thể lấy biến môi trường trong PHP?

Sử dụng getenv[] . Nếu hàm được gọi mà không có đối số, thì nó sẽ trả về tất cả các biến môi trường có sẵn. Tuy nhiên, nếu một đối số được truyền, thì giá trị của biến môi trường có tên đó sẽ được trả về.

PHP có biến môi trường PATH không?

Mở Bảng điều khiển -> Cài đặt hệ thống và bảo mật -> Hệ thống
Nhấp vào Cài đặt hệ thống nâng cao
Nhấp vào nút Biến môi trường
Trong Biến hệ thống, chọn biến Đường dẫn và nhấp vào nút `Chỉnh sửa`
Trong Popup mới, nhấp vào nút `Mới` và thêm một hàng mới với C. \PHP7

Chủ Đề