正则表达式从wp-config文件中提取信息

时间:2016-08-26 16:31:52

标签: php regex wordpress backup

我想创建一个脚本来备份我的所有Wordpress安装,而不必标记所有目录。

我想测试文件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_PASSWORDDB_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');

../...

2 个答案:

答案 0 :(得分:2)

问题

函数preg_quote()转义正则表达式特殊字符,包括(),因此您的主题字符串不包含

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

答案 1 :(得分:0)

Here是读取所有WP DB定义的函数:

function get_wordpress_data() {
    $content = @file_get_contents( '../wp-config.php' );

    if( ! $content ) {
        return false;
    }

    $params = [
        'db_name' => "/define.+?'DB_NAME'.+?'(.*?)'.+/",
        'db_user' => "/define.+?'DB_USER'.+?'(.*?)'.+/",
        'db_password' => "/define.+?'DB_PASSWORD'.+?'(.*?)'.+/",
        'db_host' => "/define.+?'DB_HOST'.+?'(.*?)'.+/",
    ];

    $return = [];

    foreach( $params as $key => $value ) {

        $found = preg_match_all( $value, $content, $result );

        if( $found ) {
            $return[ $key ] = $result[ 1 ][ 0 ];
        } else {
            $return[ $key ] = false;
        }

    }

    return $return;
}

这将返回如下数组:

array (size=4)
  'db_name' => string '.........'
  'db_user' => string '.........'
  'db_password' => string '.........'
  'db_host' => string 'localhost'