php實(shí)現(xiàn)統(tǒng)計(jì)IP數(shù)及在線(xiàn)人數(shù)的示例代碼
寫(xiě)在前面的話(huà)
很多人有這樣的需求,就是統(tǒng)計(jì)網(wǎng)站訪(fǎng)問(wèn)IP以及在線(xiàn)的人數(shù)。今天我們就看一下具體實(shí)現(xiàn)方法。
開(kāi)啟依賴(lài)函數(shù)模塊
實(shí)現(xiàn)這個(gè)功能,需要依賴(lài)putenv()函數(shù)。下面兩種方式均可。
更改php.ini文件方法
找到php.ini文件,搜索putenv關(guān)鍵字,刪除即可。
isable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
使用寶塔面板
點(diǎn)擊左側(cè)軟件管理,找到php,然后設(shè)置->禁用函數(shù)。

刪除putenv,然后重啟php即可。
實(shí)現(xiàn)函數(shù)
在count.php同目錄下創(chuàng)建文件:count,temp,online。新建文本文檔count.txt,去掉擴(kuò)展名即為count了;
linux系統(tǒng)中請(qǐng)?jiān)O(shè)置文件屬性為:777。
文件count.php代碼,用到了php函數(shù)--explode、isset、empty及sprintf等:
<?php
$file = "count"; // 記數(shù)文件名稱(chēng)
$startno = "1000"; // 起始數(shù)值
$tempfile = "temp";
$t_now = time();
$t_array = getdate($t_now);
$day = $t_array['mday'];
$mon = $t_array['mon'];
$year = $t_array['year'];
if (file_exists("$file")) {
$count_info=file("$file");
$c_info = explode(",", $count_info[0]);
$total_c=$c_info[0];
$yesterday_c=$c_info[1];
$today_c=$c_info[2];
$lastday=$c_info[3];
} else {
$total_c="$startno";
$yesterday_c="0";
$today_c="0";
$lastday="0";
}
if ( !isset($HTTP_COOKIE_VARS["countcookie"]) || $HTTP_COOKIE_VARS["countcookie"] != $day) {
$your_c=1;
$lockfile=fopen("temp","a");
flock($lockfile,3);
putenv('TZ=JST-9');
$t_array2 = getdate($t_now-24*3600);
$day2=$t_array2['mday'];
$mon2=$t_array2['mon'];
$year2=$t_array2['year'];
$today = "$year-$mon-$day";
$yesterday = "$year2-$mon2-$day2";
if ($today != $lastday) {
if ($yesterday != $lastday) $yesterday_c = "0";
else $yesterday_c = $today_c;
$today_c = 0;
$lastday = $today;
}
$total_c++;
$today_c++;
$total_c = sprintf("%06d", $total_c);
$today_c = sprintf("%06d", $today_c);
$yesterday_c = sprintf("%06d", $yesterday_c);
setcookie("countcookie","$day",$t_now+43200);
$fp=fopen("$file","w");
fputs($fp, "$total_c,$yesterday_c,$today_c,$lastday");
fclose($fp);
fclose($lockfile);
}
if ( empty( $your_c ) ) $your_c = 1;
setcookie("yourcount",$your_c+1,$t_now+43200);
$your_c = sprintf("%06d", $your_c);
//////////////////////////開(kāi)始統(tǒng)計(jì)在線(xiàn)
$filename="online";
$onlinetime=600; //同一IP在線(xiàn)時(shí)間,單位:秒
$online_id=file($filename);
$total_online=count($online_id);
$ip=getenv("REMOTE_ADDR");
$nowtime=time();
for($i=0;$i<$total_online;$i++){
$oldip=explode("||",$online_id[$i]);
$hasonlinetime=$nowtime-$oldip[0];
if($hasonlinetime<$onlinetime and $ip!=$oldip[1]) $nowonline[]=$online_id[$i];
}
$nowonline[]=$nowtime."||".$ip."||";
$total_online=count($nowonline);
$fp=fopen($filename,"w");
rewind($fp);
for($i=0;$i<$total_online;$i++){
fputs($fp,$nowonline[$i]);
fputs($fp,"n");
}
fclose($fp);
if($total_online==0)$total_online=1;
$total_online = sprintf("%06d", $total_online);
///////////////////////////////////////////////////////
echo "document.write("·總IP訪(fǎng)問(wèn):".$total_c."");";
echo "document.write("<br>");";
echo "document.write("·昨日訪(fǎng)問(wèn):".$yesterday_c."");";
echo "document.write("<br>");";
echo "document.write("今日IP:".$today_c."");";
echo "document.write(" ");";
echo "document.write("·您 訪(fǎng) 問(wèn):".$your_c."");";
echo "document.write("<br>");";
echo "document.write("當(dāng)前在線(xiàn):".$total_online."");";
exit;
?>

調(diào)用
用JS調(diào)用文件count.php
在需要加入統(tǒng)計(jì)的的地方,添加:
<script src="/php/count.php"></script>
到此這篇關(guān)于php實(shí)現(xiàn)統(tǒng)計(jì)IP數(shù)及在線(xiàn)人數(shù)的示例代碼的文章就介紹到這了,更多相關(guān)php 統(tǒng)計(jì)IP數(shù)及在線(xiàn)人數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PHP獲取真實(shí)IP及IP模擬方法解析
- php判斷IP地址是否在多個(gè)IP段內(nèi)
- bt寶塔面板php7.3、php7.4不支持ZipArchive解決方法
- 通過(guò)PHP實(shí)現(xiàn)獲取訪(fǎng)問(wèn)用戶(hù)IP
- PHP Pipeline 實(shí)現(xiàn)中間件的示例代碼
- 原生javascript的ajax請(qǐng)求及后臺(tái)PHP響應(yīng)操作示例
- php利用ZipArchive類(lèi)操作文件的實(shí)例
- PHP生成zip壓縮包的常用方法示例
- php解壓縮zip和rar壓縮包文件的方法
- PHP基于ip2long實(shí)現(xiàn)IP轉(zhuǎn)換整形
相關(guān)文章
Laravel獲取所有的數(shù)據(jù)庫(kù)表及結(jié)構(gòu)的方法
今天小編就為大家分享一篇Laravel獲取所有的數(shù)據(jù)庫(kù)表及結(jié)構(gòu)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
php實(shí)現(xiàn)分頁(yè)工具類(lèi)分享
本文分享一個(gè)php實(shí)現(xiàn)的分頁(yè)工具類(lèi),代碼內(nèi)有注釋?zhuān)蠹覅⒖际褂冒?/div> 2014-01-01
phpStudy2016 配置多個(gè)域名期間遇到的問(wèn)題小結(jié)
這篇文章主要介紹了phpStudy2016 配置多個(gè)域名期間遇到的問(wèn)題小結(jié),需要的朋友可以參考下2017-10-10
linux實(shí)現(xiàn)php定時(shí)執(zhí)行cron任務(wù)詳解
linux實(shí)現(xiàn)php定時(shí)執(zhí)行cron任務(wù)2013-12-12
Laravel5.7框架安裝與使用學(xué)習(xí)筆記圖文詳解
這篇文章主要介紹了Laravel5.7框架安裝與使用學(xué)習(xí)筆記,結(jié)合圖文形式詳細(xì)講解了Laravel5.7框架的安裝、配置、組件、路由等基礎(chǔ)與操作技巧,需要的朋友可以參考下2019-04-04最新評(píng)論

