Пытались понять это весь день, допуская его лишь небольшую ошибку …..
Я пытаюсь использовать 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; ?>
полностью потерянный здесь. Любая помощь приветствуется.
Вы используете '
чтобы определить строку, это означает, что значение будет оставлено 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_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.
И я думаю, что ведущие нули в ряду могут вызвать проблемы, но я не уверен. Кроме того, всегда безопасно использовать 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; ?>");