PHP写入其他PHP文件时$con与$result变量丢失问题求助
问题分析与解决方案
我来帮你拆解下这个问题——你遇到的$con和$result变量丢失的情况,大概率是PHP的变量解析机制导致的,下面给你详细说明原因和解决办法:
问题根源
当你定义要写入的内容$txt时,如果使用了双引号或者直接拼接字符串,PHP会自动解析字符串中$开头的变量,把它们替换成当前脚本中这些变量的实际值。如果你的当前脚本里$con、$result没有被定义,或者值为空,写入到新文件时这些位置就会变成空白,自然看不到这些变量名了。
举个例子,如果你是这样定义$txt的:
$txt = "<?php $con=mysqli_connect(...); ... ?>"; fwrite($newfile, $txt);
这时候PHP会把$con当成当前脚本的变量去解析,而不是把它作为纯文本保留下来。
解决办法
有两种常用的方式可以避免这个问题,让变量名原封不动写入目标文件:
1. 使用单引号包裹要写入的代码
单引号字符串里的变量不会被PHP解析,会完整保留原有的变量名和语法:
$txt = '<?php $con=mysqli_connect("localhost","dbuser","pw","db"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM me where me_genre like \'%$var7%\' LIMIT 6"); while($row = mysqli_fetch_array($result)) { echo "</div>"; } mysqli_close($con); ?>'; // 打开并写入文件 $newfile = fopen('target-file.php', 'w'); fwrite($newfile, $txt); fclose($newfile);
注意:单引号内部的单引号需要用\转义(比如上面的\'%$var7%\'),这样写入后才会保留原有的单引号格式。
2. 转义变量前的$符号
如果一定要用双引号定义内容,就在每个需要保留的$前面加反斜杠\,让PHP把它当成普通字符处理:
$txt = "<?php \$con=mysqli_connect(\"localhost\",\"dbuser\",\"pw\",\"db\"); if (mysqli_connect_errno()) { echo \"Failed to connect to MySQL: \" . mysqli_connect_error(); } \$result = mysqli_query(\$con,\"SELECT * FROM me where me_genre like '%\$var7%' LIMIT 6\"); while(\$row = mysqli_fetch_array(\$result)) { echo \"</div>\"; } mysqli_close(\$con); ?>"; // 打开并写入文件 $newfile = fopen('target-file.php', 'w'); fwrite($newfile, $txt); fclose($newfile);
这里把$con改成\$con,$result改成\$result,PHP就不会解析这些变量,而是把它们作为纯文本写入目标文件。
另外提醒:如果你希望$var7在目标文件中也作为变量使用,也要确保它被正确保留——单引号方式会直接保留,双引号方式需要写成\$var7。
内容的提问来源于stack exchange,提问作者Me Mario
相关产品推荐
相关产品推荐

