从Python脚本解析PHP文件变量

2024-05-13 08:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从Python脚本的PHP(Wordpress)配置文件中获取一些数据。如何解析配置数据?例如,如何获得$wp_version值? 配置示例:

/**
 * The WordPress version string
 *
 * @global string $wp_version
 */
$wp_version = '3.5.1';

/**
 * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
 *
 * @global int $wp_db_version
 */
$wp_db_version = 22441;

/**
 * Holds the TinyMCE version
 *
 * @global string $tinymce_version
 */
$tinymce_version = '358-23224';

/**
 * Holds the required PHP version
 *
 * @global string $required_php_version
 */
$required_php_version = '5.2.4';

/**
 * Holds the required MySQL version
 *
 * @global string $required_mysql_version
 */
$required_mysql_version = '5.0';

$wp_local_package = 'en_EN';

Tags: the数据dbstringversionmysqlrequiredwordpress
2条回答

我编写了一个小python脚本,从wordpress的wp-config.php文件中获取获取数据库登录信息,以便进行自动站点备份。在

下面是我的代码的相关部分(GitHub的语法高亮显示在Python的三引号字符串中有问题):

#!/usr/bin/env python3
import re

define_pattern = re.compile(r"""\bdefine\(\s*('|")(.*)\1\s*,\s*('|")(.*)\3\)\s*;""")
assign_pattern = re.compile(r"""(^|;)\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*=\s*('|")(.*)\3\s*;""")

php_vars = {}
for line in open("wp-config.php"):
  for match in define_pattern.finditer(line):
    php_vars[match.group(2)]=match.group(4)
  for match in assign_pattern.finditer(line):
    php_vars[match.group(2)]=match.group(4)

您知道PHP中的一个简单变量类似于$foo = 'bar';,让我们创建一个不考虑$_GET或{}的regex:

  1. $开始,注意我们需要转义它:
    \$
  2. $后的第一个字符不能是数字,必须是字母或下划线:
    \$[a-z]
  3. 之后可能会有字母、数字或下划线:
    \$[a-z]\w*
  4. 让我们加上括号:
    \$([a-z]\w*)
  5. 现在应该有一个“等号”,但是为了使它更兼容,让我们把空格设为可选的:
    \$([a-z]\w*)\s*=\s*
  6. 在此之后应该有一个值,它以;结尾:
    \$([a-z]\w*)\s*=\s*(.*?);$
  7. 我们将使用m修饰符,它使^$分别匹配行首和行尾。在
  8. 然后您可以使用一个修剪函数来获得单引号和双引号。在

Online demo

Note 1: This regex will fail at nested variables $fail = 'en_EN'; $fail2 = 'en_EN';
Note 2: Don't forget to use the i modifier to make it case insensitive.

相关问题 更多 >