2012-06-15 3 views
3

parse_ini_file()과 같은 PHP에서 .conf 파일을 구문 분석하는 데 특별한 기능이 있습니까? 어떻게하면 안되지? 감사!PHP에서 .conf 파일을 구문 분석하는 방법

편집 : httpd.conf에 같은

컨퍼런스의의 (아파치). (httpd.conf 파일을 읽고 편집하고 싶습니다.)

+1

Apache .conf 파일과 비슷합니까? 설정 형식은 없으며 .conf는 아무거나 될 수 있습니다. – Brad

+0

@Brad yes like. # 코멘트 confs. –

+0

@Brad에 보편적으로 정의 된 형식이 없으므로 구문 분석하려는 응용 프로그램의 .conf 파일을 구체적으로 알아야합니다. 이 파일들의 대부분은'Directive argument [argument ...]'와 같이 광범위하게 유사한 기본 문법을 사용하지만 아파치는 네스트 할 수있는'',''등의 복잡한 구조를 가지고 있습니다. 의미있는 데이터 구조로 – DaveRandom

답변

3

아니요, httpd.conf를 구문 분석하는 특별한 기능은 없지만 파서는 쉽게 작성해야합니다. 당신이 <Directory ...> 및 다른 블록을 구문 분석 할 경우, 그것은 당신에게 걸릴거야

<?php 

define('HTTPD_CONF', '/tmp/httpd.conf'); 

$lines = file(HTTPD_CONF); 
$config = array(); 

foreach ($lines as $l) { 
    preg_match("/^(?P<key>\w+)\s+(?P<value>.*)/", $l, $matches); 
    if (isset($matches['key'])) { 
     $config[$matches['key']] = $matches['value']; 
    } 
} 

var_dump($config); 

: 당신은 키 - 값 설정에만 관심이 있다면 예를 들어, ServerRoot /var/www처럼, 다음이 트릭을 할 것입니다 몇 줄의 코드가 있지만 지나치게 세금을 부과해서는 안됩니다. 그것은 정말로 당신이하고 싶은 것에 달려 있습니다. $_SERVERgetenv()에서 많은 정보를 얻을 수 있으므로 설정 파일을 구문 분석 할 필요가 없습니다.

편집

당신의 갱신에 대응하여, 편집을 httpd.conf를 들어, 수퍼 유저 권한으로 스크립트를 실행하고 값을 httpd.conf의 원인이해야 다시로드 (예를 들어, system("apachectl graceful");).

3

.conf 파일의 의미에 달려 있습니다.이 태그는 Apache httpd.conf 파일을 의미합니까? 이 경우 나는 대답이 "아니오"라고 확신하지만 오히려 당신이 그걸로 무엇을 하느냐에 달려있다.

Apache .conf 파일을 구문 분석하는 일반적인 경우는 매우 까다로운 문제입니다. < 위치 >, < 디렉토리 >, <VirtualHost> 등 블록은 특정 요청에 대한 서버 구성 변경 방법을 모두 변경할 수 있습니다. 비판적으로는 <IfModule> 모듈을 사용할 수 있도록 설정하면 추가 구성을 추가하는 블록을 이해할 수 있어야합니다. 따라서 특정 모듈이 Apache 프로세스로로드되는지 여부를 결정할 수 있어야합니다. 이 모든 작업을 완료하면 Include 지시문을 사용하여로드 된 추가 구성 파일을 조사해야합니다. 연고의 마지막 플라이는 자신의 구성 설정을 정의 할 수있는 추가 모듈에서 나옵니다. 코드는 이해하지 못하는 구성 설정을 정상적으로 처리해야합니다.

문제를 제한하면 문제가 쉽게 해결됩니다. 서버 구성을 알고 있습니까? 그렇다면로드 된 모듈, 참조 된 파일 및 특수 구조 포함 여부를 알 수 있습니다. 다르게 문제를 제한 할 수 있습니다 - 단지 특정 설정을 원하십니까? 한 번만 정의되는 경향이있는 설정입니까? 그렇다면 그 문자열을 검색하면됩니다.

마지막으로 Apache 구성 파일을 데이터 서술의 서문으로 파싱하려면 웹 애플리케이션이 서버 구성을 수정하도록 허용하여 전체 보안 클래스로 노출되도록주의해야합니다. 이전에는 사용할 수 없었던 취약점.

물론 아파치 .conf 파일에 대해 전혀 이야기하지 않는다면 대답하는 것이 더 어렵습니다. 사용자 정의 응용 프로그램에 대한 고유 한 구성 파일 형식을 정의하는 경우 원하는대로 정의 할 수 있습니다.

관련 문제