之前遇到个问题,需要将一个文件夹中的所有文件名取出并 存入到数据库中。采用php脚本测试,读取一个文件名,就立即存储到数据库中,结果花了我230多秒的时间,速度实在太慢!原因分析:insert 语句被执行了6000次,导致速度特别慢!改进方法:1、用php脚本 将 所有的文件名都存入到一个文本文件中filename.txt(一个文件名占一行),实测脚本执行时间 1.5262秒。2、用phpfgets()函数取出filename.txt中的每一行数据,保存到buffer数组中,将buffer数组写入到一条insert语句中,执行一次insert语句,实测脚本执行时间 0.0629秒。代码1如下:<?php
$st=microtime_float();//自定义函数,在代码2中可见。
$cout=0;$dir="e:/pydot";$talbe="pydot2";
if(is_dir($dir)){
if($dh=opendir($dir)) {
while(($file=readdir($dh)) !== false){
if($file!="."&&$file!=".."){
$file=mb_convert_encoding($file,"UTF-8","EUC-CN");
//$sql="insertinto ".$talbe."(name) values("".$file."");";
//$m->execute($sql);
$filename="test/filename.txt";
if(!$handle = fopen($filename, "a")) {
echo "不能打开文件$filename";
exit;
}
//将$file写入到我们打开的文件中。
fputs($handle,$file."
");
$cout++;
//echo$cout,":",$file."<br>";
echo$file."<br>";
}
}
closedir($dh);
}
}
$et=microtime_float();
$t=$et-$st;
echo"insert into talbe ",$talbe,"",$cout,"times;
<br>";
echo"Total time $t seconds.
";
?>代码2如下:<?php
$server="localhost";
$user="root";
$passwd="root";
$port="3306";
$dbname="dbname";
$talbe="tablename";
$c=0;$cc=0;
$st=microtime_float();
$link=mysql_connect($server,$user,$passwd);
if(!$link) {
die("Couldnot connect: " . mysql_error());
}
else echo "Connected successfully
<br>";
mysql_select_db("catx",$link);
$handle= @fopen("sq.txt", "r");
while((fgets($handle, 256)) !== false) {
$buffer[$c]= fgets($handle, 256);
$c++;
if(0==$c%5978){
$c=0;$start_c="("";$end_c="");";
$va="";
$kh=""),("";//括号
for($i=0;$i<5978;$i++){
$va=$va+$buffer[$i].$kh;
}
$sql="insertinto tablename(name) values".$start_c.$va.$end_c;
mysql_query($sql);
}
$cc++;
}
$et=microtime_float();
$t=$et-$st;
echo"Totaltime $t seconds.
<br>";
echo"insert into talbe ",$talbe,"",$cc,"times;
<br>";
functionmicrotime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>MySQL的table is read only 解决方法用php将某个 文件夹下的所有文件的 文件名存入MySQL数据库中相关资讯 MySQL数据库
- MySQL数据库重命名的方法 (06/16/2015 20:17:43)
- 10款最好用的MySQL数据库客户端图 (01/07/2015 15:05:35)
- Linux系统入门学习:命令行创建一 (10/11/2014 07:29:28)
| - MySQL之终端(Terminal)管理数据 (03/02/2015 17:03:41)
- C语言访问MySQL数据库的方法 (11/17/2014 23:10:15)
- 给Linux用户的11个高级MySQL数据库 (08/15/2014 16:41:16)
|
本文评论 查看全部评论 (0)