2009-04-28 3 views
10

PHP로 작성된 응용 프로그램이 있으며 구성 가능한 변수가 많이 있습니다. 우리는 사용자가 구성 집합을 만들고이를 쉽게 전환 할 수있는 기능을 구현하고 있습니다. 내 config를 어떻게 저장해야합니까? XML로? .ini 파일에? 여러 .ini 파일? DB에?php app-xml 또는 ini 또는 db 구성을 저장하는 방법

도로를 따라 가면서 필드를 추가하면 가장 큰 유연성을 얻을 수 있습니까? 코딩 편의?

db를 사용하는 경우, 그럴 가치가없는 이유로 앱의 주된 기능과 별도로 사용해야합니다. 이로 인해 저를 부끄러워하게 만들었습니다. (또한 db에 .mdb 파일을 사용하고 있습니다.)

XML 경로를 사용하고 있지만 SimpleXML을 사용하여 구성을 추가하고 편집하는 데 문제가 있습니다. 또한, 응용 프로그램은 php 5.1.6과 호환되어야하며 약간의 기능에 대해서는 조금 신경이 쓰입니다.

은 정말 .... 지정 INI 파일을 만드는 처리 절대로

작은 설명 : 사용자가 파일을 터치하지 않습니다 - 그들은 기술 지식이없는 사람입니다. 따라서 초기 파일 설정은 우리에 의해 수행되지만, 우리는 우리가 선택한 형식으로 구성을 작성하는 도구를 작성하고 있습니다.

답변

4

... 당신이 글로벌 범위를 사용하게에 의한 바르.

jmucchiello에서 제안한대로 ini 파일, xml 파일 또는 PHP 파일을 선택합니다. 각 옵션마다 장단점이 있습니다. xml 대 ini의 경우 xml은 유연성이 뛰어나지 만 관리하기가 어렵습니다 (읽기 쉽지 않음). 귀하의 요구가 ini의 적용을받는다면,보다 간단한 해결책을 고수하십시오. ini 파일 이상을 제공해야하는 경우에만 xml을 사용하십시오.

php 솔루션에 대해서는 ini와 xml 사이의 가독성을 평가할 것이지만 현재 설정을 저장하는 것이 더 어려울 것입니다. 그래서 제가 접근법을 좋아하는만큼, 현재의 시나리오에서 나는 그것을 추천하지 않을 것입니다.

+0

또 하나 언급해야 할 점은 구문 오류가있는 config.php 파일은 응용 프로그램이 충돌하고 언젠가는 오류가 발생한다는 것입니다 (구성 파일 자체가 응용 프로그램의 일부가되기 때문에). .xml 또는 .ini를 사용하면 구성 안의 구문 오류로부터보다 정상적으로 복구 할 수 있도록 파서 코드를 작성할 수 있습니다. – codemagician

1

여기에 대한 대답은 실제로 개인적인 상황에 달려 있다고 생각합니다. 이들 각각이 더 나은 선택이 될 수있는 경우가 있습니다. 당신의 특별한 경우에, xml은 아마 최고일 것입니다. 그러나 xml이 ini 파일에 비해 정말 많은 부분은 관련 옵션이 여러 개있는 경우입니다. 예를 들어, 특정 연결에 대한 노드 아래의 연결 부분에 대한 노드가있는 데이터베이스의 연결 정보를 보류해야하는 경우 읽기 및 유지 보수가 더 쉬울 수 있습니다. 그것은 실제로 데이터에 달려 있습니다.

단일 값을 꺼내고 전체 파일을 응용 프로그램의 시작 부분에 메모리로로드하지 않을 경우 xml 파일이 더 쉽게 작업 할 수 있다고 말하고 싶습니다.

2

사실, 나는 구성을 위해 실행 가능한 PHP 파일을 선호합니다. 실행 가능한 파일에서 다른 솔루션을 사용하여 쉽게 수행 할 수없는 많은 작업을 수행 할 수 있습니다. 실행 가능한 파일의 유일한 단점은 파일을 안전하게 편집하기 위해서는 관리자가 PHP에 정통해야한다는 것입니다. 또한 PHP는 코드에서부터 복잡한 데이터 유형을 설명 할 수 있습니다.

DB를 찾고 db에 연결하기 위해 외부 구성 파일이 필요하기 때문에 DB가 문제가됩니다.

XML이 설정에 과잉입니다.

INI 파일이 작동하며 PHP ini 라이브러리를 사용하여 읽을 수 있습니다. parse_ini_file()을 참조하십시오. ini 파일은 복잡한 데이터 유형을 매우 잘 처리하지 못합니다. Itay Moav에 대답

EDIT (댓글이 권리를 포맷하지 않습니다) :

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

당신은 글로벌 범위에 먼지가있을 위험이 있으며, 실수로 전역 등록이 켜져 있으면 심각한 보안 위협이됩니다. –

+0

귀하의 구성은 아마 상관없이 전역 범위에있게 될 것입니다. 그것이 구성 인 이유입니다. 그리고 간단한 $ _CFG = Array(); 설정 파일의 상단에있는 register_globals 문제를 해결합니다. – jmucchiello

+0

우리는 보안에 대해 정말로 걱정할 필요가 없습니다. 이것은 로컬로 실행되는 응용 프로그램으로 컴파일됩니다. – sprugman

5

나는 PHP 파일에서 구성 항목을 저장하는 것입니다. 가장 유연한 방법입니다. 을 사용했습니다.

$config['website_url'] = 'google.com'; 

나는 다음 파일 구조

- config/development 
- config/production 

이이 TRUE가 생산 구성 항목 및 부사장을로드 할 때 나는 IN_PRODUCTION라는 이름의 소프트웨어 초기에 정의 된 상수를이 그 반대.

이것은 간단하고 쉽게 유지 보수 할 수 있습니다. (당신이 캐싱 경우 .... 등) 내가 INI 파일을 갈 것

-Mathew

+2

구성 변수를 ini 파일에 저장하면 데이터를 연관 배열로 쉽게 가져올 수 있습니다. $ config = parse_ini_file ("config.php"); – tj111

+0

parse_ini_file()에 대해 알고 있지만 파일에 수정 된 구성을 쓰는 방법은 무엇입니까? (필자는 php.net에 대한 여러 가지 수업을 보았지만 그 기능을 찾지 못했습니다.) – sprugman

+1

함께 사용되는 json_decode 및 file_get_contents 함수가 실제로는 parse_ini_file 함수 자체. 그래서 json이 PHP에서 config를 저장하는 더 빈번한 옵션이 아닐지 궁금합니다. 확실히 XML보다 우호적이며 ini보다 간결합니다. 또한 json은 형식 인식입니다. 즉, 소수가 문자열이 아닌 숫자로 파싱 될 수 있습니다. 아마 phse_json_file 함수를 생각해 낼 수 있습니다.이 함수는 PHP의 향후 개정판에서 더 빠를 것입니다. –

0

은, 그들은 매우 빠른 구문 분석되고, 사람이 읽을 수 있습니다.
XML이 아닙니다. 사람이 읽을 줄 모르고, 너무 빠르지 않습니다.
나는 속도 때문에 DB를하지 않을 것이다.
내가 PHP를 사용하지 않을는 IMO 훨씬 이해가되지 않습니다 다른 DB에서 하나의 DB에 대한 설정을 저장

0

구성 파일을로드하는 구성 클래스를 작성하십시오. 좋은 예가 CodeIgniter가 설정을 처리하는 방법입니다.

http://codeigniter.com/user_guide/libraries/config.html

그것은 기본적으로 몇 가지 설정 파일을로드하거나 구성 클래스를 특정 하나를로드 할 수 있습니다.

소스 코드를 다운로드하고 교육적 목적으로 소스 코드를 다운로드 할 수 있습니다.

또 다른 옵션은 데이터베이스에서 구성 배열을 사용하여 PHP 파일을 생성하는 것입니다. 따라서 모든 옵션을 관리하고 저장시 파일을 생성 할 수 있습니다.

2

나는 잠시 전에 똑같은 질문이있는 게시물을 보았습니다. 링크를 클릭하면 좋은 해결책이 있습니다. 유용한 코드를 수집하는 것이 좋습니다. 나는 생각한다. :)

INI 처리기 클래스를 얻으려면 iniHandler class을 클릭하십시오!

+0

웹 사이트를 찾을 수 없습니다. – diEcho

관련 문제