2013-03-21 53 views
0

嗨Im编码安装程序,无论如何..当它..创建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); 

有人能帮忙吗? 感谢

回答

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

在双引号中的字符串$符号就像是串联。如果您想在字符串中插入美元符号,您应该使用\反斜杠进行转义。

+0

现在,$ db_host不会从上面的脚本中选取。它现在显示 $ mysql_host =''; $ mysql_user =''; $ mysql_name =''; $ mysql_pass =''; – user2172990 2013-03-21 10:18:19

+0

@ user2172990你确定'$ db_host','$ db_user' ... vars定义正确/不是空的吗?问题不在上面的代码中。打开所有的PHP错误。 – user0103 2013-03-21 10:25:05

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}'; 
    ?> 
    "; 
    

的另一件事是知道的,但:当您从$_POST阅读你不是逃避$db_xx变量。这意味着,例如,如果用户有一个带有引号字符的名称或密码,它将导致生成无效的PHP代码。

此外,用户可能会将此错误用作将任意PHP代码注入系统的技术。虽然这个脚本显然只是在设置系统时才使用,但这是您的代码中一个重大的安全漏洞,应该加以纠正。

+0

这似乎工作。谢谢 – user2172990 2013-03-24 04:03:02

相关问题