最近做一个PHP导入csv文件数据到mysql数据库的项目,做好了后测试是没有问题的,测试的时候都是小文件,最大1M的csv文件都没问题,但是今天突然来了个5M多,5w多条数据的csv文件,就一直说是取不到文件名,不然就是解析不到数据,求大神看看,要说代码有问题,但是小文件都可以上传,遇到大文件就歇菜了,
报错: fgetcsv() expects parameter 1 to be resource, boolean given in
以下是我的处理代码,
$filename = $_FILES['file']['tmp_name'];
$handle = fopen($filename, 'r');
$result = input_csv($handle); //解析csv
$len_result = count($result);
if($len_result==0){
echo '没有任何数据!';
exit;
}
$data_values=null;
for ($i = 1; $i < $len_result; $i++) { //循环获取各字段值
$mac = $result[$i][1]; //中文转码
$int1= $result[$i][2];
$field = $result[$i][3];
$channel = $result[$i][4];
$int2= $result[$i][5];
$sta = $result[$i][6];
$int3 = $result[$i][7];
$int4= $result[$i][8];
$int5= $result[$i][9];
$time1 = $result[$i][10];
$time2 = $result[$i][11];
$time3 = $result[$i][12];
$time4 = $result[$i][13];
$hostmac =$result[$i][14]; //中文转码
$data_values .= "('$mac',$int1,$field,$channel,$int2,$sta,$int3,$int4,$int5,FROM_UNIXTIME($time1),FROM_UNIXTIME($time2),FROM_UNIXTIME($time3),FROM_UNIXTIME($time4),'$hostmac'),";
// $sql = "insert into macdata (m_mac,m_int1,m_field,m_channel,m_int2,m_sta,m_int3,m_int4,m_int5,m_time1,m_time2,m_time3,m_time4,m_hostmac) values ('$mac',$int1,$field,$channel,$int2,$sta,$int3,$int4,$int5,FROM_UNIXTIME($time1),FROM_UNIXTIME($time2),FROM_UNIXTIME($time3),FROM_UNIXTIME($time4),'$hostmac')";//批量插入数据表中
// $result2 = $conn->query($sql);
// if($result2){
// echo '导入成功!';
// }else{
// echo '导入失败!';
// }
}
$data_values = substr($data_values,0,-1); //去掉最后一个逗号
fclose($handle); //关闭指针
$sql = "insert into macdata (m_mac,m_int1,m_field,m_channel,m_int2,m_sta,m_int3,m_int4,m_int5,m_time1,m_time2,m_time3,m_time4,m_hostmac) values $data_values";//批量插入数据表中
$result2 = $conn->query($sql);
if($result2){
echo '<script>window.location.href = "Mactest.php";alert("导入成功!")</script>';
}else{
echo '<script>window.location.href = "Mactest.php";alert("导入失败,请重试!")</script>';
}
function input_csv($handle) {
$out = array ();
$n = 0;
while ($data = fgetcsv($handle,100000)) {
$num = count($data);
for ($i = 0; $i < $num; $i++) {
$out[$n][$i] = $data[$i];
}
$n++;
}
return $out;
}