導航:首頁 > 網路數據 > php實時統計大數據

php實時統計大數據

發布時間:2023-11-04 05:47:36

1. 實時生成並下載大數據量的EXCEL文件,用PHP如何實現

對於任何一個網站肯定是少不了下載功能,常見的下載功能有圖片、視頻、Excel表格,如果文件比較小的話,那麼不會遇到任何的問題,但是當文件信息而超明銀過了PHP的最大內存,那麼在這個時候它就會有的內存溢出的問題。

那麼它們是因為什麼而發生的?對於這個過程的原理才是埋碧我們應該真正要去弄明白的事情

下載大數據量的EXCEL文件為何要報錯?

PHP在下載大Excel表格的時候,那麼首先它是需要去把MySQL的數據從硬碟上面讀取到內存,但讀取它是一次性載入到我們的內存,如果說它一次性載入的數據量遠遠大於最大內存,然後再來執行瀏覽器的業務下載。那麼這個時候它就會發生我們這個內存溢出。

就比如:說我們現在有100M的數據量,但是我們PHP內存最大隻有64M,那麼這個它肯定是裝不了的,我們可以把那個內存比喻為一個水杯,這個水杯的容量比喻為內存,現在杯子最大容量為64L。你要存放100L。肯定放不下

大事化小,小事化了。拆分成段

從上面可以看到文件下載,它是分為兩步,首先是載入內存然後執行瀏覽器的輸出下載,那麼既然大型文件一次性載入不了,那可以採用「大事化小,小事化了」思路,我們可以實現邊寫邊下載,也激液宴就是分批次的讀取與寫入。

因為用戶的話,只要最終拿到這個文件就可以,對於瀏覽器的下載原理不需要關心。只需要給到文件下載提示給用戶即可,然後後端在實時的分批次的寫入到要下載的文件當中。

實現思路步驟:

1、一設置瀏覽器下載Excel需要的Header

2、打開php://output流,並設置寫入文件句柄。

註:(php://output,是一個可寫的輸出流,允許程序像操作文件一樣將輸出寫入到輸出流中,PHP會把輸出流中的內容發送給web伺服器並返回給發起請求的瀏覽器)

3、獲取資料庫所有數據量,並設置每次查詢的條數,通過這兩個值計算分批查詢的次數

4、基於分批查詢的次數循環查詢資料庫,然後寫入到文件中,同時清除本次操作變數內存,刷新緩沖到瀏覽器,讓瀏覽器的文件始終實時保持到最新的大小

註:刷新用ob_flush、flush()

PHP的I/O流

在這里我們用到了PHP的一個IO的輸入輸出,也就是我們常用的

php://inputphp://output。

php://input

php://input可以讀取原始的POST數據。相較於$form-data」.

註:p>

php://output是一個只寫的數據流,允許你以print和echo一樣的方式寫入到輸出緩沖區。

綜上:實現思維與原理很重要如有感悟,歡迎在線咨詢

2. 如何使用PHP實時監控linux伺服器的cpu,內存,硬碟信息

1,Linux下可以在/proc/cpuinfo中看到每個cpu的詳細信息。但是對於雙核的cpu,在cpuinfo中會看到兩個cpu。常常會讓人誤以為是兩個單核的cpu。
其實應該通過Physical Processor ID來區分單核和雙核。而Physical Processor ID可以從cpuinfo或者dmesg中找到. flags 如果有 ht 說明支持超線程技術 判斷物理CPU的個數可以查看physical id 的值,相同則為同一個物理CPU

2,查看內存大小:
cat /proc/meminfo |grep MemTotal

3,其他一些可以查看詳細linux系統信息的命令和方法:
uname -a # 查看內核/操作系統/CPU信息的linux系統信息命令
head -n 1 /etc/issue # 查看操作系統版本,是數字1不是字母L
cat /proc/cpuinfo # 查看CPU信息的linux系統信息命令
hostname # 查看計算機名的linux系統信息命令
lspci -tv # 列出所有PCI設備
lsusb -tv # 列出所有USB設備的linux系統信息命令
lsmod # 列出載入的內核模塊
env # 查看環境變數資源
free -m # 查看內存使用量和交換區使用量
df -h # 查看各分區使用情況
-sh # 查看指定目錄的大小
grep MemTotal /proc/meminfo # 查看內存總量
grep MemFree /proc/meminfo # 查看空閑內存量
uptime # 查看系統運行時間、用戶數、負載
cat /proc/loadavg # 查看系統負載磁碟和分區
mount | column -t # 查看掛接的分區狀態
fdisk -l # 查看所有分區
swapon -s # 查看所有交換分區
hdparm -i /dev/hda # 查看磁碟參數(僅適用於IDE設備)
dmesg | grep IDE # 查看啟動時IDE設備檢測狀況網路
ifconfig # 查看所有網路介面的屬性
iptables -L # 查看防火牆設置
route -n # 查看路由表
netstat -lntp # 查看所有監聽埠
netstat -antp # 查看所有已經建立的連接
netstat -s # 查看網路統計信息進程
ps -ef # 查看所有進程
top # 實時顯示進程狀態用戶
w # 查看活動用戶
id # 查看指定用戶信息
last # 查看用戶登錄日誌
cut -d: -f1 /etc/passwd # 查看系統所有用戶
cut -d: -f1 /etc/group # 查看系統所有組
crontab -l # 查看當前用戶的計劃任務服務
chkconfig –list # 列出所有系統服務
chkconfig –list | grep on # 列出所有啟動的系統服務程序
rpm -qa # 查看所有安裝的軟體包
cat /proc/cpuinfo :查看CPU相關參數的linux系統命令
cat /proc/partitions :查看linux硬碟和分區信息的系統信息命令
cat /proc/meminfo :查看linux系統內存信息的linux系統命令
cat /proc/version :查看版本,類似uname -r
cat /proc/ioports :查看設備io埠
cat /proc/interrupts :查看中斷
cat /proc/pci :查看pci設備的信息
cat /proc/swaps :查看所有swap分區的信息

3. 如何解決PHP查詢大量數據內存耗盡的問題

這個問題在PHP的官方網站上叫緩沖查詢和非緩沖查詢(Buffered and Unbuffered queries)。PHP的查詢預設模式是緩沖模式。也就是說,查詢數據結果會一次全部提取到內存里供PHP程序處理。這樣給了PHP程序額外的功能,比如說,計算行數,將指針指向某一行等。更重要的是程啟喚序可以對數據集反復進行二次查詢和過濾等操作。但這種緩沖查詢模式的缺陷就是消耗內存,也就是用空間換速度。
相對的,另外一種PHP查詢模式察旁滲是非緩沖查詢,資料庫伺服器會一條一條的返回數據,而不是一次全部返回,這樣的結果就是PHP程序消耗較少的內存,但卻增加了資料庫伺服器的壓力,因為資料庫會一直等待PHP來取數據,一直到數據全部取完。
很顯然,緩沖查詢模式適敗脊用於小數據量查詢,而非緩沖查詢適應於大數據量查詢。

4. php + mysql 的網站 幾百萬數據一次性計算統計總和

php(做為現在的主流開發語言)實例教程:網站在線人數的程序代碼,後台有MySQL(和PHP搭配之最佳組合)資料庫支持。可以直接統計出網站當前的在線人數。

首先是創建MySQL(和PHP搭配之最佳組合)資料庫表。

以下是引用片段:
CREATE TABLE tablename (
field type(max_length) DEFAULT default_value (NOT) NULL
}
可以使用的SQL語句。

以下是引用片段:
CREATE TABLE useronline (
timestamp int(15) DEFAULT 0 NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
Prima(最完善的虛擬主機管理系統)RY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);
下面開始使用php(做為現在的主流開發語言)腳本,首先定義MySQL(和PHP搭配之最佳組合)的信息。

以下是引用片段:
$server = "localhost"; //你的伺服器
$db_user = "root"; //你的MySQL(和PHP搭配之最佳組合)的用戶名
$db_pass = "password"; //你的MySQL(和PHP搭配之最佳組合)的密碼
$database = "users"; //表的名字

設置統計的時間(多少秒內在線人數)

以下是引用片段:
$timeoutseconds = 300;
取當前時間。

以下是引用片段:
$timestamp = time();
上面的完整代碼:

以下是引用片段:
<?php(做為現在的主流開發語言)
$server = "localhost"; //your server
$db_user = "root"; //your MySQL(和PHP搭配之最佳組合) database username
$db_pass = "password"; //your MySQL(和PHP搭配之最佳組合) database password if any
$database = "users"; //the db name
$timeoutseconds = 300;//timeoutseconds limit
//get the current time
$timestamp = time();
//calculate the lowest timestamp allowed
$timeout = $timestamp-$timeoutseconds;
?>
連接MySQL(和PHP搭配之最佳組合)

以下是引用片段:
MySQL(和PHP搭配之最佳組合)_connect(localhost, username, password);

也允許使用變數形式。

以下是引用片段:
MySQL(和PHP搭配之最佳組合)_connect($server, $db_user, $db_pass);

如果MySQL(和PHP搭配之最佳組合)資料庫沒有密碼的話可以使用下面代碼連接(當然建議大家一定要設置好自己的密碼,這樣起碼黑客得要解密啊)

以下是引用片段:
MySQL(和PHP搭配之最佳組合)_connect($server, $db_user);

查詢資料庫的代碼:

以下是引用片段:
MySQL(和PHP搭配之最佳組合)_db_query(database, query);

只要有訪客就要增加一條記錄。

以下是引用片段:
$insert = MySQL(和PHP搭配之最佳組合)_db_query($

5. PHP網站怎麼加網站訪問量統計

1、本地新建一個空白文檔,命名為cnt.php
2、用記事本打開cnt.php,然後將代碼復制到cnt.php裡面。代碼如下:
<?php
$n=file_get_contents('cnt.txt');
$n++;
file_put_contents('cnt.txt',$n);
echo "document.write($n);";
?>
3、保存cnt.php文件,並上傳到伺服器。
4、然後在主頁或者其它頁面裡面這樣調用計數器:
」你是第<script type=text/javascript src=cnt.php></script>位訪問者「
就可以了。
5、這樣就可以清楚的知道了有多少訪客來訪了。這個除了在首頁可以使用外,其他頁面也可以通過這個方法進行調用,只需要在你需要統計的地方添加上這個」你是第<script type=text/javascript src=cnt.php></script>位訪問者「就可以輕松知道你需要統計的地方有多少訪客了。

6. php如何統計訪問單篇文章的訪問量

先給儲存相應文章的數據表增加一個記錄訪問量的欄位。

1, 可以每訪問一次,欄位數量加一,但是這樣會不準確,因為只要刷新一下,就會記錄一下。

2, 為了防止上面的情況發生,可以記錄訪問者的IP地址,重復的IP地址訪問,只記錄一次。

3, 但是,一個IP地址,只記錄一次,也有問題,比如,一個區域網,多個訪問者,共用一個IP地址,這樣也會記錄不準確。所以最好,一個IP地址一定時間內訪問記錄一次。這樣相對好一點。

4, 不過,即使記錄IP地址,但是也有可能有惡意的用戶通過切換IP,或者通過刷票軟體來刷訪問量。這些問題,還需要更深的研究一下,怎麼應對。

比如:

<?php
$ip = $_SERVER['REMOTE_ADDR'];

//循環對比數據表中儲存的IP,如果IP存在,不再記錄

$query = mysql_query("select * contetns where ip = '".$ip."'");

if(mysql_num_rows($query) > 0){
//IP存在
}else{
//記錄訪問量
}
?>

7. PHP中如何實現在線人數的統計和顯示

要使用資料庫,建立一個表,比如名字是online,至少有以下列:
name_ip 存放登錄用戶名,未登錄的存放IP,char類型
url 存放每個頁面的地址,char類型
last_time 存放刷新頁面的最後時間,int類型
表的主鍵是:name_ip+url

每個頁面一開始就要刷新這個表,使用的SQL是:
$name_ip='用戶名或者IP';//你能搞定
$url=$_SERVER["PHP_SELF"];
$time=time();
$sql="replace delayed into online (name_ip,url,last_time) values ('$name_ip','$url',$time)";
mysql_query($sql);

獲取某頁面在線人數的查詢是語句
$limit=time()-10*60;//10分鍾內訪問的認為在線,10分鍾*60秒/分鍾
$sql="select count(*) from online where url='$url' and last_time>=$limit";
$res=mysql_query($sql);
list($online_count)=mysql_fetch_row($res);
mysql_free_result($res);

echo "本頁面在線人數: $online_count";

8. php採集大數據的方案

1、建議你讀寫數據和下載圖片分開,各用不同的進程完成。
比如說,取數據用get-data.php,下載圖片用get-image.php。

2、多進程的話,php可以簡單的用pcntl_fork()。這樣可以並發多個子進程。
但是我不建議你用fork,我建議你安裝一個gearman worker。這樣你要並發幾個,就啟幾個worker,寫代碼簡單,根本不用在代碼里考慮thread啊,process等等。

3、綜上,解決方案這樣:
(1)安裝gearman worker。
(2)寫一個get-data.php,在crontab里設置它每5分鍾執行一次,只負責讀數據,然後把讀回來的數據一條一條的扔到 gearman worker的隊列里;
然後再寫一個處理數據的腳本作為worker,例如叫process-data.php,這個腳本常駐內存。它作為worker從geraman 隊列里讀出一條一條的數據,然後跟你的資料庫老數據比較,進行你的業務邏輯。如果你要10個並發,那就啟動10個process-data.php好了。處理完後,如果圖片地址有變動需要下載圖片,就把圖片地址扔到 gearman worker的另一個隊列里。
(3)再寫一個download-data.php,作為下載圖片的worker,同樣,你啟動10個20個並發隨便你。這個進程也常駐內存運行,從gearman worker的圖片數據隊列里取數據出來,下載圖片

4、常駐進程的話,就是在代碼里寫個while(true)死循環,讓它一直運行好了。如果怕內存泄露啥的,你可以每循環10萬次退出一下。然後在crontab里設置,每分鍾檢查一下進程有沒有啟動,比如說這樣啟動3個process-data worker進程:
* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'
* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'
* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php >> /dev/null 2>&1'

不知道你明白了沒有

9. php如何排除網路爬蟲,統計出訪問量。

PHP可以通過$_SERVER['HTTP_USER_AGENT']函數來判斷是否是蜘蛛以及是什麼蜘蛛!
代碼如下:$useragent=$_SERVER['HTTP_USER_AGENT'];
if(substr_count($useragent,"Baispider")){echo "網路蜘蛛";}還有就是從IIS或者APACHE的訪問日誌里的報頭來判斷,但是這樣的話,必須用程序去只讀日誌文件,如果多的情況下,有可能產生的日誌文件大小非常大,而每次讀這個文件,基本上你伺服器可以不幹別的了!

閱讀全文

與php實時統計大數據相關的資料

熱點內容
如何使用機器語言去編程 瀏覽:244
審計要學哪些編程幫助工作 瀏覽:988
qq賬號注銷要去哪個網站 瀏覽:337
安裝在手機里的app怎麼分解 瀏覽:865
新主板做xp系統教程 瀏覽:751
linux訪問php文件 瀏覽:58
光碟機數據線連接在主板哪裡 瀏覽:577
85版本怎麼樣賺錢快 瀏覽:14
計算機網路信息保密技術 瀏覽:855
jsonformat註解用法 瀏覽:697
設置ipad需要選擇備份文件路徑 瀏覽:309
電腦文件怎麼保存到桌面不卡 瀏覽:810
java獲得本機外網的ip地址 瀏覽:391
微信小程序ios能過么 瀏覽:208
蘋果app後台耗電太大怎麼關閉 瀏覽:178
怎麼查看zabbix版本號 瀏覽:327
手機app整合文件名 瀏覽:492
壓縮包保存文件找不到臨時文件 瀏覽:958
iphone4來電mv素材 瀏覽:684
資料庫怎麼查速度 瀏覽:89

友情鏈接