如何使用 PHP 将大型 Excel 文件导入 MySql 数据库
Posted
技术标签:
【中文标题】如何使用 PHP 将大型 Excel 文件导入 MySql 数据库【英文标题】:How To Import Large Excel File To MySql Database Using PHP 【发布时间】:2014-07-15 04:54:57 【问题描述】:我必须使用 php 将 excel 文件的数据上传到 mysql 数据库。我找到了代码,但我无法上传大文件。
谁能告诉我如何增加下面链接中提到的代码的最大文件大小限制:
http://www.9code.in/how-to-import-excel-file-to-mysql-database-using-php/
<!DOCTYPE html>
<?php
include 'db.php';
include 'Excel/reader.php';
function uploadFile($fieldName, $fileType, $folderName, $name = "")
$flg = 0;
$MaxID = "";
$ext = "";
$uploadfile = "";
if (isset($fieldName) AND $fieldName['name'] != '')
$flg = 1;
$allowed_filetypes = $fileType;
// I Need to increase this..... I tried changing values but nothing happened
$max_filesize = 1048576;
$filename = $fieldName['name'];
if ($name == "")
$MaxID = time() . time() . rand(1, 100);
else
$MaxID = $name;
$ext = substr($filename, strpos($filename, '.'), strlen($filename) - 1);
if($ext==".xlsx")
$ext=".xls";
if (!in_array($ext, $allowed_filetypes))
echo "<h1>The file you attempted to upload is not allowed...</h1>";
else if (filesize($fieldName['tmp_name']) > $max_filesize)
echo "<h1>The file you attempted to upload is too large...</h1>";
else
$uploadfile = $folderName . "/" . $MaxID . $ext;
if (move_uploaded_file($fieldName['tmp_name'], $uploadfile) == FALSE)
echo "<h1>Error in Uploading File...</h1>";
$MaxID = "";
else
$MaxID = $MaxID . $ext;
return $MaxID;
if(isset($_POST['submit']))
if($_FILES['csvFile']['name']!="")
$fileName=uploadFile($_FILES['excelFile'],array(".csv"),"excel_file");
$row=0;
if(($handle = fopen("excel/".$fileName , "r")) !== FALSE)
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
$num = count($data);
//print_r($data);
$query="INSERT INTO StudentData(FirstName,LastName,MobileNo,City)VALUES('".$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."')";
mysql_query($query);
fclose($handle);
else if($_FILES['excelFile']['name']!="")
$fileName=uploadFile($_FILES['excelFile'],array(".xls",".xlsx"),"excel_file");
$data = new Spreadsheet_Excel_Reader();
$data->read('excel_file/'.$fileName);
for($i=1;$i<=$data->sheets[0]['numRows'];$i++)
$firstname=$data->sheets[0]['cells'][$i][1];
$lastname=$data->sheets[0]['cells'][$i][2];
$mobile=$data->sheets[0]['cells'][$i][3];
$city=$data->sheets[0]['cells'][$i][4];
$query="INSERT INTO StudentData(FirstName,LastName,MobileNo,City)VALUES('".$firstname."','".$lastname."','".$mobile."','".$city."')";
mysql_query($query);
if(isset($_POST['delete']))
mysql_query("DELETE FROM StudentData");
?>
【问题讨论】:
正如许多人在这里建议的那样,您必须从 php.ini 文件更改帖子大小和上传大小。 【参考方案1】:您可以在 MySQL 中使用LOAD DATA
命令:Read More
你必须在mysql语句中使用加载数据。这可以将您的大文件加载到数据库中。
mysqli_query($dblink, '
LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE transactions
FIELDS TERMINATED by ","
OPTIONALLY ENCLOSED BY "\'"
LINES TERMINATED BY "\n"
');
【讨论】:
我无法使用,因为普通用户没有获得太多访问权限...我需要创建一个界面,他们可以从该界面上传来自 excel 的数据 phpmyadmin 中默认上传/导入大小为 2MB。你可以在你的 apache php.ini.try 中增加你的 upload_max_filesize = 20M , post_max_size = 20M 我试过了,但问题依旧 它说:您尝试上传的文件太大...文件名 excel_file/1401167648140116764829 不可读 你能在这里查看代码吗:drive.google.com/file/d/0Bz6rEtX6kxclMFRBa1U1ZkpTWlE/…【参考方案2】:在你的 php.ini 中查看这些值
upload_max_filesize = 10M post_max_size = 10M
【讨论】:
在我的 php.ini upload_max_filesize = 32M... 但我无法上传超过 1MB 的文件 还要根据 php 的版本检查你的 max_input 时间【参考方案3】:你需要在你的 php.ini 中设置 upload_max_filesize 和 post_max_size 的值:
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
我必须补充一点,你必须重新启动服务器
【讨论】:
我照你说的做了,但问题还是一样....我认为源代码需要编辑..您可以在下面的链接中查看源文件..drive.google.com/file/d/0Bz6rEtX6kxclMFRBa1U1ZkpTWlE/… 【参考方案4】:根据 ASNAOUI Ayoub 我做了以下更改:
; Maximum allowed size for uploaded files.
upload_max_filesize = 40M
; Must be greater than or equal to upload_max_filesize
post_max_size = 40M
但问题还是一样,然后我尝试更改
$max_filesize = 41943040
现在完美运行.....
感谢大家的帮助
【讨论】:
你的意思是 upload_max_filesize = 41943040 吗? 不,不是在 php.ini 我说的是上面代码中使用的变量。 我明白了!您已经谈到了您的 uploadFile() 函数。然后,如果我对 php.ini 进行了上述更改,那么我将能够上传大文件。我说的对吗? 是的...我现在可以上传大文件以上是关于如何使用 PHP 将大型 Excel 文件导入 MySql 数据库的主要内容,如果未能解决你的问题,请参考以下文章