Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

(Php 4> = 4.1.0, Php 5, Php 7, Php 8)

$ _ENV - Biến môi trườngEnvironment variables

Sự mô tả

Một mảng kết hợp của các biến được truyền đến tập lệnh hiện tại thông qua phương thức môi trường.array of variables passed to the current script via the environment method.

Các biến này được nhập vào không gian tên toàn cầu của PHP từ môi trường mà theo đó trình phân tích cú pháp PHP đang chạy. Nhiều người được cung cấp bởi vỏ theo đó PHP đang chạy và các hệ thống khác nhau có khả năng chạy các loại vỏ khác nhau, một danh sách dứt khoát là không thể. Vui lòng xem tài liệu của Shell của bạn để biết danh sách các biến môi trường được xác định.

Các biến môi trường khác bao gồm các biến CGI, được đặt ở đó bất kể PHP có chạy như một mô -đun máy chủ hay bộ xử lý CGI hay không.

Ví dụ

Ví dụ #1 $ _ENV Ví dụ

echo apache_getenv('NAME');
1

Giả sử "Bjori" thực hiện tập lệnh này

Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:

Ghi chú

Ghi chú::

Đây là một 'Superglobal', hoặc biến toàn cầu, tự động. Điều này đơn giản có nghĩa là nó có sẵn trong tất cả các phạm vi trong suốt một kịch bản. Không cần phải thực hiện biến $ toàn cầu; để truy cập nó trong các chức năng hoặc phương pháp.global $variable; to access it within functions or methods.

aasasdasdf tại yandex dot ru ¶

8 năm trước

echo apache_getenv('NAME');
2

echo apache_getenv('NAME');
3

echo apache_getenv('NAME');
4

echo apache_getenv('NAME');
5

    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 ứng dụng bên ngoài mã. Bằng cách này, việc ngăn chặn thông tin an toàn không được phơi bày, duy trì các ứng dụng và sử dụng các ứng dụng trên nhiều môi trường 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 đặt 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 mà nó cần, chẳng hạn như khóa API, tệp được 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 các siêu thị. Đâ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 thời gian chạy PHP, họ tổ chức thông tin môi trường của PHP theo cách (chủ yếu) hợp lý và hiệu quả, để 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');
    
    6 chứa các tiêu đề yêu cầu, đường dẫn và vị trí tập lệnh,
    echo apache_getenv('NAME');
    
    7 chứa các biến phiên và
    echo apache_getenv('NAME');
    
    8 chứa các biến được truyền đến tập lệnh hiện tại khi được gọi bằng phương thức bài HTTP.

    Điều đó nói rằng, có một số điều cần nhận thức.

    • Thứ nhất, tùy thuộc vào cách chỉ thị
      echo apache_getenv('NAME');
      
      9 được đặt, một hoặc nhiều mảng siêuglobal có thể trống. Điều này rất quan trọng để kiểm tra, nếu ứng dụng của bạn phụ thuộc vào một superglobal nhất định được điền.
    • Thứ hai, các biến có trong
      echo apache_getenv('NAME');
      
      6 và
      # 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
      
      1 (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 nhau 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 đang mong đợi các chìa khóa sẽ là duy nhất trên tất cả các superglobals.

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

    Ngoài Chỉ thị

    echo apache_getenv('NAME');
    
    9, môi trường cũng đóng một phần trong những thông tin được đặt 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');
    
    6, ngoài các biến bình thường, sẽ được tạo ra với 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');
    
    6 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 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 thông qua, giá trị của biến môi trường với tên đó được trả về.

    Bạn có thể thấy các ví dụ về việc sử dụng của nó dưới đây.

    echo getenv('SHELL');
    foreach (getenv() as $key => $value) {
        echo $key . ' - ' . $value;
    }
    

    Như với Superglobals của PHP, có một sự bắt được để 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 như CGI nhanh, hàm này sẽ luôn trả về giá trị của biến môi trường do SAPI đặt, ngay cả khi putenv () đã được sử dụng để đặt biến môi trường cục bộ 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
    
    5 để trả về giá trị của các biến môi trường được đặt tại địa phương.

    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
    
    6 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ó thêm một chức năng mà bạn có thể sử dụng: Apache_getenv (). Hàm này lấy một biến môi trường được đặt trong quy trình Apache. Bạn có thể thấy một ví dụ về việc sử dụng nó dưới đây.

    echo apache_getenv('NAME');
    

    Đừng ngầm tin tưởng các biến môi trường!

    Điều quan trọng là phải nhấn mạnh rằng - bất kể dữ liệu đến từ đâu, cho dù nó đến từ một trong những 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.do not implicitly trust it! Environment variables should be filtered and validated just like any other data that is external to your application.

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

    Cũng như đọc các biến môi trường, thật hữu ích khi biết cách đặt chúng, theo cách đó, bạn biết cách thay đổi chúng, như và khi cần thiết. Trong các ví dụ sau, chúng tôi 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
    
    7, thành "Robert Smith", ca sĩ chính của ban nhạc rock tiếng Anh The Cure.

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

    Trước khi bạn khởi động máy chủ web hoặc thực hiện tập lệnh PHP của mình, 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 về việc thiết lập các biến môi trường ở độ sâu lớn hơn, Dominik Kundel đã viết một bài đăng trên 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ể 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ể thấy các ví dụ của cả ba trong 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 các biến môi trường có một chút khác nhau trong Microsoft Windows. Bạn có thể đặt chúng qua bảng điều khiển 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 bạn đang sử dụng Docker, bạn có thể đặt các 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
    
    8, như trong ví dụ dưới đây.

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

    environment:
      - NAME="Robert Smith"
    

    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à giải phóng nó - trong yêu cầu hiện tại. Trong yêu cầu tiếp theo, biến, nếu được đặt bên ngoài yêu cầu hiện tại, sẽ trở về giá trị ban đầu của nó.the current request. In the next request, the variable, if set outside of the current request, will return to its original value.

    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
    
    6.

    Bạn có thể thấy một ví dụ về cả hai chức năng trong mã bên dưới.

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

    # Set NAME in the Windows Command Prompt
    set NAME="Robert Smith"
    
    # Set NAME in the Windows PowerShell console
    $Env:NAME = "Robert Smith"
    
    0 không phải là chủ đề an toàn.

    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 tương tự như
    # Set NAME in the Windows Command Prompt
    set NAME="Robert Smith"
    
    # Set NAME in the Windows PowerShell console
    $Env:NAME = "Robert Smith"
    
    0, là
    # Set NAME in the Windows Command Prompt
    set NAME="Robert Smith"
    
    # Set NAME in the Windows PowerShell console
    $Env:NAME = "Robert Smith"
    
    1. Hàm này đặt một biến môi trường dành riêng cho quá trình Apache. Đương nhiên, chức năng này và bổ sung của nó chỉ có sẵn khi sử dụng Apache. Bạn có thể thấy một ví dụ về việc sử dụng nó dưới đây.

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

    Đặt các 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 Chỉ thị

    # Set NAME in the Windows Command Prompt
    set NAME="Robert Smith"
    
    # Set NAME in the Windows PowerShell console
    $Env:NAME = "Robert Smith"
    
    4 để đặt biến môi trường. Chỉ thị lấy một tên và giá trị nhạy cảm trường hợp, phải được trích dẫn nếu nó chứa khoảng trắng.case-sensitive name and value, which must be quoted if it contains spaces.

    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
    
    6, và trong các mảng Superglobal
    # 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
    
    1 và
    echo apache_getenv('NAME');
    
    6.

    Đặt các 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 Chỉ thị

    # Set NAME in the Windows Command Prompt
    set NAME="Robert Smith"
    
    # Set NAME in the Windows PowerShell console
    $Env:NAME = "Robert Smith"
    
    8 để đặt các biến môi trường. Chỉ thị 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 .htaccess.

    Chỉ thị lấy một tên và giá trị nhạy cảm trường hợp, 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 trống.case-sensitive name and value, which must be quoted if it contains spaces. If no value is provided, the variable will be initialised to an empty string.

    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"
    
    4 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"
    
    8 trong Apache (hoặc một trong các chức năng liên quan) chỉ có sẵn trong SuperGlobal
    echo apache_getenv('NAME');
    
    6.

    Sử dụng tệp .env

    Mặc dù mỗi cách trên đều có lợi thế của họ, có một vài nhược điểm cần lưu ý:

    • Họ có thể là một thách thức để duy trì theo thời gian, dựa trên sự phức tạp của một dự án.
    • Không có danh sách trung tâm của các biến môi trường cần thiết, chi tiết về những gì một biến nhất định làm, 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 lực kéo đáng kể trong PHP trong những năm gần đây, đang 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 đơn giản xác định các biến môi trường cần thiết cho một ứng dụng hoạt động như một danh sách các cặp khóa/giá trị.

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

    Giả sử rằng ví dụ trên là tệp .ENV cho dự án của chúng tôi, chúng tôi có thể sử dụng một gói như vlucas/PHPDOTENV, trong đó đọc các tệp .ENV, theo mặc định và thêm các biến được xác định trong chúng vào các superglobals

    # 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
    
    1 và
    echo apache_getenv('NAME');
    
    6.

    Để 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.

    composer require vlucas/phpdotenv
    

    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ụ dưới đây.

    echo apache_getenv('NAME');
    
    0

    • Sử dụng
      environment:
        - NAME="Robert Smith"
      
      4 thay vì
      environment:
        - NAME="Robert Smith"
      
      5 để tránh ném ngoại lệ nếu không tìm thấy
      environment:
        - NAME="Robert Smith"
      
      6.
    • Chuyển đường dẫn tệp dưới dạng tham số thứ hai cho
      environment:
        - NAME="Robert Smith"
      
      7 để sử dụng một tệp khác với
      environment:
        - NAME="Robert Smith"
      
      6.

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

    Điều quan trọng là phải lưu ý rằng các tệp .ENV không được lưu trữ dưới điều khiển phiên bản!.env files must not be stored under version control!

    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 các tệp dotenv đều bị mất vì bất kỳ dữ liệu nhạy cảm nào có trong đó sau đó 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 nó phổ biến để loại trừ chúng khỏi điều khiển phiên bả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) vào tệp .gitignore của dự án khi sử dụng git.

    Đó là cách làm việc với các 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? Tôi thích biết!

    Matthew Setter là một biên tập viên PHP trong nhóm Twilio Voices và là nhà phát triển Polyglot. Ô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 đã chỉnh sửa các bài báo PHP tuyệt vời ở đây tại Twilio. Bạn có thể tìm thấy anh ta tại; Anh ấy cũng là settermjd trên Twitter và GitHub.


    Bài viết liên quan

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Xây dựng bộ rút ngắn URL của riêng bạn với PHP và PostgreSQL

    06 tháng 10 năm 2022

    Trong hướng dẫn này, bạn sẽ tìm hiểu cách xây dựng bộ rút ngắn URL của riêng bạn với PHP và PostgreSQL

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Phát triển ứng dụng Symfony bằng cách sử dụng Svelte và Webpack Encore để quản lý lịch sử tin nhắn Twilio của bạn

    27 tháng 9 năm 2022

    Trong bài viết này, bạn sẽ tìm hiểu cách phát triển một ứng dụng với svelte, trang web trang web và symfony có thể tương tác với lịch sử tin nhắn Twilio của bạn.

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Xây dựng trạm thời tiết của riêng bạn với PHP, Python và Raspberry PI - Phần II

    08 tháng 9 năm 2022

    Trong phần thứ hai này trong loạt bài, bạn sẽ tìm hiểu cách thêm khả năng gửi thông báo tóm tắt hàng ngày qua cả SMS và email bằng API Twilio và SendGrid đến trạm thời tiết dựa trên Raspberry Pi.

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Tạo một lệnh nghệ nhân để xem các cuộc gọi Twilio

    Ngày 23 tháng 8 năm 2022

    Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo một lệnh nghệ nhân tùy chỉnh để liệt kê các cuộc gọi thoại bạn đã thực hiện trên tài khoản Twilio của mình.

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Cách tạo một nguồn cấp tin tức với API lập lịch tin nhắn của Goutte và Twilio

    Ngày 05 tháng 8 năm 2022

    Trong hướng dẫn này, bạn sẽ học cách tạo một nguồn cấp tin tức được cá nhân hóa với API lập lịch tin nhắn của Goutte và Twilio.

    Hướng dẫn where are php environment variables stored? - Các biến môi trường php được lưu trữ ở đâu?

    Thực hiện các cuộc gọi điện thoại bằng giọng nói có thể lập trình PHP và Twilio

    Ngày 02 tháng 8 năm 2022

    Trong hướng dẫn này, bạn sẽ học cách thực hiện một cuộc gọi điện thoại với PHP bằng giọng nói lập trình Twilio.

    • Biến môi trường
    • cấu hình
    • PHP

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

Sử dụng các biến môi trường trong PHP..
Các biến môi trường PHP cho phép các tập lệnh của bạn lượm lặt được một số loại dữ liệu một cách linh hoạt từ máy chủ. ....
Bạn có thể truy cập các biến này bằng các mảng $ _Server và $ _ENV ..
/home/00000/domains/example.com/html..
Tạo một PHPINFO ..

Biến môi trường được lưu trữ ở đâu?

Các biến môi trường máy được lưu trữ hoặc truy xuất từ ​​vị trí đăng ký sau: HKEY_LOCAL_MACHINE \ System \ CurrentControlset \ Control \ Session Manager \ Môi trường. Các biến môi trường quy trình được tạo động mỗi khi người dùng đăng nhập vào thiết bị và bị giới hạn trong một quy trình.HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment . Process environment variables are generated dynamically every time a user logs in to the device and are restricted to a single process.

Tệp .Env được đặt ở đâu?

Tệp của .Env.Thư mục dự án có thể được xác định rõ ràng với tùy chọn -file hoặc biến môi trường compose_file.Mặt khác, đó là thư mục làm việc hiện tại trong đó lệnh docker Compose được thực thi (+1.28).at the base of the project directory. Project directory can be explicitly defined with the --file option or COMPOSE_FILE environment variable. Otherwise, it is the current working directory where the docker compose command is executed ( +1.28 ).

Tệp .Env ở đâu trong Laravel?

Trong cài đặt Laravel mới, thư mục gốc của ứng dụng của bạn sẽ chứa tệp .env.example xác định nhiều biến môi trường phổ biến.the root directory of your application will contain a .env.example file that defines many common environment variables.