2011-02-28 36 views
5

Bir WordPress eklentisi yazıyorum ve veritabanı adını, kullanıcı adını ve şifresini (bir sql dökümü yapmak için) okumanız gerekiyor. Mümkün mü?PHP ile WordPress veritabanı adı/kullanıcı adı/şifre almak

Thanks-

+0

Neden sadece geçerli veritabanı bağlantısını yeniden kullanmıyoruz? –

+0

@ Pekka - Bir php sistemi() çağrısı mysqldump yapıyorum - Bu değişkenleri geçmek gerekiyor. – Yarin

cevap

13

Evet, onlar wp-config.php

  1. Veritabanı Adı tanımlanmıştır: DB_NAME
  2. Veritabanı Kullanıcı: DB_USER
  3. Veritabanı şifresi: DB_PASSWORD
  4. Veritabanı Sunucu: DB_HOST

Bunlar tanımlanıyor. Wordpress'in kök dizinine bakın wp-config.php

+3

Bu, herkese açık olarak kullanıma sunulacağınız veya WP eklenti deposuna göndereceğiniz bir eklenti ise, sadece root'da wp-config.php dosyasına bir kod yazmanın yanı sıra wp-config dizinine bakmanızı da tavsiye ederim root'un yukarısında [WordPress wp-config Güvenlik Belgeleri] (http://codex.wordpress.org/Hardening_WordPress#Securing_wp-config.php) wp-load.php'nin 26 nolu hattının etrafına nasıl baktıklarını görün ve wp- config.php dosyası –

3

WordPress'in OO kodu boyunca bazı oldukça rahatsız edici şeyler oluyor. Bu, karşılaştığım ilk konu değil, her biriyle internette daha derinlere iniyoruz. Moxune numaralı proje. WP_User::__set doesn't persist custom fields as it claims'a bakın.

Burada tabii atıfta Goofiness şeyler dbname, dbpassword ve dbhost gibi protected ve hiçbir public erişimci yöntemleri vardır ancak tablo öneki gibi bir şey, nam wpdb::prefix, bir public üye değişken olmasıdır.

Eminim Wordpress çekirdek devlerinden biri bunun için bir gerekçe göstermeye çalışacağından eminim, ama bu arada bazı iyi 'ol OO'yu başa çıkabilir. Benim önerim, bir dekoratör.

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;  } 
} 

Sonra wpdb benzer ven içinde eklenti koduna (functions.php'ın) kurulum bir global tepesinde.

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

Oradan, sadece Eklentinizde yerine $wpdb içinde $sanedb kullanın. Son olarak, veritabanı adı ve diğerlerine sahip olmak.

$sanedb->getDbName(); 
+0

db kullanıcı adını almak için şunu ekleyin: public function getDbUser() {return $ this -> _ oDb-> dbuser; } – Amit

İlgili konular