动态加载包含变量的变量,这些变量包含php中文件中的值



在编写代码之前,我确保程序包含(_once(所有包含这些具有不同值的变量的文件。代码:

$mainFile = file_get_content('file.inc');
preg_match_all('/$[A-Za-z0-9-_]+/', $mainFile, $vars);
echo '<table>';
foreach ($vars[0] as $var) {
echo '<tr><td>';
//print_r($var);
echo "${$var}";
echo '</tr></td>';
}
echo '</table>';

在这种情况下,我有输出错误--注意:未定义的变量:"$password"…--。如果我更改

echo "${$var}";

echo "$var";

其输出为"$password"。但我想看看这个变量($password(的值是什么:"密码"。我有194个变量,其中包含许多文件中的值。

$包含在正则表达式的密码名称中,因此您查找的是名为$password的变量,而不是您所期望的password

区别可能很难看出——通常$password指的是一个名为password的变量——这正是你所期望的。在您的示例中,您希望结果是${"password"},但您也包含了正则表达式中的$,有效地试图查找一个名为$password的变量,其中存在美元符号(而不是您所期望的名为password的变量(。

您可以通过添加捕获子组来修改正则表达式以跳过$:

preg_match_all('/$([A-Za-z0-9-_]+)/', $mainFile, $vars);

然后改为使用CCD_ 11。

另一个选项是使用ltrim删除$前缀:

$var = ltrim($var, '$');

在您的foreach中。

最新更新