嗨我正在编写一个安装程序,无论如何......当它创建了global.php文件时遇到了麻烦,$ mysql_连接没有显示在文件中,而其他一切都没有?
我正在尝试插入此
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_name = '-----';
$mysql_pass = '-----';
在global.php中它出现了:
= 'localhost';
= 'root';
= '-----';
= '-----';
注意$ mysql_缺失?
这是安装程序中的代码:
$db_name = trim($_POST['db_name']);
$db_user = trim($_POST['db_user']);
$db_pass = trim($_POST['db_pass']);
$db_host = trim($_POST['db_host']);
$handle = fopen($setting['config']['folder'] . $setting['config']['file'], 'w');
$input = "<?php
$mysql_host = '".$db_host."';
$mysql_user = '".$db_user."';
$mysql_name = '".$db_name."';
$mysql_pass = '".$db_pass."';
?>
";
fwrite($handle, $input);
fclose($handle);
有人可以帮忙吗? 感谢
答案 0 :(得分:2)
$input = "<?php
\$mysql_host = '$db_host';
\$mysql_user = '$db_user';
\$mysql_name = '$db_name';
\$mysql_pass = '$db_pass';
?>";
在双引号字符串中,$ sign就像连接一样。如果你想在字符串中插入美元符号,你应该用\
反斜杠转义它。
答案 1 :(得分:0)
由于您在字符串中使用双引号,PHP将解释它在字符串中看到的变量名称,并输出变量的值而不是变量名。
这是一个php功能,旨在允许您将变量嵌入到字符串中,而无需重复打开和关闭字符串。具有讽刺意味的是,这正是您对实际PHP变量的所作所为。
您有两种选择:
切换到使用单引号作为字符串。这将完全按照你的方式工作。
继续使用双引号,但使用反斜杠转义$
符号,不要让PHP解释它。
如果你继续使用双引号,你也可以使用我所说的将变量嵌入字符串中的选项,因此你不需要保持打开和关闭引号。在这种情况下,您的代码将如下所示:
$input = "<?php
\$mysql_host = '{$db_host}';
\$mysql_user = '{$db_user}';
\$mysql_name = '{$db_name}';
\$mysql_pass = '{$db_pass}';
?>
";
您需要注意的另一件事是:当您从$db_xx
读取$_POST
变量时,您并未转义它们。这意味着,例如,如果用户的名称或密码中包含引号字符,则会导致生成无效的PHP代码。
此外,用户可以将此错误用作将任意PHP代码注入系统的技术。虽然此脚本显然只在首先设置系统时使用,但这是代码中的一个主要安全漏洞,应予以纠正。