如何用file_put_contents()写变量值?

时间:2011-08-18 23:55:30

标签: php file-io

一直试图弄清楚它只是一个小错误......

我正在尝试使用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;

?>

完全迷失在这里。任何帮助将不胜感激。

5 个答案:

答案 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而不是<?,因为短标记不受支持,默认情况下在新的PHP安装中被禁用
  • 不要将新行文字放在引用字符串的中间,如果你想这样做,请使用HEREDOC syntax。如果可能,最好避免这种情况,因为它可能导致跨平台兼容性问题。请改用\r\n\r\nPHP_EOL常量。
  • Read this彻底让你知道你能做什么,不能做什么,以及在哪里。

答案 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。

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;

?>");

答案 4 :(得分:0)

此代码存在一些问题。首先,为了解决您的问题,单引号不会扩展变量。这是单引号和双引号之间的区别。

粗略检查后,我会建议进行以下额外更改:

1)在插入数据库之前清理输入,您可以使用mysql_real_escape_string进行此操作。

2)在递归目录的函数内使用copy以复制它。这允许适当的错误处理。至少要清理$ GDI_user(通过basename或其他一些方法来防止..)