You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP生成PHP文件时无法写入<?php ?>标签与$变量的问题咨询

解决PHP写入文件时丢失标签和变量的问题

这个问题的核心是PHP对双引号字符串的变量解析特性导致的,下面给你几个可行的解决方案:

方案1:使用单引号包裹字符串

单引号在PHP中不会解析内部的变量,只需要转义字符串里的单引号即可:

<?php 
$txt = '<?php $passwords = array( \'login1\' => \'password1\', \'login2\' => \'password2\', \'login3\' => \'password3\', );?>';
$myfile = fopen("htpassw_array.php", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile); 
?>

方案2:转义双引号里的$符号

如果你坚持用双引号,需要把字符串里的$passwords中的$转义成\$,这样PHP就不会把它当作变量解析:

<?php 
$txt = "<?php \$passwords = array( 'login1' => 'password1', 'login2' => 'password2', 'login3' => 'password3', );?>";
$myfile = fopen("htpassw_array.php", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile); 
?>

方案3:使用NOWDOC语法

NOWDOC是PHP专门用于定义不需要解析的多行字符串的语法,非常适合这种场景,不需要转义任何内容:

<?php 
$txt = <<<'EOT'
<?php $passwords = array( 'login1' => 'password1', 'login2' => 'password2', 'login3' => 'password3', );?>
EOT;
$myfile = fopen("htpassw_array.php", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile); 
?>

问题原因解释

你原来的代码用双引号包裹$txt的值,PHP会自动扫描字符串里的变量(比如$passwords),由于你没有在当前脚本中定义$passwords这个变量,它会被替换成空字符串;同时<?php ?>标签里的$也触发了变量解析逻辑,最终导致<?php $passwords部分被解析成<?php (空内容),所以生成的文件里只剩下= array(...)的内容。

内容的提问来源于stack exchange,提问作者Justinas Stočkus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:19:06