2009-05-07 10 views
0

우선 SMF와 같이이 방법을 사용하는 널리 사용되는 소프트웨어 때문에이 방법이 좋지 않다고 가정합니다.PHP를 통한 설정을 위해 PHP 파일 편집하기

것은이
<?php 
// main visual config 
$cfg['lang'] = 'en'; 

// paths 
$path['admin'] = 'index.php?p=admin'; 
$path['admin2'] = 'zvfpcms/admin'; 
$path['root'] = 'zvfpcms'; 
$path['images'] = 'zvfpcms/img'; 
$path['css'] = 'zvfpcms/css'; 
$path['js']  = 'zvfpcms/js'; 
$path['pages'] = 'zvfpcms/pg'; 
?> 

, 내가 $의 CFG 변수 (들) 인터페이스를 통해 직접 편집 할 할 :

어쨌든, 그래서 현재이 코드가 있습니다.

어떻게 달성 될까요? 나는 문자열을 대체하는 것이 미래의 $ cfg 변수에 대해 매우 많은 가능성 (또는 심지어 무한한 경우)이있을 때 특히 좋은 생각이라고 생각할 수 없다.

아니면, 내가 다른 방법에 만족해야 할 것이다 ...

답변에 감사드립니다!

답변

0

데이터베이스의 모든 설정을 유지하고 설정이 변경되면 구성 파일을 다시 작성하십시오.

+0

소프트웨어는 플랫 파일이지만 여전히 응답 할 것입니다. 가상의 사용자 "Bob"을 생각해보십시오. Bob은 zvfpcms 폴더의 이름을 바꿉니다.어떻게 처리 할 수 ​​있을까요? – unrelativity

+0

플랫 파일이라면 Spencer의 XML 파일 사용 아이디어를 사용하십시오. 스크립트가 XML 파일과 다른 디렉토리에서 실행 중이라고 판단한 경우 PHP 구성 파일을 다시 빌드해야합니다. –

0

PHP 수정 PHP 코드가 없습니다. 대신 XML 설정 파일을 사용하십시오. 변경하려는 경우 XML 정보를 읽은 다음 XML 파일에서 생성 된 데이터 구조의 값을 변경하고 새 구성 파일로 다시 가져옵니다.

+0

XML 파일을 사용하는 것을 제외하고는 광산과 비슷합니다. 어느 쪽이든 최선의 방법은 IMO입니다. –

+0

특정 설정에 따라 두 가지 방식 모두 사용하는 것이 가장 좋은 방법이라고 생각합니다. 가끔 테이블을 저장하는 설정을 기억하려고하는 db 주위를 파기보다는 파일로 바로가는 것이 훨씬 간단합니다. –

+0

구성 데이터가 거의 모든 페이지에서 사용되는 것을 고려하면 속도에 미치는 영향이 있습니까? – unrelativity

0

데이터베이스에 설정을 저장하거나 표준 ini 파일 (키 = 값 쌍)을 사용할 수 있습니다.

lang=en 
timezone=CET 

것은 그들을 읽기 :

function loadSettings() { 
    $cfg = array(); 
    foreach (file('settings.ini') as $line) { 
     list ($key, $value) = explode('=', $line); 
     $cfg[$key] = $value; 
    } 
    return $cfg; 
} 

파일 I/O 표준 데이터베이스가 그대를 호출 미만 efficiant, 당신은 이미 데이터베이스에 열린 연결이 특히.

0

나는이 나쁜 습관은 편집하기 전에 실행중인 시스템을 가질 수 있고, 편집에 오류가있을 수 있으며 (아마도 작은 따옴표를 벗어날 수 없을 수도 있기 때문입니다) 전체 편집 후 PHP는 설정 파일을 해석 할 수 없기 때문에 애플리케이션을 사용할 수 없게됩니다.

XML을 읽는 동안 발생하는 오류를 처리 할 수 ​​있으므로 XML 제안은 좋지 않습니다.

데이터베이스가있는 경우 (이 게시물을 읽으면 사용하지 않는 것처럼 보입니다), 이는 데이터를위한 최상의 장소가 될 것입니다. 이것이 바로 그 때문입니다. 플랫 파일 세계에서는 비 PHP 파일을 읽고 해석하는 것이 PHP 파일을 자동으로 편집하는 것보다 훨씬 낫습니다.

+0

따옴표를 이스케이프 처리하는 함수가 없습니까? 나는 그것이 addslashes라고 생각했다? – unrelativity

+0

이스케이프 루틴은 많이 있지만, 전체 응용 프로그램을 죽게 만드는 오류 일뿐입니다. 체크리스트가 아닌 예제로 생각하십시오! – Fenton

1

음, 방금 Unkwntech의 답변 here을 찾았습니다. 여기를 참고할 것입니다.

1

Pear Config을 사용하면 PHP 파일/배열을 비롯한 다양한 출처에서 쉽게 구성을 읽고 쓸 수 있습니다. 아마도 $cfg을 자체 파일로 옮겨서 다른 변수 등이 영향을받지 않도록 포함시켜야합니다.

var_export()을 사용하여 직접 수행 한 다음 파일을 덮어 쓸 수도 있습니다. 다시 변수를 자체 파일로 옮겨야 할 것입니다. 나는 이것이 배 클래스보다 더 복잡하거나 덜 읽기 쉬운 PHP를 작성할 것이라고 생각한다.