상대적인 장점 / 약점으로 보는 옵션은 다음과 같습니다.
파일 기반 메커니즘
이를 위해서는 코드가 특정 위치에서 ini 파일을 찾아야합니다. 이것은 해결하기 어려운 문제이며 큰 PHP 응용 프로그램에서 항상 발생하는 문제입니다. 그러나 런타임에 통합 / 재사용되는 PHP 코드를 찾으려면 문제를 해결해야 할 것입니다.
이에 대한 일반적인 접근 방식은 항상 상대 디렉터리를 사용하거나 현재 디렉터리에서 위쪽으로 검색하여 응용 프로그램의 기본 디렉터리에서 독점적으로 명명 된 파일을 찾는 것입니다.
구성 파일에 사용되는 일반적인 파일 형식은 PHP 코드, ini 형식 파일, JSON, XML, YAML 및 직렬화 된 PHP입니다.
PHP 코드
이는 다양한 데이터 구조를 표현할 수있는 엄청난 유연성을 제공하며 (include 또는 require를 통해 처리된다고 가정 할 때) 구문 분석 된 코드를 opcode 캐시에서 사용할 수있어 성능상의 이점을 제공합니다.
의 include_path 추가 코드에 의존하지 않고 파일의 잠재적 인 위치를 추출하는 수단을 제공합니다.
반면에 구성을 코드에서 분리하는 주된 이유 중 하나는 책임을 분리하는 것입니다. 런타임에 추가 코드를 삽입하기위한 경로를 제공합니다.
구성이 도구에서 생성 된 경우 도구에서 데이터의 유효성을 검사 할 수 있지만 HTML, URL, MySQL 문, 셸 명령에 대해 존재하는 것처럼 PHP 코드에 삽입하기 위해 데이터를 이스케이프하는 표준 기능이 없습니다. .
직렬화 된 데이터
이것은 적은 양의 구성 (최대 약 200 개 항목)에 상대적으로 효율적이며 모든 PHP 데이터 구조를 사용할 수 있습니다. 데이터 파일을 생성 / 파싱하는 데 코드가 거의 필요하지 않으므로 대신 파일이 적절한 권한으로 만 작성되도록 노력할 수 있습니다.
파일에 기록 된 내용의 이스케이프는 자동으로 처리됩니다.
객체를 직렬화 할 수 있으므로 구성 파일 (__wakeup 매직 메서드)을 읽는 것만으로 코드를 호출 할 수 있습니다.
구조화 된 파일
Marcel, JSON 또는 XML에서 제안한대로 INI 파일로 저장하면 코드 호출을 제거하면서 파일을 PHP 데이터 구조 (XML 제외, 데이터 이스케이프 및 파일 생성)로 매핑하는 간단한 API도 제공됩니다. 직렬화 된 PHP 데이터를 사용하는 취약점.
직렬화 된 데이터와 유사한 성능 특성을 갖습니다.
데이터베이스 저장소
이것은 엄청난 양의 구성이 있지만 현재 작업에 필요한 것은 선택적인 경우에 가장 적합합니다. 약 150 개의 데이터 항목에서 로컬 MySQL 인스턴스에서 데이터를 검색하는 것이 더 빠르다는 사실에 놀랐습니다. 데이터 파일을 직렬화 해제합니다.
OTOH는 데이터베이스에 연결하는 데 사용하는 자격 증명을 저장하기에 좋은 곳이 아닙니다!
실행 환경
PHP가 실행되는 실행 환경 에서 값을 설정할 수 있습니다 .
이렇게하면 PHP 코드가 구성의 특정 위치를 찾는 데 필요한 모든 요구 사항이 제거됩니다. OTOH는 많은 양의 데이터로 잘 확장되지 않으며 런타임에 보편적으로 변경하기가 어렵습니다.
클라이언트에서
구성 데이터 저장에 대해 언급하지 않은 한 곳은 클라이언트입니다. 다시 말하지만 네트워크 오버 헤드는 이것이 많은 양의 구성으로 잘 확장되지 않음을 의미합니다. 그리고 최종 사용자가 데이터를 제어 할 수 있으므로 변조가 감지 될 수있는 형식 (즉, 암호화 서명 사용)으로 저장되어야하며 공개로 인해 손상되는 정보 (예 : 가역적으로 암호화 됨)를 포함해서는 안됩니다.
반대로 이것은 최종 사용자가 소유 한 민감한 정보를 저장하는 데 많은 이점이 있습니다. 서버에 저장하지 않으면 거기에서 도난 당할 수 없습니다.
네트워크 디렉토리
구성 정보를 저장하는 또 다른 흥미로운 장소는 DNS / LDAP입니다. 이것은 소수의 작은 정보에 대해 작동하지만 첫 번째 정규 형식을 고수 할 필요는 없습니다 . 예를 들어 SPF를 고려하십시오 .
인프라는 캐싱, 복제 및 배포를 지원합니다. 따라서 매우 큰 인프라에서 잘 작동합니다.
버전 관리 시스템
코드와 같은 구성을 관리하고 버전을 제어해야합니다. 따라서 VC 시스템에서 직접 구성을 가져 오는 것이 실행 가능한 솔루션입니다. 그러나 종종 이것은 상당한 성능 오버 헤드를 동반하므로 캐싱이 권장 될 수 있습니다.