我实际上是在创建一个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
有什么想法吗?
答案 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);
大多数情况下,这种通用技术都可行。
更好的方法是使用实际的模板库。这样,您可以使用专门构建的过滤器,它们可以正确地转义字符串,排除文本,并将您正在构建的配置文件的模板放在单独的文件中。