php使用fputcsv進行大資料的匯出

2021-09-07 09:10:45 字數 2766 閱讀 5588

為了實驗大資料的匯出,我們這裡先自已建立一張大表,表結構如下:

create table `tb_users` (

`id` int(11) unsigned not null auto_increment comment '使用者id',

`name` varchar(32) default '' comment '使用者名稱',

`age` tinyint(3) default '0' comment '使用者年齡',

`desc` varchar(255) default '' comment '使用者描述',

`phone` varchar(11) default '' comment '使用者手機',

`qq` varchar(16) default '' comment '使用者qq',

`email` varchar(64) default '' comment '使用者郵箱',

`addr` varchar(255) default '' comment '使用者位址',

primary key (`id`)

) engine=innodb default charset=utf8;

然後寫個php指令碼往這個表插入資料,**如下:

<?php 

set_time_limit(0);

ini_set('memory_limit', '128m');

//使用tp3.2的string類,php7下會報錯,注意把類名換一下

require './string.class.php';

use org\util\newstring;

$begin = microtime(true);

$db = new mysqli('127.0.0.1', 'root', '', 'test');

if($db->connect_error)

//資料插入語句

$inssql = '';

//一百萬資料,分200步,每步插入5000條

$step = 200;

$nums = 5000;

for($s = 0; $s < $step; ++$s) ', $age, '', '', '', '', ''),";

}$inssql = rtrim($inssql, ',');

$db->query($inssql);

}$end = microtime(true);

echo '用時:', $end - $begin;

$db->close();

現在我們用php提供的fputcsv來匯出這一百萬的資料,原理就是開啟乙個標準輸出流,然後把資料按一萬條來分割,每一萬條就重新整理緩衝區。

<?php 

set_time_limit(0);

ini_set('memory_limit', '128m');

$filename = date('ymdhis', time());

header('content-disposition: attachment;filename="' . $filename . '.csv"');

$begin = microtime(true);

//開啟php標準輸出流

//以寫入追加的方式開啟

$fp = fopen('php://output', 'a');

$db = new mysqli('127.0.0.1', 'root', '', 'test');

if($db->connect_error)

//我們試著用fputcsv從資料庫中匯出1百萬的資料

//我們每次取1萬條資料,分100步來執行

//如果線上環境無法支援一次性讀取1萬條資料,可把$nums調小,$step相應增大。

$step = 100;

$nums = 10000;

//設定標題

$title = array('id', '使用者名稱', '使用者年齡', '使用者描述', '使用者手機', '使用者qq', '使用者郵箱', '使用者位址');

foreach($title as $key => $item)

//將標題寫到標準輸出中

fputcsv($fp, $title);

for($s = 1; $s <= $step; ++$s) ,");

if($result)

fputcsv($fp, $row);

}$result->free();

//每1萬條資料就重新整理緩衝區

ob_flush();

flush();

}}$end = microtime(true);

echo '用時:', $end - $begin;

整個過程用時5分鐘,最終生成的csv檔案大小420m。

比如你有乙個查詢資料表單,id為searchfrm,然後你想把匯出資料按1萬條分割(phpexcel一次匯出1萬條是沒有問題的,效率還行)

使用PHP進行HTTP認證

我們在登入某些安全性較高的 時,有時候可能會遇到這種情況 直接在網頁上 彈出乙個windows視窗,要求輸入認證的使用者名稱和密碼,只有認證登入成功才能看到內 容,否則的話則連該頁面都無法開啟,這是一種http認證的的方式,它大大加強了系統 的保密性和安全性,那這是如何實現的呢,下面我就簡要向大家介...

PHP使用DES進行加密解密

des是一種對稱加密演算法,也就是通過密文和合法的金鑰能夠將明文還原出來,在程式開發過程中有些介面可能需要獲取原始資料,而傳送的資料又比較敏感 比如使用者的密碼等資訊 這時可以選擇des加密演算法,des的安全性還算可靠,只要加密金鑰不洩露,目前破解的方法只有窮舉法進行破解。再說一下應用時需要注意的...

使用phpstorm進行PHP斷點除錯

php開發中都說乙個會偷懶的程式設計師才是合格的程式設計師,在php開發中除錯是必須要有的,可能要重複很多次的去除錯,一次又一次,今天我們就來教教大家如何偷懶的,那麼就來講講使用phpstorm進行偷懶吧!2 把xdebug安裝到php 在php.ini裡修改 在 module settings 下...