2011-02-28 3 views
5

저는 WordPress 플러그인을 작성 중이므로 데이터베이스 이름, 사용자 이름 및 암호 (SQL 덤프를 수행하기 위해)를 읽을 필요가 있습니다. 이것이 가능한가?PHP로 WordPress 데이터베이스 이름/사용자 이름/암호 받기

고맙다 -

+0

왜 현재 데이터베이스 연결을 다시 사용하지 않습니까? –

+0

@ Pekka- 나는 php system() 호출을하고있다. mysqldump-이 변수들을 전달해야한다. – Yarin

답변

13

네,이 wp-config.php

  1. 데이터베이스 이름에 정의되어 있습니다 DB_NAME
  2. 데이터베이스 사용자 : DB_USER
  3. 데이터베이스 암호 : DB_PASSWORD
  4. 데이터베이스 호스트 : DB_HOST

정의되어 있습니다. 워드 프레스의 루트 디렉토리에 wp-config.php가 있습니다.

+3

이것이 공개적으로 사용 가능하게 만들거나 WP 플러그인 저장소에 제출할 플러그인이라면 루트에서 wp-config.php를 찾아 보는 것뿐만 아니라 wp-config 디렉토리를 찾아 보는 것이 좋습니다. 루트 위의 [WordPress wp-config 보안 문서] (http://codex.wordpress.org/Hardening_WordPress#Securing_wp-config.php) wp-load.php의 26 번째 줄을 살펴보고 wp- config.php 파일 –

3

워드 프레스는 OO 코드를 통해 상당히 구피 한 내용을 담고 있습니다.이 기사는 처음으로 내가 만난 첫 번째 사례는 아닙니다. 연속 프로젝트는 Moxune입니다. WP_User::__set doesn't persist custom fields as it claims을 참조하십시오.

여기 과정을 참조 goofiness 상황이 dbname, dbpassworddbhost 같은 protected을하고 더 public 접근 방법이없는 그러나 테이블 접두어 같은 것이, 일명 wpdb::prefix가하는 public 멤버 변수 것입니다.

저는 Wordpress 핵심 개발자 중 한 명은 논리적 근거를 제시하려고 노력할 것입니다.하지만 그 동안에는 좋은 'ol OO'를 사용할 수도 있습니다. 내 제안, 데코레이터.

class SaneDb 
{ 
    private $_oDb; 

    public function __construct(wpdb $oDb) 
    { 
     $this->_oDb = $oDb; 
    } 

    public function __get($sField) 
    { 
     if($sField != '_oDb') 
      return $this->_oDb->$sField; 
    } 

    public function __set($sField, $mValue) 
    { 
     if($sField != '_oDb') 
      $this->_oDb->$sField = $mValue; 
    } 

    public function __call($sMethod, array $aArgs) 
    { 
     return call_user_func_array(array($this->_oDb, $sMethod), $aArgs); 
    } 

    public function getDbName() { return $this->_oDb->dbname;  } 
    public function getDbPass() { return $this->_oDb->dbpassword; } 
    public function getDbHost() { return $this->_oDb->dbhost;  } 
} 

그런 wpdb에 비슷한 맥락에서 플러그인 코드 (functions.php)를 셋업 global 꼭대기.

global $sanedb; 
$sanedb = new SaneDb($wpdb); 

거기에서, 당신의 플러그인 대신 $wpdb$sanedb를 사용합니다.

마지막으로 데이터베이스 이름 외의 것을 얻는 것 외.

$sanedb->getDbName(); 
+0

db 사용자 이름을 얻으려면 다음을 추가하십시오. public function getDbUser() {return $ this -> _ oDb-> dbuser; } – Amit

관련 문제