_env tập tin php ví dụ

Các biến môi trường là một cách tuyệt vời để định cấu hình các ứng dụng PHP vì chúng giữ các cài đặt của ứng dụng bên ngoài mã. Bằng cách này, việc ngăn thông tin xác thực bảo mật bị lộ, duy trì ứng dụng và sử dụng ứng dụng trên nhiều môi trường sẽ dễ dàng hơn

Trong hướng dẫn này, bạn sẽ tìm hiểu về một số cách trong đó các biến môi trường có thể được thiết lập và truy xuất trong các ứng dụng PHP. Bằng cách đó, ứng dụng của bạn có thể truy cập tất cả thông tin cần thiết, chẳng hạn như khóa API, tệp đã tải lên, chuỗi truy vấn và dữ liệu biểu mẫu

Cách truy cập các biến môi trường trong PHP

Sử dụng Superglobals của PHP

Một trong những cách phổ biến nhất mà các biến môi trường được truy cập trong PHP là thông qua việc sử dụng Superglobals. Đây là các biến tích hợp, được xác định trước, có sẵn trong tất cả các phạm vi. Được khởi tạo bởi bộ thực thi PHP, chúng tổ chức thông tin môi trường của PHP theo cách (hầu hết) hợp lý và hiệu quả, do đó bạn chỉ cần tham khảo một mảng để lấy thông tin bạn cần

Ví dụ:

echo apache_getenv('NAME');
3 chứa các tiêu đề yêu cầu, đường dẫn và vị trí tập lệnh,
echo apache_getenv('NAME');
4 chứa các biến phiên và
echo apache_getenv('NAME');
5 chứa các biến được chuyển đến tập lệnh hiện tại khi được gọi bằng phương thức HTTP POST

Điều đó nói rằng, có một số điều cần lưu ý

  • Đầu tiên, tùy thuộc vào cách thiết lập, một hoặc nhiều mảng Superglobal có thể trống. Điều này rất quan trọng để kiểm tra xem ứng dụng của bạn có phụ thuộc vào một Superglobal cụ thể hay không
  • Thứ hai, các biến chứa trong
    echo apache_getenv('NAME');
    
    3 và
    echo apache_getenv('NAME');
    
    8 (chứa các biến được nhập từ môi trường mà trình phân tích cú pháp PHP đang chạy) có thể trùng lặp với nhau, tùy thuộc vào ngữ cảnh của tập lệnh. Điều này có thể gây nhầm lẫn nếu bạn mong đợi các khóa là duy nhất trên tất cả các Siêu toàn cầu

Sự khác biệt giữa môi trường SAPI/CGI và CLI

Ngoài chỉ thị

echo apache_getenv('NAME');
6, môi trường cũng đóng một vai trò trong việc xác định thông tin nào trong Superglobals. Cụ thể, nếu ứng dụng của bạn đang chạy bằng CGI, FastCGI hoặc SAPI, thì
echo apache_getenv('NAME');
3, ngoài các biến thông thường, sẽ được điền bằng các biến môi trường. Ngoài ra, nếu bạn đang sử dụng PHP CLI, thì chỉ
echo apache_getenv('NAME');
3 sẽ được đặt

Sử dụng getenv()

Ngoài việc sử dụng Superglobals của PHP, bạn cũng có thể sử dụng getenv() để truy xuất một biến môi trường. 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ề

Bạn có thể xem các ví dụ về cách sử dụng của nó bên dưới

________số 8_______

Như với Superglobals của PHP, có một nhược điểm khi sử dụng chức năng này. Trích dẫn tài liệu của chức năng

Nếu PHP đang chạy trong SAPI, chẳng hạn như Fast CGI, thì hàm này sẽ luôn trả về giá trị của một biến môi trường do SAPI đặt, ngay cả khi putenv() đã được sử dụng để đặt một biến môi trường cục bộ có cùng tên. Sử dụng tham số
# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
2 để trả về giá trị của các biến môi trường được đặt cục bộ

Xin lưu ý rằng

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
3 không phải là chủ đề an toàn

Sử dụng apache_getenv()

Nếu bạn đang sử dụng Apache làm máy chủ web của mình thì bạn có một chức năng bổ sung mà bạn có thể sử dụng. apache_getenv(). Hàm này truy xuất một biến môi trường được đặt trong quy trình Apache. Bạn có thể xem một ví dụ về việc sử dụng nó dưới đây

echo apache_getenv('NAME');

Đừng hoàn toàn tin tưởng vào các biến môi trường

Điều quan trọng cần nhấn mạnh là — bất kể dữ liệu đến từ đâu, cho dù dữ liệu đến từ một trong các Superglobals của PHP, cấu hình máy chủ web hay môi trường hoạt động — không hoàn toàn tin tưởng vào nó. Các biến môi trường phải được lọc và xác thực giống như bất kỳ dữ liệu nào khác bên ngoài ứng dụng của bạn

Cách đặt biến môi trường

Ngoài việc đọc các biến môi trường, bạn cũng nên biết cách đặt chúng, theo cách đó, bạn biết cách thay đổi chúng khi cần thiết. Trong các ví dụ sau, chúng ta sẽ đặt một biến môi trường,

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
4, thành "Robert Smith", ca sĩ chính của ban nhạc rock người Anh The Cure

Đặt chúng trong môi trường

Trước khi khởi động máy chủ web hoặc thực thi tập lệnh PHP, bạn có thể đặt các biến môi trường trong môi trường hiện tại

Nếu bạn muốn tìm hiểu sâu hơn về cách thiết lập các biến môi trường, Dominik Kundel đã viết một bài blog chi tiết về nó

UNIX, Linux và macOS

Nếu bạn đang sử dụng một trong ba hệ điều hành này hoặc một biến thể chẳng hạn như BSD, thì có ba phạm vi mà bạn có thể đặt biến môi trường

  • Có sẵn cho môi trường hiện tại (phiên) và tất cả các phiên con
  • Chỉ có sẵn cho phiên hiện tại
  • Chỉ có sẵn cho một quá trình cụ thể

Bạn có thể xem ví dụ về cả ba trong đoạn mã dưới đây

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php

Microsoft Windows

Đặt biến môi trường hơi khác một chút trong Microsoft Windows. Bạn có thể đặt chúng qua Bảng điều khiển hoặc bạn có thể đặt chúng trong dấu nhắc lệnh hoặc bảng điều khiển PowerShell. Có những ví dụ về hai cái sau dưới đây

# Set NAME in the Windows Command Prompt
set NAME="Robert Smith"

# Set NAME in the Windows PowerShell console
$Env:NAME = "Robert Smith"

Sử dụng docker

Nếu đang sử dụng Docker, bạn có thể đặt biến môi trường trong Dockerfiles bằng lệnh

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
5, như trong ví dụ bên dưới

ENV NAME "Robert Smith"

Nếu bạn đang xây dựng cấu hình nhiều vùng chứa bằng Docker Compose, bạn có thể đặt các biến môi trường trong docker-compose. yml bằng khóa môi trường, như trong ví dụ bên dưới

environment:
  - NAME="Robert Smith"

Có một số cách khác để đặt biến môi trường khi làm việc với Docker, bạn có thể đọc về cách này trong tài liệu Docker Compose

Sử dụng putenv()

Sử dụng chức năng này, bạn có thể đặt giá trị của biến môi trường — và bỏ đặt giá trị đó — trong yêu cầu hiện tại. Trong yêu cầu tiếp theo, biến, nếu được đặt ngoài yêu cầu hiện tại, sẽ trở về giá trị ban đầu

Các biến được đặt theo cách này cũng có sẵn cho các quy trình được gọi bởi tập lệnh đó và chỉ có sẵn bằng cách gọi

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
3

Bạn có thể xem một ví dụ về cả hai chức năng trong đoạn mã dưới đây

// Set the environment variable, NAME.
putenv('NAME="Robert Smith"');

// Retrieve the environment variable, NAME.
echo getenv('NAME');

// Unset the environment variable, NAME.
putenv('NAME');

Xin lưu ý rằng

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
7 không phải là chủ đề an toàn

Sử dụng

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
8 Tương tự như
# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
7, là
# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
8. Hàm này đặt biến môi trường dành riêng cho quy trình Apache. Đương nhiên, chức năng này và phần bổ sung của nó chỉ khả dụng khi sử dụng Apache. Bạn có thể xem một ví dụ về việc sử dụng nó dưới đây

apache_setenv('NAME', 'Robert Smith');
echo apache_getenv('NAME');

Đặt biến môi trường trong cấu hình NGINX

Nếu bạn đang sử dụng NGINX làm máy chủ web của mình, bạn có thể sử dụng để đặt biến môi trường. Chỉ thị có tên và giá trị phân biệt chữ hoa chữ thường, phải được trích dẫn nếu nó chứa khoảng trắng

fastcgi_param NAME "Robert Smith";

Các biến này có sẵn thông qua

# Available to the current environment (session) and all child sessions.
export NAME="Robert Smith"

# Available only to the current session.
NAME="Robert Smith"

# Available only to a specific process.
NAME="Robert Smith" php script.php
3 và trong các mảng siêu toàn cục
echo apache_getenv('NAME');
8 và
echo apache_getenv('NAME');
3

Đặt biến môi trường trong cấu hình Apache

Nếu bạn đang sử dụng Apache làm máy chủ web của mình thì bạn có thể sử dụng lệnh

# Set NAME in the Windows Command Prompt
set NAME="Robert Smith"

# Set NAME in the Windows PowerShell console
$Env:NAME = "Robert Smith"
5 để đặt biến môi trường. Lệnh này có thể được sử dụng trong cấu hình máy chủ chính của Apache, cấu hình máy chủ ảo, cấu hình thư mục hoặc. tập tin htaccess

Chỉ thị có tên và giá trị phân biệt chữ hoa chữ thường, phải được trích dẫn nếu nó chứa khoảng trắng. Nếu không có giá trị nào được cung cấp, biến sẽ được khởi tạo thành một chuỗi rỗng

SetEnv NAME "Robert Smith"

Không giống như sử dụng

# Set NAME in the Windows Command Prompt
set NAME="Robert Smith"

# Set NAME in the Windows PowerShell console
$Env:NAME = "Robert Smith"
1 trong NGINX, các biến môi trường được đặt bằng cách sử dụng
# Set NAME in the Windows Command Prompt
set NAME="Robert Smith"

# Set NAME in the Windows PowerShell console
$Env:NAME = "Robert Smith"
5 trong Apache (hoặc một trong các chức năng liên quan) chỉ khả dụng trong
echo apache_getenv('NAME');
3 Superglobal

sử dụng. tập tin env

Mặc dù mỗi cách trên đều có ưu điểm nhưng có một số nhược điểm cần lưu ý

  • Chúng có thể khó duy trì theo thời gian, dựa trên mức độ phức tạp của dự án
  • Không có danh sách trung tâm của các biến môi trường bắt buộc, chi tiết về chức năng của một biến đã cho, cũng như các loại dữ liệu được phép của chúng

Một cách tiếp cận khác, một cách tiếp cận đã đạt được sức hút đáng kể trong PHP trong những năm gần đây, là sử dụng các tệp dotenv, được đặt tên theo tên tệp thực tế. . env. Đây là các tệp văn bản thuần túy xác định các biến môi trường cần thiết để ứng dụng hoạt động dưới dạng danh sách các cặp khóa/giá trị

Bạn có thể xem một ví dụ dưới đây

echo apache_getenv('NAME');
0

Giả sử rằng ví dụ trên là. env cho dự án của mình, chúng ta có thể sử dụng một gói chẳng hạn như vlucas/phpdotenv, gói này đọc. env, theo mặc định và thêm các biến được xác định trong chúng vào

echo apache_getenv('NAME');
8 và
echo apache_getenv('NAME');
3 Superglobals

Để làm điều đó, trước tiên chúng tôi sẽ cài đặt gói dưới dạng phụ thuộc ứng dụng bằng cách chạy lệnh bên dưới

echo apache_getenv('NAME');
1

Sau đó, chúng tôi sẽ sử dụng gói để tải các biến môi trường, như trong ví dụ bên dưới

echo apache_getenv('NAME');
2

  • Sử dụng
    ENV NAME "Robert Smith"
    
    1 thay vì
    ENV NAME "Robert Smith"
    
    2 để tránh ném ngoại lệ nếu không tìm thấy
    ENV NAME "Robert Smith"
    
    3
  • Truyền đường dẫn tệp làm tham số thứ hai cho
    ENV NAME "Robert Smith"
    
    4 để sử dụng tệp khác với
    ENV NAME "Robert Smith"
    
    3

Một lưu ý về. bảo mật tập tin env

Điều quan trọng là phải nhận thức được rằng. các tệp env không được lưu trữ dưới sự kiểm soát phiên bản

Nếu điều đó xảy ra, tất cả các lợi ích bảo mật của việc sử dụng tệp dotenv sẽ bị mất vì bất kỳ dữ liệu nhạy cảm nào chứa trong chúng đều có sẵn cho bất kỳ ai có thể truy cập vào kho lưu trữ. Đó là lý do tại sao việc loại trừ chúng khỏi kiểm soát phiên bản là phổ biến, chẳng hạn như bằng cách thêm. env (và các biến thể của tên tệp) thành dự án. tập tin gitignore khi sử dụng Git

Đó là cách làm việc với biến môi trường trong PHP

Tôi hy vọng bài viết này đã giúp bạn hiểu cách sử dụng các biến môi trường trong các dự án PHP của bạn. Bạn có cách nào khác để làm việc với các biến môi trường không?

Matthew Setter là Trình chỉnh sửa PHP trong nhóm Twilio Voices và là nhà phát triển đa ngôn ngữ. Ông cũng là tác giả của Mezzio Essentials và Docker Essentials. Khi anh ấy không viết mã PHP, anh ấy đang chỉnh sửa các bài viết PHP tuyệt vời tại Twilio. Bạn có thể tìm thấy anh ấy tại msetter@twilio. com;

Đánh giá bài viết này

1 2 3 4 5

tác giả

  • _env tập tin php ví dụ
    Matthew Setter

người phản biện

  • _env tập tin php ví dụ
    Stephenie Minami Nakajima
  • _env tập tin php ví dụ
    Tháng Tám Allard


bài viết liên quan

_env tập tin php ví dụ

Sử dụng Laravel Valet để tạo URL tùy chỉnh và khởi chạy ứng dụng

01 Tháng hai, 2023

Trong hướng dẫn này, bạn sẽ học cách cài đặt Laravel Valet và sử dụng nó để đơn giản hóa việc xây dựng các ứng dụng và chia sẻ chúng công khai để xem xét

_env tập tin php ví dụ

Cách gửi email bằng PHP năm 2023

Ngày 23 tháng 1 năm 2023

Trong bài viết này, bạn sẽ học ba cách khác nhau để gửi email bằng PHP;

_env tập tin php ví dụ

Laravel Breeze so với Laravel Jetstream

20 Tháng một, 2023

Trong bài viết này, bạn sẽ được giới thiệu toàn diện về Laravel Breeze và Jetstream, bao gồm cài đặt chúng, thảo luận về sự khác biệt và tương đồng của chúng, và khi nào nên sử dụng chúng

_env tập tin php ví dụ

Giúp đỡ những người giúp đỡ những người khác

Ngày 06 tháng 12 năm 2022

Trong hướng dẫn này, bạn sẽ học cách xây dựng một ứng dụng để giúp mọi người nhanh chóng quyên góp cho các tổ chức từ thiện và phi lợi nhuận bằng Slim Framework, Vue. js và Tailwind CSS

_env tập tin php ví dụ

Học ngôn ngữ Maasai theo cách thú vị

Ngày 20 tháng 10 năm 2022

Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng giúp bạn học ngôn ngữ Maasai một cách dễ dàng và thú vị với WhatsApp

_env tập tin php ví dụ

Pub/Sub trong Laravel - Hiểu biết sâu sắc

Ngày 20 tháng 10 năm 2022

Trong hướng dẫn này, bạn sẽ tìm hiểu về Pub/Sub, một mẫu thiết kế phần mềm hướng thông báo và cách triển khai nó trong Laravel