2013-03-21 50 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