从另一个插入变量的PHP文件创建PHP文件

时间:2013-12-14 16:36:04

标签: php

我实际上是在创建一个PHP脚本,它需要一些数据库连接,它需要包含这样的数据库详细信息的config.php文件

$dbname = "coolsix"; 
$dbhost = "localhost"; 

现在,我不希望用户自己创建文件,我希望我的install.php创建文件,但它没有插入细节,我做了这个

if($_POST["submit"]) 
{//Retrieve form values
    $db_type=$_POST["db_type"];
    $db_name=$_POST["db_name"]; 
    $db_user=$_POST["db_user"];
    $db_host=$_POST["db_host"]; 
    $db_pass=$_POST["db_pass"];

    //Write 
    $my_file = '../config.php'; 
    $handle = fopen($my_file, 'w') or die('Cannot open file:  '.$my_file); 
    $data = '<?php  //PHP Downloader Configuration File global $config, $db; ?> <?php $dbhost = ".$db_host.";<br> $dbname = ".$db_name.";<br> $dbuser = ".$db_user.";<br> $dbpass = ".$db_pass.";<br> ?>'; 
    fwrite($handle, $data);

创建了config.php文件,但它不包含值,它包含变量,我希望它用用户在安装表单中指定的值替换$dbname。请参阅表格http://loadedgeek.com/downloader/inis

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你实际上有一些问题。首先,您需要使用双引号,以便正确地进行变量替换。其次,当希望替换发生时,您希望使用反斜杠转义$varname。第三,你必须考虑到人们可能在他们的用户名,密码等中有引号的事实。

构建所需字符串的简单方法是......

$db_type=addslashes($_POST["db_type"]);
$db_name=addslashes($_POST["db_name"]); 
$db_user=addslashes($_POST["db_user"]);
$db_host=addslashes($_POST["db_host"]); 
$db_pass=addslashes($_POST["db_pass"]);

$content = "<?php 
    \$dbhost = '$db_host';
    \$dbname = '$db_name';
    // etc...
";

file_put_contents($my_file, $content);

大多数情况下,这种通用技术都可行。

更好的方法是使用实​​际的模板库。这样,您可以使用专门构建的过滤器,它们可以正确地转义字符串,排除文本,并将您正在构建的配置文件的模板放在单独的文件中。