我的写入文件在2 kb后保持清空状态

时间:2012-10-10 22:10:02

标签: php

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

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

2 个答案:

答案 0 :(得分:2)

根据其他地方的评论,使用文件存储来自多个并发进程的数据是一种失败的方法。您可以通过确保在尝试读取或写入文件之前获得文件上的有效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);

如果您只是记录,那么请使用syslog工具。如果您正在执行完整的CRUD操作集,请使用DBMS。

答案 1 :(得分:1)

一些想法:

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