我正在尝试使用此代码将令牌保存到 php 文件中,但是在 2kb 之后,文件神秘地清空并且我丢失了所有数据。为什么会这样?我该如何预防?
$fh = fopen('token.txt', 'a+');
fwrite($fh, $access_token . "\n");
fclose($fh);
我正在尝试使用此代码将令牌保存到 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);
如果您只是在记录,请使用 syslog 工具。如果您正在执行全套 CRUD 操作,请使用 DBMS。
一些想法:
a+
为a
。从您的代码看来,您只需要编写,而不是读/写。df -h
) 和您的用户的磁盘配额 ( quota -h
)。你空间不够了?