4

我正在尝试做一个计数器。我的意思是一个按钮,它使用 XHTMLrequest 并且只运行这个 PHP。

我的问题是为什么我的计数代码将文本文档的值更改为数字1。例如,如果我只是将值更改为24,而不是加 1 并将值更改为25,它会将值更改为数字1

<?php

$fp = false;
// Open file for reading, then writing
while ( ($fp=fopen('clicks.txt','r+'))===false ) {
    usleep(250000); // Delay 1/4 second
}
// Obtain lock
while ( !flock($fp, LOCK_EX) ) {    
    usleep(250000); // Delay 1/4 second
}
// Read Clicks
$clicks = trim(fread($fp,1024));
// Add click
$clicks++;
// Empty file
ftruncate($fp,0);
// Write clicks
fwrite($fp, $clicks);
// Release Lock
flock($fp, LOCK_UN);
// Release handle
fclose($fp);

?>
4

3 回答 3

2

这是因为当您从文件中读取信息时,它是一个字符串,需要转换为整数才能添加 1。

改变:

$clicks = trim(fread($fp,1024));

$clicks = intval(trim(fread($fp,1024)));
于 2012-06-24T22:22:19.790 回答
1

我注意到你ftruncate,但从来没有注意到rewind文件。请记住,指针停留在上次读取的位置,然后截断它使文件为 0,但指针保持不变。

引用 PHP 文档:

<?php
$filename = 'lorem_ipsum.txt';

$handle = fopen($filename, 'r+');
ftruncate($handle, rand(1, filesize($filename)));
rewind($handle);
echo fread($handle, filesize($filename));
fclose($handle);
?>

请注意,PHP 的示例也会倒带文件。

于 2012-06-24T22:29:19.423 回答
1

替换$clicks++;$clicks = $clicks + 1;

于 2012-06-24T23:39:46.470 回答