在使用PhpMyAdmin的時(shí)候經(jīng)常用到數(shù)據(jù)的導(dǎo)入和導(dǎo)出(Export/Import),但是在導(dǎo)入大數(shù)據(jù)的時(shí)候由于php上傳文件的限制和腳本響應(yīng)時(shí)間的限制,導(dǎo)致phpMyAdmin無法導(dǎo)入大數(shù)據(jù)。很多時(shí)候都是由于文件過大,從本地瀏覽上傳導(dǎo)入,容易中斷失敗,有沒有更好的方法呢?
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)辰溪,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
方法:
在phpMyAdmin的目錄下,找到根目錄的config.inc.php文件,
打開config.inc.php文件,查找$cfg['UploadDir'],這個(gè)參數(shù)就是設(shè)定導(dǎo)入文件存放的目錄,這里把值設(shè)定為:ImportSQLFile。
在phpMyAdmin目錄下,建立以ImportSQLFile命名的文件夾,
把我們需要導(dǎo)入的數(shù)據(jù)文件,放到ImportSQLFile文件夾下面,非常簡單,
登入phpMyAdmin,選擇需要導(dǎo)入的數(shù)據(jù),點(diǎn)擊導(dǎo)航條上面的“導(dǎo)入”按鈕,
選中“從網(wǎng)站服務(wù)器上傳文件夾ImportSQLFile/中選擇:”選項(xiàng),并需要導(dǎo)入的數(shù)據(jù)文件,
最后點(diǎn)擊“執(zhí)行”,即可導(dǎo)入成功。
注意事項(xiàng)
如果在config.inc.php文件,沒有找到$cfg['UploadDir'],可以自己在文件中添加上去即可。
php導(dǎo)出大量數(shù)據(jù)到Excel,可以通過生成多個(gè)Excel文件,然后壓縮成壓縮包解決。
方案是:假如我們數(shù)據(jù)庫有10w條數(shù)據(jù),每2000條數(shù)據(jù)生成一個(gè)Excel文件,這樣每次只要從數(shù)據(jù)庫里查詢出2000條數(shù)據(jù)即可,一定要分頁去查詢。
原因:主要是數(shù)據(jù)庫性能和寫文件性能。分頁查詢可以解決數(shù)據(jù)庫壓力的問題, 生成多個(gè)文件可以解決單個(gè)文件太大,后期維護(hù)Excel文件的問題。
要注意的:
1. 在導(dǎo)出邏輯文件開頭,一定要聲明 set_time_limit(0) ,防止腳本超時(shí);
2. 每個(gè)文件生成后,適當(dāng)?shù)膕leep一下,讓程序休息一下下;
3. 因?yàn)橐淮螌?dǎo)出最后要將生成的多個(gè)Excel文件打包成一個(gè)壓縮包,所以要刪除掉生成的Excel文件,節(jié)省服務(wù)器存儲空間;
下面是我實(shí)際工作中,寫的一個(gè)php導(dǎo)出大量數(shù)據(jù)到Excel的代碼,你可以參考一下:
在PHP網(wǎng)站建設(shè)中,針對Mysql數(shù)據(jù)庫的保護(hù)是平常工作,Mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出實(shí)現(xiàn)...
如果你想phpmyadmin導(dǎo)入大文件,最簡單的方法是修改php.ini配置文件中文件上傳大小...
解決方法如下:
(1)修改php.ini適用自己有服務(wù)器的人
大多數(shù)都修改php.ini中的upload_max_filesize,但修改了這個(gè)以后,還是提示這個(gè)問題;
那么更改如下幾處:
修改
PHP.ini
file_uploads
on
是否允許通過HTTP上傳文件的開關(guān)。默認(rèn)為ON即是開
upload_tmp_dir
文件上傳至服務(wù)器上存儲臨時(shí)文件的地方,如果沒指定就會用系統(tǒng)默認(rèn)的臨時(shí)文件夾
upload_max_filesize
20m
望文生意,即允許上傳文件大小的最大值。默認(rèn)為2M
post_max_size
30m
指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認(rèn)為8M
說明
一般地,設(shè)置好上述四個(gè)參數(shù)后,在網(wǎng)絡(luò)正常的情況下,上傳=8M的文件是不成問題
但如果要上傳8M的大體積文件,只設(shè)置上述四項(xiàng)還一定能行的通。除非你的網(wǎng)絡(luò)真有100M/S的上傳高速,否則你還得繼續(xù)設(shè)置下面的參數(shù)。
max_execution_time
300
每個(gè)PHP頁面運(yùn)行的最大時(shí)間值(秒),默認(rèn)30秒
max_input_time
300
每個(gè)PHP頁面接收數(shù)據(jù)所需的最大時(shí)間,默認(rèn)60秒
memory_limit
128m
每個(gè)PHP頁面所吃掉的最大內(nèi)存,默認(rèn)8M
設(shè)定
POST
數(shù)據(jù)所允許的最大大小。此設(shè)定也影響到文件上傳。要上傳大文件,該值必須大于
upload_max_filesize。
如果配置腳本中激活了內(nèi)存限制,memory_limit
也會影響文件上傳。通常說,memory_limit
應(yīng)該比
post_max_size
要大。
(2)這個(gè)方法很簡單,不需要修改php.ini參數(shù),
適用把站放在虛擬主機(jī)的人。
打開phpMyAdmin目錄下的配置文件:config.inc.php
請注意其中的這兩個(gè)參數(shù):
$cfg['UploadDir']
=
‘A‘;
$cfg['SaveDir']
=
‘B‘;
在phpMyAdmin目錄下自行建立文件夾A和B來對應(yīng)UploadDir(導(dǎo)入目錄)和SaveDir(導(dǎo)出目錄)。
導(dǎo)出操作:
1、登陸phpMyAdmin
2、在左側(cè)選中你需要備份導(dǎo)出的數(shù)據(jù)庫
3、在右側(cè)窗口中找到“導(dǎo)出”
4、在右側(cè)窗口底部選擇“保存于服務(wù)器的
B/
目錄”
5、選擇壓縮模式,提交“執(zhí)行”即可在B文件夾中找到該數(shù)據(jù)庫的導(dǎo)出數(shù)據(jù)。
導(dǎo)入操作:
1、上傳準(zhǔn)備導(dǎo)入的數(shù)據(jù)文件到A目錄
2、登陸phpMyAdmin
3、在左側(cè)選中你需要備份導(dǎo)出的數(shù)據(jù)庫
4、在右側(cè)窗口中找到“Import”(導(dǎo)出)
5、在右側(cè)窗口“網(wǎng)站服務(wù)器上載目錄”中選擇需要導(dǎo)入的數(shù)據(jù)文件,提交“執(zhí)行”完成導(dǎo)入
先定義頭部信息,表示輸出一個(gè)excel。
然后再以table的形式把數(shù)據(jù)庫的信息循環(huán)的echo出來。
?php?
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=xls_region.xls");
$cfg_dbhost?=?'localhost';
$cfg_dbname?=?'testdb';
$cfg_dbuser?=?'root';
$cfg_dbpwd?=?'root';
$cfg_db_language?=?'utf8';
//?END?配置
//鏈接數(shù)據(jù)庫
$link?=?mysql_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd);
mysql_select_db($cfg_dbname);
//選擇編碼?
mysql_query("set?names?".$cfg_db_language);
//users表
$sql?=?"desc?users";?
$res?=?mysql_query($sql);
echo?"tabletr";
//導(dǎo)出表頭(也就是表中擁有的字段)
while($row?=?mysql_fetch_array($res)){
$t_field[]?=?$row['Field'];?//Field中的F要大寫,否則沒有結(jié)果
echo?"th".$row['Field']."/th";
}
echo?"/tr";
//導(dǎo)出100條數(shù)據(jù)
$sql?=?"select?*?from?users?limit?100";
$res?=?mysql_query($sql);
while($row?=?mysql_fetch_array($res)){
echo?"tr";
foreach($t_field?as?$f_key){
echo?"td".$row[$f_key]."/td";
}
echo?"/tr";
}
echo?"/table";?
?