一直试图弄清楚它只是一个小错误......
我正在尝试使用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.。)从DB中获取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;
?>
完全迷失在这里。任何帮助将不胜感激。
答案 0 :(得分:1)
将正在写入文件的字符串周围的单引号更改为双引号。所以:
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安装中被禁用\r
,\n
,\r\n
和PHP_EOL
常量。答案 1 :(得分:1)
您正在使用'
来定义字符串,这意味着该值将保持未解析状态。但是,这里的诀窍是你想要解析$ 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.';
?>"
仅限与您不喜欢的人一起使用。
答案 2 :(得分:0)
问题是您使用单引号,因此不会显示变量。
变化:
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\";
答案 3 :(得分:0)
您正在使用单引号。您不能将变量值嵌入单引号字符串中。使用连接,双引号或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;
?>");
答案 4 :(得分:0)
此代码存在一些问题。首先,为了解决您的问题,单引号不会扩展变量。这是单引号和双引号之间的区别。
粗略检查后,我会建议进行以下额外更改:
1)在插入数据库之前清理输入,您可以使用mysql_real_escape_string进行此操作。
2)在递归目录的函数内使用copy以复制它。这允许适当的错误处理。至少要清理$ GDI_user(通过basename或其他一些方法来防止..)