2013-03-21 3 views
0

Привет, я кодирую установщик, во всяком случае .. ive столкнулся с проблемой, когда он создает файл 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

+0

@ user2172990 Вы уверены, что '$ db_host',' $ db_user' ... vars правильно определены/не пуст? Проблема не в коде выше. Включите все ошибки PHP. – user0103

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 в систему. Хотя этот сценарий явно предназначен для использования только при настройке системы в первую очередь, это основной недостаток безопасности в вашем коде, который следует исправить.

+0

это, казалось, сработало. благодаря – user2172990