只是尝试计算单击按钮的次数,将其记录到文件中,以便适用于所有人。它正在阅读文件,但是没有写。想法?
<form action='' method="post">
<input type="submit" name="submit" value="Tweet it!" onclick="genTweet()"/>
</form>
<br>
<?php
$f = fopen('counter.txt', 'r+'); // use 'r+' instead
flock($f, LOCK_EX); // avoid race conditions with concurrent requests
$total = (int) fread($f, max(1, filesize('counter.txt'))); // arg can't be 0
/*if someone has clicked submit*/
if (isset($_POST['submit'])) {
rewind($f); // move pointer to start of file so we overwrite instead of append
fwrite($f, ++$total);
}
fclose($f);
?>
This button has been clicked <?php echo $total; ?> times.
答案 0 :(得分:0)
如果您使用的是5.3.2以上的PHP版本,则应使用LOCK_UN标志调用flock。 fclose可能不足以释放锁,直到拥有它的处理仍然存在。
flock手册页指出:
在5.3.2之前的PHP版本中,锁定也由fclose()释放(在脚本完成时也会自动调用)。
同时检查counter.txt文件权限。它必须可由Web服务器用户写入。
<?php
$total = 0;
$f = @fopen('counter.txt', 'r+');
if ($f) {
$mode = (isset($_POST["submit"]) ? LOCK_EX : LOCK_SH);
if (flock($f, $mode)) {
$total = (int)fgets($f);
if ($mode == LOCK_EX) {
ftruncate($f, 0);
fputs($f, ++current);
fflush($f);
}
flock($f, LOCK_UN);
}
fclose($f);
}
else {
print "counter.txt could not be opened";
}
?>