2016-08-26 2 views
0

Я хочу создать сценарий для резервного копирования всех моих установок Wordpress без необходимости отмечать все каталоги.Regex для извлечения информации из файла 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_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'); 

../... 
+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

Это плавник для работы, e для меня. Спасибо, Эд. – David