我脚本一个小工具,我解决WordPress网站用。
这个脚本有一个函数调用wpsql我通过SQL查询到。然后,它调用名为wpdb_creds
另一个函数。 wpdb_creds回声5个变量从wp-config.php
解析;数据库主机,名称,用户名和密码,按照这个顺序。 wpsql在一个局部变量作为字符串抓住这些变量并将它们存储。然后将局部变量被分割为一个阵列,并存储在使用IFS另一个变量。然后我用mysql命令,给它的数据库凭证和查询执行查询。从这个输出中回显。
然而,我在的问题,该脚本将返回列名,以及从查询的输出。例如,当我执行查询诸如(忽略%table_prefix%
,它就会被替换为wp-config.php
数据库表前缀wpsql使用SED):
SELECT option_value FROM %table_prefix%options WHERE option_name='active_plugins';
我得到的输出是:
option_value a:5:{i:0;s:29:"gravityforms/gravityforms.php";i:1;s:45:"no-captcha-recaptcha/no-captcha-recaptcha.php";i:2;s:25:"relevanssi/relevanssi.php";i:3;s:41:"woot-search-engine/woot-search-engine.php";i:4;s:23:"wordfence/wordfence.php";}
option_value
不应在输出中返回,我想不通为什么它这样做。这里所涉及的功能:
function wp_domain_root {
found=false;local root='';cwd=${PWD}
IFS="/" read -a dirs <<< "$cwd"
for((i="${#dirs[@]}"; i>0; i--)); do
tmp_dir=""
for((ii=0;ii < $i; ii++)); do
tmp_dir+="${dirs[ $ii ]}/"
done
if [ -f $tmp_dir"/wp-config.php" ]; then root=$tmp_dir; break; fi
done
echo $root
}
function wpdb_creds {
local domain_root=$(wp_domain_root)
if [[ ${#domain_root} -ge 5 ]]; then
read -r dbhost dbname dbpass dbuser dbprefix <<< $(cat $domain_root"wp-config.php" | egrep "^[^/].*[\"']DB_(NAME|USER|PASSWORD|HOST[^_])|table_prefix" | sort -d | sed "s/.*[\"']\(.*\)[\"'].*;.*/\1/" )
if [[ ! -z $1 && $1 == '-p' ]]; then
echo -e "\nWP Database Info\n\tHostname: "$dbhost"\n\tDatabase: "$dbname"\n\tPassword: "$dbpass"\n\tUsername: "$dbuser"\n\tPrefix: "$dbprefix"\n";
else
local dbcreds=($dbhost $dbname $dbpass $dbuser $dbprefix)
echo "${dbcreds[@]}"
fi; else echo -e 'Could not find a wp-config.php file...'; fi
}
function wp_sql {
args=$@
local query=$(IFS=" "; echo "${args[*]}")
if [[ ! -z $1 ]]; then
local dbcredstr=$(wpdb_creds)
IFS=" " read -a dbcreds <<< "$dbcredstr"
if [ "${#dbcreds[@]}" -eq 5 ]; then
sql_query=$(echo $query | sed "s/%table_prefix%/${dbcreds[4]}/g")
echo $(mysql -u "${dbcreds[3]}" -p"${dbcreds[2]}" -h "${dbcreds[0]}" -D "${dbcreds[1]}" -e "$sql_query" 2>&1)
fi
fi
}
function wpplug_print_active {
echo $(wp_sql "SELECT option_value FROM %table_prefix%options WHERE option_name='active_plugins';");
}
传递-N或--skip-列名到mysql命令解决了这个问题。