Как записать значение переменной с file_put_contents ()? - PullRequest
2 голосов
/ 19 августа 2011

пытались понять это весь день, предполагая, что это просто небольшая ошибка .....

Я пытаюсь использовать file_put_content, чтобы поместить значение переменной в другой файл php ..

Код ниже объяснит:

Файл, который записывает данные в php:

    <?php

require ('conf_2135432135435135412312534.php');

$F_name =$_POST['F__name'];
$L_name =$_POST['L__name'];
$E_mail =$_POST['Email'];
$GDI_user =$_POST['GDIusername'];
$ip=$_SERVER['REMOTE_ADDR'];
$C_date = date("F j, Y, g:i a");


mysql_connect($hostname,$username,$password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());


$sql = "INSERT INTO $usertable (F_name, L_name, Email, GDI_username, Registration_IP, Date_registered) VALUES ('$F_name', '$L_name', '$E_mail', '$GDI_user', '$ip', '$C_date')";

if (!mysql_query($sql)) {
    die('Error: ' . mysql_error());
} 

$get_id = mysql_query("SELECT * FROM $usertable WHERE ". "GDI_username = '$GDI_user'");

while($id_check = mysql_fetch_array($get_id)) {
    $UNQ_ID = $id_check["Unique_id"];
 }

$src = "/home/files/1/741/html/WP/Default_files";
$dest = "/home/files/1/741/html/WP/$GDI_user";

echo "$GDI_user/config.php";

shell_exec("cp -r $src $dest");

 file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php",'<?

$affiliate_reference = "$UNQ_ID";
echo $UNQ_ID;

?>');
?>

^^ Краткое описание того, что делает этот код: ^^

1.) Получает информацию из html-формы

2.) ВСТАВЛЯЕТ данные в БД

3.) Извлекает номер Unique_id из БД

4.) Делает копию папки со всем содержимым в ней (Default_files)

5.) Папке-дубликату присваивается имя того, что было введено в HTML-форму

6.) Записывает в файл, содержащийся в папке дубликатов (config.php)

Что должен содержать вывод (config.php):

<?

$affiliate_reference = "2154216354154"; //<<<thats just an example number
echo 2154216354154;

?>

Вместо этого вот что появляется:

<?

$affiliate_reference = "$UNQ_ID";
echo $UNQ_ID;

?>

полностью потеряно здесь. Любая помощь будет высоко ценится.

Ответы [ 5 ]

1 голос
/ 19 августа 2011

Вы используете ' для определения строки, это означает, что значение будет оставлено непарсированным. Хитрость здесь в том, что вы хотите проанализировать $ UNQ_ID, но вы хотите, чтобы $affiliate_reference оставалось как есть. Это означает, что вы должны выйти или объединить вручную

Я бы использовал это вместо:

'<?

$affiliate_reference = "'.$UNQ_ID.'";
echo '.$UNQ_ID.';

?>'

Обратите внимание, я использую одинарные кавычки для большей части строки. Это целенаправленно, вы не хотите, чтобы $affiliate_reference выводился. Вы только хотите, чтобы $ UNQ_ID превратился в его строковый эквивалент. Другой вариант - использовать " и экранировать $:

"<?

\$affiliate_reference = "'.$UNQ_ID.'";
echo '.$UNQ_ID.';

?>"

Обратите внимание на \ для экранирования $ перед $ affiliate_reference.

Я обычно предпочитаю первый способ, подсветки синтаксиса цвета сделают это очень очевидным (даже заметьте, как SO это обрабатывает), в то время как второй пример заставляет маркеры застеклять все это. Это предпочтение, но оно важно.

Конечно, всегда есть глупость:

$a = '$';

с последующим

"<?

${a}affiliate_reference = "'.$UNQ_ID.'";
echo '.$UNQ_ID.';

?>"

Используйте это только с людьми, которые вам не нравятся.

1 голос
/ 19 августа 2011

Измените одинарные кавычки, окружающие строку, которую вы пишете в файл, на двойные кавычки.Итак:

file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php",'<?

$affiliate_reference = "$UNQ_ID";
echo $UNQ_ID;

?>');

... становится ...

file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php","<?php\n\n  $affiliate_reference = '$UNQ_ID';\n  echo $UNQ_ID;\n\n?>");

Несколько мыслей по поводу этой операции

  • Не используйте короткие теги PHP- используйте <?php вместо <?, так как короткие теги не поддерживаются везде и по умолчанию отключаются в новых установках PHP
  • Не помещайте литералы новой строки в середине строк в кавычках, используйте Синтаксис HEREDOC , если вы хотите это сделать.Лучше избегать этого, если это возможно, так как это может привести к проблемам кросс-платформенной совместимости.Вместо этого используйте \r, \n, \r\n и константу PHP_EOL.
  • Внимательно прочитайте это , чтобы точно знать, что вы можете и не можете делать и где.
0 голосов
/ 19 августа 2011

Есть несколько вещей не так с этим кодом. Во-первых, для решения вашей проблемы одинарные кавычки не расширяют переменные. В этом разница между одинарными и двойными кавычками.

После беглого осмотра я бы порекомендовал следующие дополнительные изменения:

1) Очистить введенные данные перед вставкой в ​​базу данных. Для этого можно использовать mysql_real_escape_string .

2) Используйте copy внутри функции, которая рекурсивно обращается к каталогу, чтобы скопировать его. Это позволяет правильно обрабатывать ошибки. Как минимум, продезинфицировать $ GDI_user (через basename или каким-либо другим способом, чтобы предотвратить ..)

0 голосов
/ 19 августа 2011

Вы используете одинарные кавычки. Вы не можете вставлять значения переменной в строку в одинарных кавычках. Используйте конкатенацию, двойные кавычки или heredoc.

http://php.net/string

И я думаю, что ведущие нули в числе могут вызвать проблемы, но я не уверен. Кроме того, всегда безопасно использовать addslashes в подобных ситуациях.

$escaped_UNQ_ID = addslashes($UNQ_ID);

file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php", "<?php

\$affiliate_reference = \"$escaped_UNQ_ID\";
echo \$affiliate_reference;

?>");
0 голосов
/ 19 августа 2011

Проблема в том, что вы используете одинарные кавычки, поэтому переменные не отображаются.

Изменение:

file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php",'<?

$affiliate_reference = "$UNQ_ID";
echo $UNQ_ID;

?>');

до:

file_put_contents("/home/files/1/741/html/WP/$GDI_user/config.php","<?

$affiliate_reference = '$UNQ_ID';
echo $UNQ_ID;

?>");

Обратите внимание, что я изменил двойные кавычки для $affiliate_reference на одинарные. Если вам нужны двойные кавычки, вы можете избежать их:

$affiliate_reference = \"$UNQ_ID\";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...