使用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
相关产品推荐
相关产品推荐

