我正在尝试使用此代码将令牌保存到php文件,但是在2kb之后文件会神秘地清空并丢失所有数据。为什么会这样?我该如何预防?
$fh = fopen('token.txt', 'a+');
fwrite($fh, $access_token . "\n");
fclose($fh);
答案 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)
一些想法:
a+
更改为a
。从你的代码看来,你只需要写,而不是读/写。df -h
)和用户的磁盘配额(quota -h
)。你没空间吗?