我想创建一个脚本来备份我的所有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_USER
,DB_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');
../...
答案 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
)
)
答案 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'