2009-02-27 5 views
24

PHP에 많은 구성 정보를 저장해야합니다.PHP에서 구성 변수를 저장하는 가장 좋은 방법은 무엇입니까?

가 나는 이것은 지금까지의 생각이 전부입니다 다음 ....

// Doesn't seem right. 
$mysqlPass = 'password'; 

// Seems slightly better. 
$config = array(
    'mysql_pass' => 'password' 
); 

// Seems dangerous having this data accessible by anything. but it can't be 
// changed via this method. 
define('MYSQL_PASSWORD', 'password'); 

// Don't know if this is such a good idea. 
class Config 
{ 
    const static MYSQL_PASSWORD = 'password'; 
}  

생각했다. require /config.inc.php으로이 구성 정보를 내 응용 프로그램으로 가져 오려고합니다.

구성 데이터를 저장하는 것과 관련하여 효과가있는 사항은 무엇입니까?

답변

7

나는 항상 옵션 # 2로 갔고 소유자 만이 모든 종류의 액세스 권한을 갖고 있는지 확인했습니다. Joomla, vBulletin, Gallery 및 기타 여러 PHP 응용 프로그램 중에서 가장 많이 사용되는 방법입니다.

첫 번째 방법은 나에게 너무 지저분하며 (가독성) 세 번째 방법은 너무 위험합니다. Class 메서드에 대해서는 생각 해본 적이 없으므로 다른 사람이 입력을 제공 할 수 있습니다. 하지만 올바른 액세스가 클래스의 사용에 사용되는 한 괜찮습니다.

define('EXAMPLE1', "test1"); // scenario 1 
$example2 = "test2"; // scenario 2 

function DealWithUserInput($input) 
{ 
    return eval($input); 
} 


예 .. 이제이 코드 예제는 정말 바보지만, 그냥 예입니다. 사용자가 입력 할 때 사용할 수있는 시나리오에 따라 함수에서 반환 할 수있는 것을 고려하십시오.

시나리오 2는 함수 내에서 전역으로 설정 한 경우에만 문제가 발생합니다. 그렇지 않으면 범위를 벗어나 도달 할 수 없습니다.

+0

MYSQL_PASSWORD를 사용하는 일부 사용자 입력이 실제 암호와 함께 전달 될 수있는 방식으로 위험합니까? – alex

+0

당신이 열거 한 두 번째 방법을 따르면 그것은 일어날 수있는 일입니다. 기본적으로이를 전역 변수로 설정하여 모든 범위에서 볼 수 있습니다. 클래스 나 함수가 $ config 배열에 액세스하는 방법을 선택할 수 있습니다. 잘못된 범위에 표시되지 않는 한 괜찮습니다. –

+0

편집 된 게시물은 코드에 정의 된 내용과 사용자가 정보를 얻을 수있는 두 가지 방법에 대한 예제를 제공합니다. –

1

일반적으로 두 번째 방법을 사용합니다 ... 데이터베이스 연결을 처리 할 때 일반적으로 요청 시작 부분에 연결을 연 다음 끝에 닫습니다. 연결을 설정 한 다음 전역 배열에서 unset() 함수를 사용하여 사용자 이름/암호를 제거하는 기능이 있습니다. 이렇게하면 시스템의 다른 부분이 "민감한"mysql 연결 데이터에 액세스하지 못하게됩니다.

0

또한 대부분의 구성 값에 대해 옵션 2를 사용합니다. 이면 클래스를 구현할 것이므로 특정 값을 일반 구성 클래스 대신 영향을주는 클래스에 연결합니다.

예에서 클래스는 데이터베이스 연결을위한 것이고 인스턴스는 암호 db_name 등을 저장합니다. 이는 데이터를 적절하게 캡슐화하고 필요하다면 여러 연결을 쉽게 만들 수있는 방법을 제공합니다.

+0

그렇습니다. 하나의 파일을 편집하여 구성 데이터를 변경할 수있는 경우를 제외하고 Db 클래스에 부착 된 상수는 단일 액세스 포인트보다 어려울 것입니다 (이는 내가 원하는 것입니다) – alex

4

나는 또한 userbase에 조금 의존한다고 말하고 싶습니다. 구성이 매우 사용자 친화적이어야하거나 사용자가 웹 등을 통해 구성을 변경할 수있는 능력이 있어야만하는 경우

이 경우 Zend Config Ini을 사용하고 다른 설정은 SQL DB에 저장됩니다.

+0

전에는 그 방법을 들어 보지 못했습니다. 알아 둘만한! –

관련 문제