台灣最大程式設計社群網站
線上人數
1855
 
會員總數:246050
討論主題:189633
歡迎您免費加入會員
討論區列表 >> PHP >> 無需資料庫,只有PHP的訪客IP計數器
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
無需資料庫,只有PHP的訪客IP計數器
價值 : 10 QP  點閱數:1512 回應數:14
樓主

宅人28
門外漢
0 1
23 7
發送站內信


[脈絡]
在接手主機之後,在熟悉前人的資料庫繫結或新建資料庫之前,直接用只有PHP的IP計數器來登記瀏覽人數。方便容易又有效果。

[提問]
這裡有一段PHP,檔名為counter.php,準備include()到需要顯示的頁面。但是執行之後得不到想要的結果。
因此想請熟悉此語言的高人幫解。





搜尋相關Tags的文章: [ php ] , [ ip counter ] , [ ip 計數器 ] ,
本篇文章發表於2015-05-20 08:02
1樓
不錯的參考

迷路
捐贈 VP 給 迷路 檢舉此回應
第一個問題是hitcounter.txt、ip.txt這兩支檔案必須要存在
因為你用file()去開啟檔案取值,如果檔案不存在就會出錯誤

第二個問題是
echo $hits[0];
陣列$hits只存於函數inc_count()當中
在函數外是無法取得值的
解決的方法有二
一是將之宣告為全域變數
二是將$hits[0]做為回傳值傳出
在25行加上return $hits[0];
將27行改成$number = inc_count();
將28行改成echo $number;

本篇文章回覆於2015-05-20 09:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

clouding
捐贈 VP 給 clouding 檢舉此回應
補充一下迷路大說的

#12
我自己測試這邊好像會出錯
查了一下資料這個韓樹好像沒有FILE_APPEND的參數
file_put_contents 才有
應該是"\n" 不是 "/n"
這樣IP才會寫入正確


#23
這行多餘的
file取出的是陣列
本篇文章回覆於2015-05-20 10:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

宅人28
檢舉此回應
感謝迷大的回覆。數值的確成功傳出。
但是ip.txt這個檔似乎沒有被成功寫入任何記錄,不知道為什麼?
本篇文章回覆於2015-05-20 10:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

皮皮快跑
檢舉此回應
通篇最多餘的我覺得是註解。
假如這是你說的前人留下來的……
會有一種讓我覺得他的code是抄別人的。
要不就是他在註解這方面實在想的太……過頭。
而依照開放封閉原則論。
我寫個函式給你目的就不是要給你改的。
既然目的不是要給你改的那註解寫給我自己懂就好。
然後我個人的經驗是……我自己都不會為我自己的函式上註解。
因為沒幾行的東西上註解是要幹嘛?
本篇文章回覆於2015-05-20 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

皮皮快跑
檢舉此回應
唯一會為這個函式上註解的,就只有表達這個函式的用途是幹嘛而已。
本篇文章回覆於2015-05-20 11:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

宅人28
檢舉此回應
感謝雲大的補充,
雖然已經加了"\n",ip.txt之前的內容好像被蓋掉呢?
不應該是這樣的對吧?
本篇文章回覆於2015-05-20 13:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

宅人28
檢舉此回應

關於本人註解繁瑣及甚至有一些誤導性質的貼文方式,本人很抱歉。
本篇文章回覆於2015-05-20 14:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

皮皮快跑
檢舉此回應
啥?所以程式碼中的英文註解全是你自己寫的?
我說你自己都知道那些東西是幹嘛的話何必要再寫註解?
註解是只寫明有必要的部份。
就像我說的比如是說明這函式的用途。
我看過一種最糟糕的註解,初學者非常容易犯到

那他幹嘛不這樣寫就好了


記住。好的程式碼流程及結構有時本身就會形成一個無形的註解。
更方便閱讀。
本篇文章回覆於2015-05-20 14:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

宅人28
檢舉此回應
回皮老大,

這個程式是從這個YOUTUBE上抄來的,原文是
<pre lang="php">
<?php

$filename = 'hitcounter.txt';
$ip_filename = 'ip.txt';

function inc_count() {/*defining ip count function*/
$ip = $_SERVER['REMOTE_ADDR'];
global $filename, $ip_filename;

if(!in_array($ip, file($ip_filename, FILE_IGNORE_NEW_LINES))){
$current_value = (file_exists($filename)) ? file_get_contents($filename) :0;
file_put_contents($ip_filename, $ip."\n", FILE_APPEND);
file_put_contents($filename, ++$current_value);
}

}
$number = inc_count ();
echo $number ;

?>pre>

但是實際RUN會得到一個回應 Fatal error: Call to undefined function: file_put_contents() in C:\AppServ\www\mitast\counter_test.php on line 12

YOUTUBE教學的網址是https://www.youtube.com/watch?v=xkJI3TNQ9uk
點進去會看到有一堆老外嘴炮回覆說這個有多簡單,但是很顯然沒有人真的給它實際RUN過。
本篇文章回覆於2015-05-20 14:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

clouding
捐贈 VP 給 clouding 檢舉此回應
阿抱歉
我自己有改過忘記這邊了

#11


你可以查查看這兩個參數差別在哪
一個是繼續寫入,一個是歸零重新寫入
本篇文章回覆於2015-05-20 14:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

宅人28
檢舉此回應
回皮老大,

這個程式是從這個YOUTUBE上抄來的,原文是


<pre lang="php">
<?php

$filename = 'hitcounter.txt';
$ip_filename = 'ip.txt';

function inc_count() {/*defining ip count function*/
$ip = $_SERVER['REMOTE_ADDR'];
global $filename, $ip_filename;

if(!in_array($ip, file($ip_filename, FILE_IGNORE_NEW_LINES))){
$current_value = (file_exists($filename)) ? file_get_contents($filename) :0;
file_put_contents($ip_filename, $ip."\n", FILE_APPEND);
file_put_contents($filename, ++$current_value);
}

}
$number = inc_count ();
echo $number ;

?>
<pre>

但是實際RUN會得到一個回應 Fatal error: Call to undefined function: file_put_contents() in C:\AppServ\www\mitast\counter_test.php on line 12

YOUTUBE教學的網址是https://www.youtube.com/watch?v=xkJI3TNQ9uk
點進去會看到有一堆老外嘴炮回覆說這個有多簡單,但是很顯然沒有人真的給它實際RUN過。
本篇文章回覆於2015-05-20 14:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

皮皮快跑
檢舉此回應
你知道為什麼會沒有file_put_contents()嗎?
他們可不是嘴砲!
而是他們用的伺服器有開啟相關設定(一般只要是自管伺服器都會開啟吧。)
但是有的空間會禁止你拿來當做撈取資料的跳板或是做爬蟲。
所以會把一些抓取檔案的功能關掉。
你這樣就懷疑人家沒run過,人家知道了會很傷心喔!
本篇文章回覆於2015-05-20 14:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

宅人28
檢舉此回應
感謝。成功了,我把最後的碼填在下面。



感謝雲大和迷大。第一次發文不太會操作。接受我會先點雲大再點迷大,不知道點數會怎樣分。
今後還請多多指教。
本篇文章回覆於2015-05-20 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

宅人28
檢舉此回應
回皮老大,
了解。請多多指教。
本篇文章回覆於2015-05-20 15:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.