【发布时间】:2013-08-15 15:12:57
【问题描述】:
我正在尝试使用 PHP 写入文件,这是我正在使用的代码(取自 this answer 到我之前的问题):
$fp = fopen("counter.txt", "r+");
while(!flock($fp, LOCK_EX)) { // acquire an exclusive lock
// waiting to lock the file
}
$counter = intval(fread($fp, filesize("counter.txt")));
$counter++;
ftruncate($fp, 0); // truncate file
fwrite($fp, $counter); // set your data
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
fclose($fp);
读取部分工作正常,如果文件被读取,则其内容被读取良好,即如果文件包含2289,则读取2289。
问题在于,当它递增并将值重写到该文件时,[NUL][NUL][NUL][NUL][NUL][NUL][NUL][NUL]1 会被写入。
我错过了什么?为什么会写入空字符?
【问题讨论】:
-
这是次要的,但这里的锁定代码很奇怪。如果没有
LOCK_NB标志,flock将阻塞直到它可以获取锁,因此循环等待它返回true是没有意义的。它在没有LOCK_NB的情况下返回false的唯一原因是,如果您未能打开文件并将null作为第一个参数传递,那么等待肯定无济于事......而且循环意味着您将在这种情况下无限循环地发出警告。 -
@MarkAmery 我从来都不是 PHP 专家,尤其是在 2013 年,我才刚刚开始职业生涯,所以这肯定是初学者的错误 :) 感谢您指出这一点!跨度>