忽略PHP变量中的PHP代码

时间:2013-08-11 19:55:35

标签: php

我想在安装过程中生成connector.php文件,如此

$file = "connector.php";
$fp = fopen($file,"wb");

$content = "<?php $con=mysqli_connect('";
$content += $host;
$content += "', '";
$content += $user;
$content += "', '";
$content += $password;
$content += "', 'blog');  if (mysqli_connect_errno()) { echo 'Failed to connect to MySQL: ' . mysqli_connect_error(); }?>";

fwrite($fp,$content);
fclose($fp); 

但是当我尝试这段代码时,我只生成空文件(当我尝试一些随机文本时,它工作正常),所以我认为,问题是,PHP试图解释<?php和{之间的所有内容{1}}。如何使这段代码工作,让PHP不解释php标签之间的代码。

2 个答案:

答案 0 :(得分:4)

使用.=作为连接运算符。

使用+可能会将整个事物转换为整数。 您还必须在第二个代码块的第一行周围使用单引号,因为PHP会尝试解释未定义的变量$con

$file = "connector.php";
$fp = fopen($file,"wb");

// Use single quotes here, otherwise PHP tries to interpret $con
$content = '<?php $con=mysqli_connect(\'';
$content .= $host;
$content .= "', '";
$content .= $user;
$content .= "', '";
$content .= $password;
$content .= "', 'blog');  if (mysqli_connect_errno()) { echo 'Failed to connect to MySQL: ' . mysqli_connect_error(); }?>";

fwrite($fp,$content);
fclose($fp); 

答案 1 :(得分:4)

+=是一个数字运算符,.=是一个字符串运算符。您目前在代码中使用+=,这将导致PHP将其解释为数字。

++=运算符首先将值转换为整数(并且在转换为整数时将所有字符串计算为零)然后添加它们,这样就得到0.这就是为什么你的代码不是'产生预期的结果。

请参阅上面的ComFreek answer

另外,一个不相关的问题:告诉PHP不要使用字符串中的实际变量值,只需将它们转义,如下所示:

$content = "<?php \$con=mysqli_connect('";

或者,您可以使用单引号:

$content = '<?php $con=mysqli_connect(\'';

参考:#2202331