현재 위치: > 최신 기사 목록> 환경 가변 상수와 함께 사용하십시오

환경 가변 상수와 함께 사용하십시오

M66 2025-05-18

대규모 PHP 프로젝트에서 상수 관리는 무시할 수없는 문제입니다. 너무 많은 하드 코딩 상수는 유지하기가 어렵을뿐만 아니라 다른 환경 간의 구성을 전환하는 데 도움이되지 않습니다. 이 기사는 PHP의 get_defined_constants () 함수를 통해 유연하고 중앙 집중화 된 상수 관리 메커니즘을 구축하는 방법을 살펴보고 환경 변수 상수 (예 : .env 파일 또는 서버 환경 변수)와 결합하여 프로젝트의 유지 관리 가능성을 향상시킵니다.

지속적인 관리를 최적화 해야하는 이유는 무엇입니까?

프로젝트 개발 중에 상수는 데이터베이스 연결, API 주소, 암호화 키, 경로 식별 등을 구성하는 데 사용됩니다. 기존 방식은 일반적으로 구성 파일 또는 입력 파일에서 많은 수의 정의 () 상수를 직접 정의하는 것입니다.

 define('API_URL', 'https://api.m66.net/v1/');
define('ENCRYPTION_KEY', 's3cr3t!');
define('APP_ENV', 'production');

이 방법에는 몇 가지 문제가 있습니다.

  1. 개발, 테스트 및 생산 환경에는 다른 환경에서 유지하기가 어렵습니다 . 종종 다른 구성이 필요합니다.

  2. 정보 유출 위험 : 민감한 상수가 코드 기반에 노출됩니다.

  3. 찾기 및 추적의 어려움 : 산란 상수는 통일 된 방식으로 관리하기가 어렵습니다.

get_defined_constants () 사용의 장점

php의 get_defined_constants () 함수는 현재 스크립트에서 정의 된 모든 상수 (시스템 및 사용자 정의)를 반환 할 수 있습니다. 네임 스페이스 (접두사 별)와 함께 사용되며 프로젝트 수준 상수를 쉽게 검색 할 수 있습니다.

 $constants = get_defined_constants(true);
$userConstants = $constants['user'];

foreach ($userConstants as $name => $value) {
    if (strpos($name, 'APP_') === 0) {
        echo "$name = $value\n";
    }
}

이 작업의 이점은 다음과 같습니다.

  • 유형의 상수는 균일하게로드, 가로 지르고 디버깅 될 수 있습니다.

  • 중복 명명 또는 덮어 쓰기를 피하십시오.

  • 디버그 로그를 작성하고 구성 문서를 생성하는 등 편리합니다.

환경 변수를 일정합니다

소스 코드의 하드 코드 민감한 정보를 피하기 위해 환경 변수를 사용하여 상수를 정의 할 수 있습니다. vlucas/phpdotenv 라이브러리를 사용하여 .env 파일에서 환경 변수를로드하는 것이 좋습니다.

.env 파일 예 :

 APP_ENV=production
APP_DEBUG=false
API_URL=https://api.m66.net/v1/

PHP 스타트 업 스크립트에 이러한 변수를로드하고 상수로 정의하십시오.

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

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

define('APP_ENV', getenv('APP_ENV'));
define('APP_DEBUG', getenv('APP_DEBUG') === 'true');
define('API_URL', getenv('API_URL'));

환경 상수와 함께 get_defined_constants ()를 사용하십시오

위의 방법을 통해 환경 변수는 자동으로 PHP 상수로 변환됩니다. 그런 다음 get_defined_constants ()를 사용하여 이러한 상수 정보를 검색, 출력 또는 캐시 할 수 있습니다.

 function getAppConstants(string $prefix = 'APP_'): array {
    $all = get_defined_constants(true);
    $user = $all['user'];
    return array_filter($user, function($key) use ($prefix) {
        return strpos($key, $prefix) === 0;
    }, ARRAY_FILTER_USE_KEY);
}

구성 문제를 디버깅하고 환경 스냅 샷을 생성하며 자동 배포 스크립트를 구축 할 때 매우 실용적입니다.

고급 팁 : 자동 상수 로더

코드를 추가로 해제하기 위해, 자동 상수 로딩 클래스를 구축 할 수 있으며, 이는 .env 파일의 특정 접두사로 이름이 지정된 변수를 읽고 자동으로 상수로 정의 할 수 있습니다.

 class ConstantLoader {
    public static function loadFromEnv(string $prefix = 'APP_') {
        foreach ($_ENV as $key => $value) {
            if (strpos($key, $prefix) === 0) {
                if (!defined($key)) {
                    define($key, $value);
                }
            }
        }
    }
}

// 사용 방법
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

ConstantLoader::loadFromEnv();

요약

환경 변수를 상수로 변환하고 통합 관리를 위해 get_defined_constants ()를 사용함으로써 PHP 프로젝트에서 지속적으로 사용의 유연성, 유지 관리 및 보안을 크게 향상시킬 수 있습니다. 이 방법은 자주 팀 협업 개발 및 CI/CD 배포 환경 전환을 갖춘 중간 및 대규모 PHP 프로젝트에 특히 적합합니다. 이 기술을 사용하면 프로젝트 구성이 더 모듈 식적이고 추적 가능하며 디버깅 및 마이그레이션이 쉬워집니다.