2013-12-18 57 views
0

我有文件:用代碼(文件名inc.php)的網站:功能「FWRITE」寫不正確的內容

<?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 .= '?>'; 

然後我測試$文本。後續代碼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仍然不正確。我無法理解。請幫助我!

+0

「我試着刪除inc.php,重命名newfile.php到inc.php 睡眠(5); //我打開newfile.php這是正確的 取消鏈接( 'inc.php'); 重命名(」 newfile.php','inc.plist.php'); inc.php仍然不正確,我不明白,請幫助我!你確定你的重命名指令? –

+0

對不起,沒有「.plist」的新文件名。該代碼是:rename('newfile.php','inc.php'); – user3111665

回答

0

追加'<?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); 

我希望這對你有用。

+0

非常感謝。但它仍然不正確。再次感謝你! – user3111665