2016-08-26 12 views
0

すべてのディレクトリに印を付けることなく、すべてのWordpressインストールをバックアップするスクリプトを作成します。正規表現wp-configファイルから情報を抽出する

ファイルwp-config.phpの存在をテストし、このファイルの情報を使ってデータベースバックアップを作成します。

ここでは常に出力私のスクリプトは、 "何も見つからなかった":

$content = file_get_contents($sub_dir . '/wp-config.php'); 
if (preg_match_all("/define\('DB_NAME', '(.*?)'\)/", preg_quote($content, '/'), $result)) { 
    print_r($result); 
} 
else 
    print "nothing found\n"; 

は私がDB_USERDB_PASSWORD、およびDB_HOSTと同じ構文解析をしたいです。

ここでは、この設定ファイルの内容の例です:

../... 

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** // 
/** Nom de la base de données de WordPress. */ 
define('DB_NAME', 'thedbname'); 

/** Utilisateur de la base de données MySQL. */ 
define('DB_USER', 'thedbuser'); 

/** Mot de passe de la base de données MySQL. */ 
define('DB_PASSWORD', 'thedbpassword'); 

/** Adresse de l'hébergement MySQL. */ 
define('DB_HOST', 'thedbhost'); 

../... 
+1

なぜpreg_quoteを使用しますか?それを削除し、正規表現は正常です。 –

+0

@ KrzysztofDuszczyk、私はpreg_quoteなしでこのスクリプトを最初に使用していました – David

答えて

2

問題

機能被写体文字列が

が含まれていないので、 preg_quote()エスケープは、 ()を含め、特殊文字はRegex
define('DB_NAME', 'thedbname'); 

代わりに、

define\('DB_NAME', 'thedbname'\); 

あなたの正規表現は失敗します。

ソリューション

ただ、このように、あなたのコードからpreg_quote()を削除:

if (preg_match_all("/define\('DB_NAME', '(.*?)'\)/", $content, $result)) { 
    print_r($result); 
} else { // note: I added braces; it's better to use them always. 
    print "nothing found\n"; 
} 

これが正常に出力動作します:

Array 
(
    [0] => Array 
     (
      [0] => define('DB_NAME', 'thedbname') 
     ) 

    [1] => Array 
     (
      [0] => thedbname 
     ) 

) 

Demo

+0

それは私の仕事です。ありがとう、エド。 – David

関連する問題