2016-08-18 71 views
-2
$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 - 每次我保存到文件旧数据被覆盖

+2

为什么要同时使用的fopen和file_put_contents? –

+5

['fopen':*'w'只限写作;将文件指针放在文件的开头,并将文件截断为零。*](http://php.net/manual/en/function.fopen.php)。 –

+0

@PaulCrovella的评论就是答案。 –

回答

1

变化

$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); 
+1

如果你解释了为什么而不是给出代码片断,那会更好。 –

+0

我想,当我在'file_put_contents'乱搞时,我添加了fopen到我的文件中,试图在添加附加到'put_contents'之前让它工作。删除fopen行后代码工作正常。 – Baker2795

+0

@PHPglue是否有一种方法来设置我想要保存到文件的游戏数量限制?假设我只想记录25场比赛,有没有办法覆盖最旧的数据? – Baker2795

0

使用fopen函数的正确模式很重要。你需要把指针(你可以把它看成是一个写入头)在这样的文件的末尾:

fopen($file, 'a'); 

看看文档来查看所有可能的模式。

http://php.net/manual/en/function.fopen.php

+0

由于正在使用file_put_contents,所以不管模式如何,fopen都不应该存在。 –

+0

你说得对,PHPglue的答案让人感觉更加敏锐。 – mgadrat