PHP - 每次我保存到文件旧数据被覆盖
问题描述:
$testarray['player1'] = $player1Plays;
$testarray['player2'] = $player2Plays;
$testarray['result'] = $result;
print_r ($testarray);
$yoyo = serialize ($testarray);
$file = 'prevdata.dat';
fopen ($file, 'w');
file_put_contents($file, trim($yoyo) . PHP_EOL, FILE_APPEND);
我正在制作一个小型的摇滚,纸,剪刀游戏的类和需要保存每个动作和结果到一个文件。这是我迄今为止的工作,它可以序列化数据并将其保存到文件中,但是每次我再次玩游戏时,它都会写入文件中的当前数据(我认为'FILE_APPEND'应该添加) 。全部代码在这里提供https://eval.in/624620PHP - 每次我保存到文件旧数据被覆盖
答
变化
$file = 'prevdata.dat';
fopen ($file, 'w');
file_put_contents($file, trim($yoyo) . PHP_EOL, FILE_APPEND);
要么
$fp = fopen('prevdata.dat', 'a'); fwrite($fp, trim($yoyo));
或
file_put_contents('prevdata.dat', trim($yoyo), FILE_APPEND);
答
使用fopen
函数的正确模式很重要。你需要把指针(你可以把它看成是一个写入头)在这样的文件的末尾:
fopen($file, 'a');
看看文档来查看所有可能的模式。
+0
由于正在使用file_put_contents,所以不管模式如何,fopen都不应该存在。 –
+0
你说得对,PHPglue的答案让人感觉更加敏锐。 – mgadrat
为什么要同时使用的fopen和file_put_contents? –
['fopen':*'w'只限写作;将文件指针放在文件的开头,并将文件截断为零。*](http://php.net/manual/en/function.fopen.php)。 –
@PaulCrovella的评论就是答案。 –