我的写入文件在 2 kb 后不断清空

  • 本文关键字:kb 清空 文件 php
  • 更新时间 :
  • 英文 :


我正在尝试使用此代码将令牌保存到php文件中,但是在2kb之后,文件神秘地清空了,我丢失了所有数据。为什么会这样?我该如何预防?

   $fh = fopen('token.txt', 'a+');
    fwrite($fh, $access_token . "n");
    fclose($fh);

根据其他地方的评论,使用文件存储来自多个并发进程的数据是失败的秘诀。您可以通过确保在尝试读取或写入文件之前在文件上获得有效的 flock() 来最大程度地减少损害(冒着引入死锁和争用条件的风险)。

$fh = fopen('token.txt', 'a');
if (flock($fh, LOCK_EX)) {
    fwrite($fh, $access_token . "n");
    fflush($fh);
    flock($fh, LOCK_UN);
} else {
    trigger_error("failed to lock file");
}
fclose($fh);

如果您只是记录,请使用系统日志工具。如果要执行完整的 CRUD 操作集,请使用 DBMS。

一些想法:

  1. 对 PHP 页面的多次调用相互影响。 如果两个进程/线程同时打开同一个文件进行追加,如果结果是空文件,我不会感到惊讶。
  2. 将打开模式从 a+ 更改为 a 。 从您的代码来看,您似乎只需要编写,而不需要读/写。
  3. 检查文件系统可用空间 ( df -h ) 和用户的磁盘配额 ( quota -h )。 你空间不足吗?

最新更新