文件上传导入数据库

strrchr查找指定字符在字符串中的最后一次出现,’.csv’ != strrchr($filename,’.’ 查找出.csv
mb_convert_encoding转换字符的编码,从gkb转到

<?php
	if(isset($_FILES['file1'])){
		if($_FILES['file1']['error'] !=0){
			die('上传文件失败');
		}
		$tmp = $_FILES['file1']['tmp_name'];
		$filename = $_FILES['file1']['name'];
		if('.csv' != strrchr($filename,'.')){
			die('请上传csv格式的文件');
		}
?>

mb_convert_encoding转换字符的编码,从gkb转到utf-8
move_uploaded_file将上传的文件移动到新的位置

$filename = mb_convert_encoding($filename, 'gbk','utf-8');
		$ret = move_uploaded_file($tmp, $filename);
		if(true === $ret){
			include 'read.php';
			write($filename);
			echo '导入完毕';
		}else{
			echo '上传失败';
		}
		exit;
	}

multipart/form-data完整的传递文件数据

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<form name="form1" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
		<input type="hidden" name="MAX_FILE_SIZE" value="10024000">
		<input type="file" name="file1">
		<input type="submit" value="上传">
	</form>
</body>
</html>

fopen :r只读方式打开

function write($file){
if(!file_exists($file)){die('文件不存在');}
	
//fopen 打开文件
$fp = @fopen($file,'r');//r只读方式打开
if(false===$fp){die('打开文件失败');}

连接数据库

$conn = @new mysqli('localhost','root','','school');

if($conn->connect_error){
	die('连接数据库失败');
}
$conn->set_charset('utf8');
// $time1 = microtime(true);

$sql = "insert into student (id,no,name) values";

fgets 读取文件 if($i>0 && $i%10000==0) 如果数据太多就一万一万的插入

$i = 0;
//打开日志文件
$log = fopen('log.txt', 'w'); 
while($str = fgets($fp)){	//fgets 读取文件
	$encoding = mb_detect_encoding($str,array("ASCII","UTF-8","GB2312","GBK","BIG5"));
	if($encoding != 'UTF-8'){
		$str = mb_convert_encoding($str, 'utf-8',$encoding);
	}
	$arr = explode(',', $str);//分割
	if($i>0 && $i%10000==0){
		$sql = rtrim($sql,',');
		$ret = $conn->query($sql);
		if($ret){
			fwrite($log, sprintf('成功写入%s行' . PHP_EOL,$conn->affected_rows));
		}else{
			fwrite($log, '写入失败' . PHP_EOL);
		}
		$sql = "insert into student (id,no,name) values";
	}
	$sql .= "(null,'{$arr[0]}','{$arr[1]}'),";
	// echo '<br>';
	$i++;
}
if(!empty($sql)){
	$sql = rtrim($sql,',');
	$ret = $conn->query($sql);
	if($ret){
			fwrite($log, sprintf('成功写入%s行' . PHP_EOL,$conn->affected_rows));
		}else{
			fwrite($log, '写入失败' . PHP_EOL);
		}
}
	$conn->close();
	fclose($fp);//关闭文件
	fclose($log);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值