【问题标题】:PHP - Everytime I save to file the old data gets overwritten [closed]PHP - 每次我保存到文件时,旧数据都会被覆盖[关闭]
【发布时间】:2016-08-18 01:31:42
【问题描述】:
$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/624620

【问题讨论】:

标签: php serialization fwrite file-put-contents


【解决方案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);

【讨论】:

  • 最好解释一下原因,而不是只给出代码 sn-ps。
  • 我想当我在搞乱“file_put_contents”时,我在文件中添加了 fopen,试图在将 append 添加到“put_contents”之前让它工作。删除 fopen 行后,代码运行良好。
  • @PHPglue 有没有办法限制我想保存到文件中的以前的游戏数量?假设我只想记录 25 场比赛,有没有办法覆盖最旧的数据?
【解决方案2】:

使用fopen 函数的正确模式很重要。您需要将指针(您可以将其视为书写头)放在文件末尾,如下所示:

fopen($file, 'a');

查看文档以了解所有可能的模式。

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

【讨论】:

  • 由于使用了 file_put_contents,fopen 根本不应该存在,无论模式如何。
  • 你说得对,PHPglue 的答案更有意义。
猜你喜欢
  • 2010-10-09
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2011-09-07
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多