函数“fwrite”写错了内容

时间:2013-12-18 07:31:11

标签: php arrays include fwrite

我的文件(文件名:inc.php)包含网站代码:

<?php 
$menu['Position1']['menu1'][]='module1'; 
$menu['Position1']['menu2'][]='module2';
?>

我想要更改此文件的代码以向其添加新节点数组。然后我测试简单的代码:

include 'inc.php';

//add new value to array
$menu['Position3']['menu3'][]='module3'; 
$menu['Position4']['menu4'][]='module4';

//create string with fomat above
$text ='<?php ' ."\n";
foreach($menu as $position_tmp => $value1_tmp){
foreach($value1_tmp as $menu_tmp => $value2_tmp){
foreach($value2_tmp as $component_tmp){
$text .= "\$menu['" .$position_tmp ."']['" .$menu_tmp ."'][]='" .$component_tmp ."'; \n";
}
}
}
$text .= '?>';

然后我测试$ text。后续代码var_dump($文本);输出:

<?php 
$menu['Position1']['menu1'][]='module1'; 
$menu['Position1']['menu2'][]='module2';
$menu['Position3']['menu3'][]='module3'; 
$menu['Position4']['menu4'][]='module4';
?>

没关系。我写信给inc.php:

$fp = fopen('inc.php', 'w+');
fwrite($fp,$text);
fclose($fp);

inc.php的内容:

<?php 
$menu['Position1']['menu1'][]='module1'; 
$menu['Position1']['menu2'][]='module2';
$menu['Position3']['menu3'][]='module3';
$menu['Position3']['menu3'][]='module3';
$menu['Position3']['menu3'][]='module3';
$menu['Position4']['menu4'][]='module4';
$menu['Position4']['menu4'][]='module4';
$menu['Position4']['menu4'][]='module4';
?>

我不知道为什么! 然后我测试写新文件:newfile.php。然后newfile.php的内容是正确的。

<?php 
$menu['Position1']['menu1'][]='module1'; 
$menu['Position1']['menu2'][]='module2';
$menu['Position3']['menu3'][]='module3'; 
$menu['Position4']['menu4'][]='module4';
?>

我尝试删除inc.php,将newfile.php重命名为inc.php

sleep(5); // I open newfile.php. It's correct.
unlink('inc.php');
rename('newfile.php','inc.php');

inc.php仍然不正确。我无法理解。请帮帮我!

1 个答案:

答案 0 :(得分:0)

使用$ text附加'<?php'字符串会导致问题。更好用:

$php_open_tag    = htmlentities('<?php'); // Or try like this htmlspecialchars('<?php');
$php_close_tag   = htmlentities('?>');
$text = $php_open_tag . 'YOUR CONTENT' . $php_close_tag ;
$text = str_replace('&lt;','<',$text);
$text = str_replace('&gt;','>',$text);

然后尝试编写您的内容。

$fp = fopen('inc.php', 'w+');
fwrite($fp,$text);
fclose($fp);

我希望这适合你。