2015-01-22 2 views
0

joomla 또는 wp가 db login, theme id 또는 선택한 언어와 같은 거의 정적 인 변수를 저장하는 데 사용하는 것처럼 configuration.php 파일을 사용하고 싶습니다. 문제는이 값을 업데이트하는 방법을 처리하지 못한다는 것입니다. 이 변수를 별도로 편집하는 방법이있을 수 있습니까, 아니면 항상 파일의 전체 내용을 대체해야합니까? 내가 config.php를 같은 내용으로 파일을했다고 말할 수 있습니다 : 나는 변수 $ LANG = '기가 바이트'를 변경할파일에 저장된 PHP 변수를 업데이트합니다.

class DB { 
    public $theme = 1; 
    public $db_host = 'abc'; 
    public $db_user = 'adsabc'; 
    public $db_pwd = 'dsads'; 
    public $db_charset = 'utf8'; 
    public $lang = 'gb'; 
    public $debug= 0; 
    public $gzip = 0; 
    } 

그리고; ~ $ lang = 'de'; PHP로 이것을하는 가장 효과적인 방법은 무엇입니까?

+0

해당 파일에 대해 하나의 include/require를 수행하고 모든 파일 내에 include/require해야하는 이유는 "수정할 수있는"하나의 파일만을 보유하게됩니다. 할 수는 있지만, 약간의 PHP * 마법 * ;-)이 필요합니다. –

+1

일반적으로 이와 같은 설정 파일은 직접 편집됩니다. 응용 프로그램을 "다시 시작하지 않고"변경해야하는 비 정적 값의 경우 데이터베이스를 사용합니다. (또는 XML 또는 JSON과 같은 구조화 된 데이터 파일이지만 파일에 동시성 문제가 있습니다.) 물론 코드에서 직접 값을 설정할 수는 있지만 파일에서 실제로 지속되는 값은 변경되지 않으므로 다음에 읽을 때 변경됩니다 그것은 정적 인 값이 될 것입니다. 코드에서 코드 파일을 읽거나 쓰는 것은 아마도 열지 않으려는 웜 일 수 있습니다. – David

+0

JSON 메서드를 사용하려면 ** 해당 파일을 안전하게 보호해야합니다 **. –

답변

2

이러한 값을 찾아서 바꿀 PHP 스크립트를 작성할 수는 있지만 정규 표현식이나 그와 비슷한 코드를 구문 분석하는 것은 좋지 않은 아이디어입니다.

{ 
    "lang": "gb", 
    // everything else 
} 

그런 다음 변수로 해당 파일을 구문 분석 구성 파일을 수정 :

대신, JSON 파일 또는 당신이 당신의 값을 저장할 수 비슷한 예를 구현하기 위해 더 나은 것

private function parseConfig() 
{ 
    $json = json_decode(file_get_contents('yourconfig.json')); 
    $this->lang = $json->lang; 
    $this->anotherVar = $json->anotherVar; 
} 

이렇게하면 포함 된 파일에 가변 데이터를 읽고 쓰는 것이 PHP 파일을 수정하는 것보다 훨씬 쉽게 관리 할 수 ​​있습니다 (사이트의 백본 인 구성 파일을 10 가지 방법으로 분해 할 수 있음).

+0

OP의 로그인 자격 증명을 노출해야하는 보안 문제가있을 것이라고 생각합니다. 포함되어 있거나 'lang'에 대한 것이어야합니다. –

+0

이론 상으로는 파일에 자격 증명을 갖는 것은 PHP에서 하드 코드를 코딩하는 것과 다르지 않습니다. 서버에서 올바른 권한을 설정하면 눈을 피할 수 없습니다. * 편집 * 사용자가 웹 루트 이상의 서버에 액세스 할 수 있다면 웹 루트 외부의 JSON 파일을 숨기는 것이 더 안전 할 수도 있습니다. –

+0

나는 확실히 그 점에 동의한다 ;-) –

2

var_export()를 사용하면 약간의 성공을 거둘 수 있습니다. 아마 그것을 읽으려면 eval()을해야하고, 함수 범위 안에서이 작업을 수행해야합니다. 그리고 file_put_contents()는 var_export의 결과를 읽을 것입니다. 그런 다음 손으로 편집 할 수 있습니다. 그래도 원하는대로 정확하게 보일 수도 있고 그렇지 않을 수도 있습니다.

+0

'var_export'는 배열과 잘 작동합니다. var_export의 문자열 출력에'' Steve

+0

@Steve가 옳습니다. 그래도 나는 그것이 어떻게 할 것인지 아직도 확신하지 못한다. 비록 내가 데이터를 코드로 직렬화하고 가끔 직렬화하는 것보다 빠르다는 사실에 놀라지 만, 나의 첫 번째 선택이 아닐 것입니다. –

관련 문제