2012-03-29 3 views
1

현재 페이지 작업 중이며 설정 영역 (제목, 배경색, 태그, 설명 등)을 작업 중입니다.설정 저장 방법

관리자 패널에서 빨리 편집 할 수 있습니다.

현재 이름이 value 인 테이블을 생각하고 포함 된 (모든 페이지에) 헤더 파일에서 호출합니다.

지금 언젠가 나도 내가 basicly

그래서 내가 이것에 대해 생각 (매일 변경하지 마십시오 제목 및 기타 설정) 시간 일 이전 데이터의 대부분에 대한 쿼리를 할 것이를 제외하고 다음 이상의 사용자를 얻을.

  • 나는 드물게 설정 (매월 최대)

  • 어쩌면 함수 fetchsettings를() 내가 basicly 삭제 일부 설정을 변경하는 내 관리자 패널의 양식을 제출 때마다 설정의 내용의 전화를 변경하지 않을 것이다 이름 => 값 .PHP 파일 및 배열에 새로운 설정을 붙여 (배열

왜 내가 이런 걸 할 것이다 :

을 의미 i 조용히 PHP 세계에서 새로운,하지만 그 설정 및 변수의 캐싱 수 있으며 각 방문에 대한 쿼리를 방지하고 내 관리 패널에서 무언가를 편집 할 때마다 쿼리를 수행 할 것이라고 들었습니다. 이러한 방식으로 파일에 배열 작성

환호

sarro

+0

설정을 변경할 수있는 유일한 사용자 만 있습니까? 이 설정을 인쇄해야합니까? 어떤 설정입니까? 그것들은 대본과 관련이 있습니까? – Shoe

+0

이 설정은 1-3 인 (관리 인터페이스의 관리자) 만 수정할 수 있습니다. 그들은 웹 사이트 (제목, 키워드, 설명 등) – keslol

답변

1

는 성능면에서 우수한 방법이다. 배열을 포함하는 파일은 모든 요청에 ​​대해 테이블에서 설정을 읽는 것이 더 나은 opcode 캐시에 의해 캐시 될 수 있습니다. 파일은 문서 루트 외부에 저장되거나 최소한 어떤 방식 으로든 보호되어야합니다.

업데이트 opcode 캐시가 없으므로 PHP 배열을 사용하는 것이 무의미한 것 같습니다. 대신 파일에 저장되는 데이터를 직렬화합니다. 다음은 시작 지점으로 사용할 수있는 간단한 싱글 톤 구성 클래스입니다. db에 config를 저장하는 것을 완전히 자르거나 생성자를 수정하여 파일이없는 경우 db에서 구성 데이터를 읽을 수 있습니다.

<?php 

class Config { 

    private static $instance; 
    private $changes = false; 
    private $config; 
    private $file = './config.dat'; 

    private function __construct() { 
     $this->config = unserialize(file_get_contents($this->file)); 
    } 

    public static function getInstance() { 
     if (!self::$instance) { 
      self::$instance = new Config(); 
     } 
     return self::$instance; 
    } 

    public function __set($name, $value) { 
     $this->config[$name] = $value; 
     $this->changes = true; 
    } 

    public function __get($name) { 
     if (array_key_exists($name, $this->config)) { 
      return $this->config[$name]; 
     } 
     return null; 
    } 

    public function __toString() { 
     return print_r($this->config, true); 
    } 

    private function saveChanges() { 
     file_put_contents($this->file, serialize($this->config)); 
    } 

    public function __destruct() { 
     if ($this->changes) { 
      $this->saveChanges(); 
     } 
    } 

} 

$config = Config::getInstance(); 
print $config; 
+0

에 일반 뷰 및 데이터에 대한 설정이어야합니다 파일에 액세스 데이터가 포함되어 있지 않습니다 (DB 연결 설정은 하드 코딩되어 저장되며 향후 달에도 사용됩니다). [F] (htaccess)와 같은 사용자는 사용자를 잠그지 만 서버에서 스크립트를 사용할 수있게합니까? – keslol

+0

opcode 캐시를 사용합니까? 그렇다면 어느 것입니까? memcache를 사용할 수 있습니까? 환경에 대한 이러한 세부 사항은 가장 효율적인 솔루션을 찾는 데 중요합니다. LAMP, WAMP, WIMP 또는 다른 호스팅 스택은 무엇입니까? – nnichols

+0

호스팅 스택은 LAMP이어야하고 atm은 htacces 캐시를 사용하여 이미지 및 CSS 파일의 최대 캐시 시간을 설정해야합니다. – keslol

1

설정을 ini 파일에 저장할 수 있습니다. 인간으로 시각화하기 쉽고 PHP parse_ini_file에서 쉽게 읽을 수 있습니다.

샘플 :

[environment] 
maintenance=false 

[database] 
dsn="mysql://localhost/test" 
username="username" 
password="password" 

편집 : Nnichols에 동의해야 , 그것은 웹에서 액세스 할 수 있도록 당신은 확실히, 문서 루트의 외부에이 파일을 저장해야합니다 (당신이 돈 ' DB 설정을 읽는 사람을 원하지 않습니까?).

또한 관리자 패널에서 메시지를 작성하는 방법은 this SO question을 참조하십시오.

+0

질문은 이제 fetchsettings()로 PHP 파일을 생성하는 것을 포함합니다. 함수를 사용하거나 .ini 파일을 포함하고 parse_ini_file로 구문 분석하십시오. 나는 단지 0.xx 초 차이 또는 더 적은 것일지도 모르지만 첫번째 방법이 더 빠르지 않을 는가 것을 나는 있있다? – keslol