0

嗨,我正在编写安装程序,无论如何.. 我在创建 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);

有人可以帮忙吗?谢谢

4

2 回答 2

2
$input = "<?php
\$mysql_host = '$db_host';
\$mysql_user = '$db_user';
\$mysql_name = '$db_name';
\$mysql_pass = '$db_pass';
?>";

在双引号字符串中,$ 符号就像连接。如果要在字符串中插入美元符号,则应使用\反斜杠对其进行转义。

于 2013-03-21T09:50:41.903 回答
0

由于您在字符串中使用双引号,PHP 将解释它在字符串中看到的变量名,并输出变量的值而不是变量名。

这是一个 php 功能,旨在允许您在字符串中嵌入变量,而无需重复打开和关闭字符串。具有讽刺意味的是,这正是您对实际 PHP 变量所做的事情。

你有两个选择:

  1. 切换到对字符串使用单引号。这将完全按照您的方式工作。

  2. 继续使用双引号,但$在不希望 PHP 解释它的地方用反斜杠转义符号。

    如果您确实继续使用双引号,您还可以选择将变量嵌入字符串中,因此您无需继续打开和关闭引号。在这种情况下,您的代码将如下所示:

    $input = "<?php
    
    \$mysql_host = '{$db_host}';
    \$mysql_user = '{$db_user}';
    \$mysql_name = '{$db_name}';
    \$mysql_pass = '{$db_pass}';
    ?>
    ";
    

不过,您需要注意的另一件事是:$db_xx当您从$_POST. 这意味着,例如,如果用户的名称或密码中包含引号字符,则会导致生成无效的 PHP 代码。

此外,用户可能会将此错误用作将任意 PHP 代码注入系统的技术。尽管此脚本显然仅在最初设置系统时使用,但这是您代码中的一个主要安全漏洞,应予以纠正。

于 2013-03-21T10:00:46.533 回答