PHP의 DOTENV

우리가 프로젝트를 생성할 때 항상 몇 가지 민감한 값이 있으며 처음에는 어디에 작성해야 할지 모르고 결국 데이터베이스 암호 및 기타와 같은 코드에 작성하게 됩니다.

그러나 이것은 코드에 액세스할 수 있는 모든 사람이 데이터를 볼 수 있기 때문에 첫 번째로 보안 측면에서 큰 문제이며 두 번째로 프로덕션 등과 같은 환경을 변경할 때마다 복잡해집니다.

그리고 이를 해결하기 위해 .env 가 나왔습니다. 여기서 Linux 환경에 대한 점(점)은 파일을 숨긴 상태로 두는 것이며 env라는 이름은 environment의 약어입니다.

더 잘 이해하기 위해 실제로 살펴보겠습니다.

암호



먼저 환경 변수에 있는 값과 사용할 수 있는 값getenv()을 확인합니다.

<?php
print_r(getenv());


💡 참고: 자세한 내용은 documentation

새 값을 생성하려면 putenv()를 사용해야 합니다.

<?php
putenv("TEST=test");


우리가 사용하는 값을 표시하기 위해

<?php
echo getenv("TEST");


💡 참고: 환경 변수 이름을 대문자로 지정하는 것이 좋습니다.

getenv 외에도 $_ENV도 있습니다.

$_ENV는 각각의 키가 해당 값을 가리키는 환경 변수인 연관 배열입니다. 문제는 php.ini 구성에 따라 로드되지 않을 수 있다는 것입니다. 이를 활성화하려면 "variables_order"지시문에 "E"옵션을 넣으십시오. 여기서 각 문자는 로드할 완전 전역을 나타냅니다.

그리고 우리가 사용하는 값을 표시하기 위해

<?php
echo $_ENV['APP_ENV'];


이제 우리는 변수가 어디에 있는지, 더 만드는 방법과 하나만 호출하는 방법을 알았으므로 php가 .env 파일에서 값을 읽고 php 내부의 환경 변수에 저장하도록 합시다.

DOTENV



먼저 .env 파일을 생성합니다.

touch .env


내부에 원하는 값을 입력합니다. 이 예에서는 두 개의 변수를 입력합니다.

APP_NAME=Project
APP_ENV=local


PHP 클래스



먼저 클래스를 생성하자

<?php

namespace App\Controller;

class DotEnvEnvironment
{

   public function load($path): void
   {
       $lines = file($path . '/.env');
       foreach ($lines as $line) {
           [$key, $value] = explode('=', $line, 2);
           $key = trim($key);
           $value = trim($value);

           putenv(sprintf('%s=%s', $key, $value));
           $_ENV[$key] = $value;
           $_SERVER[$key] = $value;
       }
   }
}


이제 그냥 사용

<?php

require __DIR__ . '/../vendor/autoload.php';

(new App\Controller\DotEnvEnvironment)->load(__DIR__ . '/../');

echo getenv('APP_ENV');
echo $_ENV['APP_NAME'];



.gitignore



코드에서 .env를 서버로 보내지 마십시오. .env의 목적은 민감한 정보를 코드에서 분리하여 여전히 서버로 보내도 문제가 되지 않기 때문입니다. .gitignore 파일에 대한 값입니다.

.env


팀으로 개발하는 경우 프로젝트를 사용하는 사람들이 수행해야 할 작업을 이해할 수 있도록 .env.example 파일을 포함하고 가상 값을 추가할 수 있습니다.

DATABASE=database-name
PASSWORD=your-password-here




환경마다 다른 .env 파일을 사용할 수 있으므로 스테이징용으로 .env.staging, 프로덕션용으로 .env.production, 테스트용으로 .env.testing 등을 사용할 수 있습니다.

도서관


.env 로드되는 파일을 생성하는 방법을 보여 주었음에도 불구하고 이것이 최선의 솔루션이라고 생각하지 않습니다. 라이브러리가 이미 준비되어 있고 더 견고하며 훨씬 더 많은 테스트를 거쳤기 때문에 어떻게 작동하는지 궁금하다면 , 계속해서 직접 만들지만 전문적인 프로젝트에서 만들거나 사용하려면 vlucas/phpdotenv 라이브러리를 권장합니다. 라라벨 프레임워크 자체가 사용할 정도로 우수하므로 사용 방법을 보여 드리겠습니다.

💡 참고: symfony/dotenv은 Symfony 프레임워크에서 사용되며 가끔 저도 사용합니다.

먼저 작곡가에 추가

composer require vlucas/phpdotenv


이제 .env 파일을 생성합니다.

APP_NAME=Project
APP_ENV=local


이제 파일을 로드합니다.

<?php

require __DIR__ . '/../vendor/autoload.php';

Dotenv\Dotenv::createUnsafeImmutable(__DIR__ . '/../')->load();

echo getenv('APP_ENV');
echo $_ENV['APP_NAME'];



간단합니다. 몇 줄만 있으면 이미 프로젝트가 구성되어 있습니다.


읽어 주셔서 감사합니다!



질문, 불만 사항 또는 팁이 있는 경우 여기에 의견을 남길 수 있습니다. 기꺼이 답변해 드리겠습니다!
😊😊 만나요! 😊😊


지원 해줘



Github - WalterNascimentoBarroso
Codepen - WalterNascimentoBarroso

좋은 웹페이지 즐겨찾기