PHP 7 의 Yaconf 를 어떻게 사용 합 니까?

6428 단어 phpyaconf
간단 한 소개
저 는 많은 프로젝트 에서 PHP 파일 로 설정 하 는 것 을 본 적 이 있 습 니 다.하나의 config 디 렉 터 리 에 10 여 개,심지어 수 십 개의.php 프로필 이 있 을 수 있 습 니 다.그 안에 여러 가지 array 가 있 습 니 다.그리고 어떤 사전 파일(예 를 들 어 중국어/영어 대조)도 설정 에 넣 습 니 다.이 로 인해 설정 파일 의 해석 에 많은 성능 이 소모 되 었 습 니 다(물론 opcache 를 사용 하면 좋 습 니 다.하지만 실제로는 집행 과정 이 있다).
PHP 뿐만 아니 라 json,Yml 도 있 습 니 다.하나의 공 통 된 특징 은 이 설정 들 의 가 독성 이 비교적 떨어진다 는 것 입 니 다.또한,그들 도 모두 runtime 분석 을 해 야 합 니 다.
config 디 렉 터 리 는 코드 와 함께 있 습 니 다.먼저 안전 위험(설정 에 민감 한 정보 가 있 습 니 다)이 있 습 니 다.그 다음 에 설정 과 코드 가 하나의 항목 에 속 하면 설정 의 수정 도 코드 가 출시 되 는 절 차 를 가 야 합 니 다.
일부 자원 프로필,예 를 들 어 mysql/memcache 의 설정 정보,이런 내용 은 원래 개발 에 대해 투명 하고 운영 에 대해 직접 책임 을 져 야 한다.그러나 코드 에 넣 으 면 운영 에 약간의 변경 이 있 으 면 개발 협조 수정 프로필 이 출시 된다.
그래서 Yaconf 는 이런 문 제 를 해결 하기 위해 태 어 난 도구 입 니 다.
이것 은 코드 와 함께 있 지 않 은 단독 설정 디 렉 터 리(yaconf.directory 에서 지정)를 사용 합 니 다.
이것 은 PHP 가 시 작 될 때 처리 할 모든 설정 을 처리 합 니 다.그리고 이 설정 들 은 메모리 에 상주 합 니 다.PHP 의 수명 주기 에 따라 존재 합 니 다.요청 할 때마다 프로필 을 처리 하 는 것 을 피 합 니 다.
모든 설정 내용 은 immutable 입 니 다.이 는 Fork 의 COW 를 통 해 메모리 사용량 을 낮 출 수 있 습 니 다.또한 설정 에 접근 할 때 메모리 복사 가 거의 필요 하지 않 고 불필요 한 인용 계수 증감 도 없 을 것 입 니 다.
가장 중요 한 것 은 디 렉 터 리 와 코드 가 분 리 된 후에 설정 관리 배경 을 통 해 설정 의 통일 화 관 리 를 실현 할 수 있 습 니 다.
이것 은(비 ZTS)설정 변경 에 대해 다시 불 러 오 는 것 을 지원 합 니 다.즉,설정 에 변화 가 있 으 면(설정 변경 은 반드시 뮤 직 비디오 를 사용 하 는 것 을 권장 합 니 다.cp 를 사용 하지 마 십시오)reload 입 니 다.다시 시작 할 필요 가 없습니다.(검 측 빈 도 는 Yconf.check 입 니 다.delay 제어).
문자열,배열,분 절,분 절 계승 을 포함 한 다양한 설정 형식 을 지원 하 며,설정 에 PHP 의 상수 와 환경 변수 등 을 직접 쓸 수 있 습 니 다.
가장 중요 한 것 은 그것 이 매우 간단 하 다 는 것 이다.
API
Yaconf 는 두 가지 방법 만 제 공 했 습 니 다.

mixed Yaconf::get(string $name, mixed $default = NULL)
이것 은 설정 을 가 져 오 는 것 입 니 다.이름 은 설정 의 이름 입 니 다.일반적으로 foo.ini 라 는 ini 파일 이 있다 면$name 은 foo 를 사용 하면 이 파일 의 모든 내용 을 가 져 와 배열 로 되 돌려 줍 니 다.default 는 설정 이 존재 하지 않 을 때 돌아 오 는 기본 값 입 니 다.

bool Yaconf::has(string $name)
이것 은 설정 이 존재 하 는 지 확인 하 는 것 입 니 다.
Yaconf 설정 항목

yaconf.directory
파일 디 렉 터 리 를 설정 합 니 다.이 설정 은 ini 를 통과 할 수 없습니다.set 지정,PHP 가 시 작 될 때 확인 해 야 하기 때 문 입 니 다.

yaconf.check_delay
파일 변동 을 얼마나(초)한 번 감지 합 니까?0 이면 감지 하지 않 습 니 다.0 이면 파일 변경 은 PHP 재 부팅 을 통 해 다시 불 러 올 수 밖 에 없습니다.
설정 형식
Yaconf 는 ini 파일 을 프로필 로 사용 합 니 다.이것 은 ini 가 프로필 로 가장 적합 하 다 고 생각 했 기 때 문 입 니 다.key-value 형식 으로 읽 을 수 있 습 니 다.
간단 한 설정 은 다음 과 같 습 니 다.(아래 모든 가설 ini 파일 의 이름 은 test)

foo="bar"
phpversion=PHP_VERSION
env=${HOME}
위 에서 보 듯 이 일반적인 설정 에 대해 서 는 따옴표 로 일 으 킵 니 다.일 으 키 지 않 은 것 에 대해 서 는 PHP 의 상수 로 설명 하려 고 합 니 다.즉,설정 에 PHP 의 상수 를 직접 쓸 수 있 습 니 다.
그리고 보시 다시 피 우 리 는 설정 에 환경 변 수 를 직접 쓸 수 있 습 니 다.예 를 들 어 위의 env:

Yaconf::get("test.env"); //test       
//string(16) "/home/huixinchen"
위 에서 보 듯 이 foo 의 값 을 가정 하면 다음 코드 를 통 해 접근 할 수 있 습 니 다.

Yaconf::get("test.foo"); //test       
Yaconf 도 배열 형식의 설정 을 지원 합 니 다.다음 과 같이 쓰 십시오.

arr.0=1
arr.1=2
연속 적 인 배열 이 라면 직접 쓸 수 있 습 니 다.

arr[]=1
arr[]=2
배열 의 값 은 다음 코드 를 통 해 가 져 올 수 있 습 니 다.

Yaconf::get("test.arr");
이것 은 test 프로필 에 있 는 arr 배열 을 가 져 옵 니 다.물론 배열 의 구체 적 인 값 을 직접 가 져 올 수 있 습 니 다.예 를 들 어 test 프로필 에 있 는 arr 배열 의 0 번 요 소 를 직접 가 져 올 수 있 습 니 다.

$arr = Yaconf::get("test.arr.0");
Yaconf 도 map 형식의 설정 을 지원 합 니 다.다음 과 같이 쓰 십시오.

map.foo=bar
map.bar=foo
;너 는 분점 으로 주석 을 쓸 수 있다.

map2.foo.name=yaconf
map2.foo.year=2015
맵 2 의 foo 서브 맵 의 name 값 은 다음 과 같은 형식 으로 접근 할 수 있 습 니 다.

Yaconf::get("test.map2.foo.name"); //test       
그리고 프로필 은 섹 션 과 섹 션 을 나 누 어 계승 할 수 있 습 니 다.

[parent]
parent="base"
children="NULL"
[children : parent]
children="children"
설정 의 섹 션 계승 문법 children:(콜론)parent 에 주의 하 십시오.children 절 은 모든 base 설정 항목 을 계승 한 다 는 뜻 입 니 다.그리고 children 절 에서 정 의 된 parent 절 과 같은 이름 의 설정 은 parent 에서 정 의 된 내용 을 덮어 씁 니 다.
chidlren 절의 children 설정 값 은 다음 과 같은 형식 으로 접근 할 수 있 습 니 다.

Yaconf::get("test.children.children"); //test       
본보기
우선,우리 의 모든 프로필 이/tmp/yaconf 에 설치 되 어 있다 고 가정 하면 php.ini 에 다음 설정 을 추가 해 야 합 니 다.

yaconf.directory=/tmp/yaconf
이렇게 Yconf 는 PHP 가 시 작 될 때 이 디 렉 터 리 에서 모든*.ini 파일 을 찾 아 처리 하려 고 합 니 다.여기 서 주의해 야 할 것 은 다단 계 디 렉 터 리 를 지원 하지 않 습 니 다.즉,Yconf 는 Yconf.directory 안의*.ini 파일 만 처리 하고 하위 디 렉 터 리 안의 파일 은 처리 하지 않 습 니 다.
만약/tmp/yaconf 아래 에 두 개의 ini 파일 이 있다 고 가정 하면 각각:
foo.ini

name="yaconf"
year=2015
features[]="fast"
features.1="light"
features.plus="zero-copy"
features.constant=PHP_VERSION
bar.ini
[base]

parent="yaconf"
children="NULL"
[children:base]
children="set"
그리고 foo 의 내용 에 대해:

php7 -r 'var_dump(Yaconf::get("foo"));'
/*
array(3) {
 ["name"]=>
 string(6) "yaconf"
 ["year"]=>
 string(4) "2015"
 ["features"]=>
 array(4) {
 [0]=>
 string(4) "fast"
 [1]=>
 string(5) "light"
 ["plus"]=>
 string(9) "zero-copy"
 ["constant"]=>
 string(9) "7.0.0-dev"
 }
}
*/
bar 의 내용:

php7 -r 'var_dump(Yaconf::get("bar"));'
/*
array(2) {
 ["base"]=>
 array(2) {
 ["parent"]=>
 string(6) "yaconf"
 ["children"]=>
 string(4) "NULL"
 }
 ["children"]=>
 array(2) {
 ["parent"]=>
 string(6) "yaconf"
 ["children"]=>
 string(3) "set"
 }
}
*/
물론 링크 문법 으로 특정한 값 을 정확하게 접근 할 수 있 습 니 다.
마지막.
제 Ya 시리즈 확장 은 이로부터 새로운 구성원 이 하나 더 생 겼 습 니 다.예전 의 Yaf(PHP 프레임 워 크),Yar(PHP RPC 프레임 워 크),Yac(PHP 단일 캐 시)를 포함 하면 고성능 LAMP 응용 솔 루 션 을 쉽게 구축 할 수 있 습 니 다.
주:Yaconf 는 PHP 7 을 요구 해 야 사용 할 수 있 습 니 다.
PHP 7 의 Yaconf 를 어떻게 사용 하 는 지 에 대한 자세 한 내용 입 니 다.PHP 7 을 사용 하 는 Yaconf 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기