2012-06-24 25 views
4

我正在嘗試計數。我的意思是一個按鈕,它使用XHTMLrequest並運行這個PHP。試圖計數,但更改爲1

我的問題是爲什麼我的計數代碼將文本文檔的值更改爲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); 

?> 

回答

1

$clicks++;替換爲$clicks = $clicks + 1;

+0

哇...工作!我想我對其他一些語言感到困惑。 – user1431627

+0

或'$ clicks + = 1;'使其縮短。 – C0deH4cker

+0

好的。還有更快? – user1431627

2

這是因爲當你從文件中的信息讀取它是一個字符串,需要轉換成整數,然後才能把它加1。

變化:

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

$clicks = intval(trim(fread($fp,1024))); 
+2

這也不適用 - 同樣的問題。 – user1431627

+0

對於數據類型,PHP很漂亮[indifferent](http://ideone.com/Li64f)。 –

+0

我該怎麼做才能解決這個問題 - 我是PHP的新手。 – user1431627

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的例子倒回文件中。

+0

在'ftruncate($ fp,0)'調用之後和'fwrite'之前調用'rewind($ fp)'。 –

+0

爲什麼這不起作用?它將文件留空。 – user1431627

+0

它增加了一個空間。 – user1431627