為了實驗大資料的匯出,我們這裡先自已建立一張大表,表結構如下:
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 下...