как написать значение переменной с помощью file_put_contents ()?

Пытались понять это весь день, допуская его лишь небольшую ошибку …..

Я пытаюсь использовать 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:ia"); 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; ?> 

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

Solutions Collecting From Web of "как написать значение переменной с помощью file_put_contents ()?"

Вы используете ' чтобы определить строку, это означает, что значение будет оставлено unparsed. Однако трюк заключается в том, что вы хотите проанализировать $ 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.'; ?>" 

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

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

 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, если вы хотите это сделать. Лучше избегать этого, если это возможно, поскольку это может привести к проблемам межплатформенной совместимости. PHP_EOL этого используйте \r , \n , \r\n и константу PHP_EOL .
  • Прочтите это полностью, чтобы вы точно знали, что можете и чего не можете сделать, и где.

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

Изменить:

 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\"; 

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

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

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

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

Вы используете одинарные кавычки. Вы не можете вставлять значения переменных в строку с одной кавычкой. Используйте конкатенацию, двойные кавычки или 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; ?>");