2013-11-23 45 views
0

我正在爲我的網站製作一個獨特的訪問者計數器,我去了很多教程,直到我找到這個簡單的代碼,但問題是程序從未添加新的ips或計數新的訪問。 ip.txt和count.txt的值不會改變:(php程序無法更改文本文件的值

這裏是整個代碼:

<?php 

    function hit_count() { 

    $ip_address = $_SERVER ['REMOTE_ADDR']; 


    $ip_file = file ('ip.txt'); 
    foreach($ip_file as $ip) { 
     $ip_single = ($ip); 
     if ($ip_address==$ip_single){ 
     $found = true; 
     break; 
     } else { 
     $found = false; 
     } 
    } 

    if ($found==true){ 
     $filename = 'count.txt'; 
     $handle = fopen ($filename, 'r'); 
     $current = fread($handle, filesize($filename)); 
     fclose($handle); 

     $current_inc = $current = 1; 

     $handle = fopen($filename, 'w'); 
     fwrite($handle, $current_inc); 
     fclose($handle); 

     $handle = fopen('ip.txt', 'a'); 
     fwrite($handle, $ip_address."\n"); 
     fclose($handle); 


    } 
    } 
?> 
+0

此代碼充滿了錯誤。它永遠不會工作。 – Havenard

+0

您需要'file()'的FILE_IGNORE_NEW_LINES標誌,否則永遠不會匹配。並使用'in_array()'而不是編寫自己的循環。 – Barmar

+0

爲什麼當IP已經找到時將IP添加到'ip.txt'文件中?當它沒有找到時,您應該添加IP。 – Barmar

回答

2

這段代碼是錯誤百出它永遠不會工作

錯誤號碼#。 1:

$ip_file = file('ip.txt'); 

$ip_file每個元素與換行符號結束,所以即使你的IP地址在列表中它永遠不會匹配$_SERVER ['REMOTE_ADDR']file()必須與FILE_IGNORE_NEW_LINES標誌一起運行。

錯誤號#2:

if ($found==true){ 

計數器只會增加,並嘗試添加的IP列表中,如果它在列表中已經找到。如果列表是空的,它將永遠不會做傑克。顛覆這種邏輯!

錯誤號#3:

$current_inc = $current = 1; 

它永遠不會指望超越1

除此之外,你必須確保PHP腳本有權改變那些文件。通常,由於安全原因,腳本無權編輯站點文件。

所有這一切說,你的腳本應改爲更多的東西是這樣的:

if (!in_array($_SERVER['REMOTE_ADDR'], file('ip.txt', FILE_IGNORE_NEW_LINES))) 
{ 
    file_put_contents('ip.txt', $_SERVER['REMOTE_ADDR'] . "\n", FILE_APPEND); 
    $count = file_get_contents('count.txt'); 
    $count++; 
    file_put_contents('count.txt', $count); 
} 

清潔,簡單,直接。但是您仍然必須確保PHP腳本有權編輯這些文件。

+0

是的PHP腳本確實有權編輯 – user3024047