Php 将巨大的CSV文件上载到MySQL数据库脚本
我从一家公司收到大型CSV文件。我想设计一个PHP脚本,将这些文件上传到MySQL数据库,这样我就不必在MySQL b/c中手动执行这些文件每天都会更新 是否有人知道或有我如何创建脚本的例子,该脚本将删除数据库中的旧文件,然后使用CSV文件中的新文件更新数据库。CSV文件包含超过200000行的信息。我需要的东西,将继续和网页不会超时 3/19新增数据Php 将巨大的CSV文件上载到MySQL数据库脚本,php,mysql,csv,file-upload,jquery-file-upload,Php,Mysql,Csv,File Upload,Jquery File Upload,我从一家公司收到大型CSV文件。我想设计一个PHP脚本,将这些文件上传到MySQL数据库,这样我就不必在MySQL b/c中手动执行这些文件每天都会更新 是否有人知道或有我如何创建脚本的例子,该脚本将删除数据库中的旧文件,然后使用CSV文件中的新文件更新数据库。CSV文件包含超过200000行的信息。我需要的东西,将继续和网页不会超时 3/19新增数据 我为我的客户提供了相同的解决方案。第一个用户上载一个文件,然后我截断表并使用加载数据本地填充。它非常快。我用它来记录10万张唱片。我在测量插入时
我为我的客户提供了相同的解决方案。第一个用户上载一个文件,然后我
截断表并使用加载数据本地填充。它非常快。我用它来记录10万张唱片。我在测量插入时间,对于60466条记录,通常的insert
为65071s,而LOAD
0510s。所以你可以看到差别很大。这是它的参考资料
例如,我有这样一个例子:
$insert='LOAD DATA LOCAL INFILE "'.$csv_file.'"
INTO TABLE im_serialnumbers CHARACTER SET latin1
FIELDS TERMINATED BY ";"
IGNORE 1 LINES
(sn,l,gdatum1,artik,cust,lag,nr,freetext,
chnr,snr,idatum2,odatum2,vdatum)';
并使用.csv文件的绝对路径。我使用了以下Javascript和php代码,而不是使用上述信息。基本上这是一个表单,它调用下面的javascript函数,然后调用processupload.php。php然后将文件上载到服务器
Index.php
echo '<div id="upload-wrapper">';
echo '<div align="center">';
echo '<h3>File Uploader</h3>';
echo '<form action="processupload.php" method="post" enctype="multipart/form-data" id="MyUploadForm">';
echo '<select name="CSVFileData" id="CSVFileData"><option value="default">Select CSV Upload</option><option value="NovationRoster">Novation Roster CSV File</option><option value="MembershipRoster">Membership Roster CSV File</option><option value="GLNExport">GLN Text File</option></select><br/>';
echo '<input name="FileInput" id="FileInput" type="file" />';
echo '<input type="submit" id="submit-btn" value="Upload" />';
//echo '<img src="images/loading.gif" width="30px" id="loading-img" style="display:none;" alt="Please Wait"/>';
echo '</form>';
echo '<div id="progressbox" ><div id="statustxt">0%</div></div>';
echo '<div id="output"></div>';
echo '<div><img src="images/loading.gif" width="50px" id="loading-img" style="display:none;" alt="Please Wait"/></div>';
echo '</div>';
echo '</div>';
?>
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/jquery.form.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var options = {
target: '#output', // target element(s) to be updated with server response
beforeSubmit: beforeSubmit, // pre-submit callback
success: afterSuccess, // post-submit callback
uploadProgress: OnProgress, //upload progress callback
resetForm: true // reset the form after successful submit
};
$('#MyUploadForm').submit(function() {
$(this).ajaxSubmit(options);
// always return false to prevent standard browser submit and page navigation
return false;
});
//function after successful file upload (when server response)
function afterSuccess()
{
$('#submit-btn').show();
$('#loading-img').hide();
$('#progressbox').delay( 1000 ).fadeOut(); //hide progress bar
$('#output').html("Data added to database");
}
//function to check file size before uploading.
function beforeSubmit(){
//check whether browser fully supports all File API
if (window.File && window.FileReader && window.FileList && window.Blob)
{
if( !$('#FileInput').val()) //check empty input filed
{
$("#output").html("No file, please select file!");
return false
if ($('#CSVFileData').val() == 'default')
{
$("#output").html("Select Value in Dropdown");
return false
}
var fsize = $('#FileInput')[0].files[0].size; //get file size
var ftype = $('#FileInput')[0].files[0].type; // get file type
//allow file types
switch(ftype)
{
//case 'image/png':
//case 'image/gif':
//case 'image/jpeg':
//case 'image/pjpeg':
case 'text/plain':
//case 'text/html':
//case 'application/x-zip-compressed':
//case 'application/pdf':
//case 'application/msword':
case 'application/vnd.ms-excel':
//case 'video/mp4':
break;
default:
$("#output").html("<b>"+ftype+"</b> Unsupported file type, please enter csv file type.");
return false
}
//Allowed file size is less than 5 MB (1048576)
//if(fsize>30000000)
if(fsize > 65000000)
{
$("#output").html("<b>"+bytesToSize(fsize) +"</b> Too big file! <br />File is too big, it should be less than 5 MB.");
return false
}
$('#submit-btn').hide();
$('#loading-img').show();
$("#output").html("");
}
else
{
//Output error to older unsupported browsers that doesn't support HTML5 File API
$("#output").html("Please upgrade your browser, because your current browser lacks some new features we need!");
return false;
}
}
//progress bar function
function OnProgress(event, position, total, percentComplete)
{
/ /Progress bar
$('#progressbox').show();
//$('#progressbar').width(percentComplete + '%') //update progressbar percent complete
$('#statustxt').html(percentComplete + '%'); //update status text
if(percentComplete>50)
{
$('#statustxt').css('color','#000'); //change status text to white after 50%
}
if (percentComplete == 100)
{
$('#output').html("File upload successful, adding data to database.");
$('#progressbox').delay( 1000 ).fadeOut();
}
}
//function to format bites bit.ly/19yoIPO
function bytesToSize(bytes) {
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes == 0) return '0 Bytes';
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}
});
</script>
你不需要一个复杂的临时脚本。您只需将该文件发送到运行MySQL的服务器,然后运行以下命令:我添加的代码仍然不起作用。该文件是否位于运行MySQL的同一服务器上?你犯了什么样的错误?尝试手动执行该查询,查看生成了什么错误消息。是否还有其他需要添加的内容?我的文件保存在服务器上php执行的同一位置。但是,不要加载到数据库中。显示完整的代码,如果您使用了此答案,请接受它
echo '<div id="upload-wrapper">';
echo '<div align="center">';
echo '<h3>File Uploader</h3>';
echo '<form action="processupload.php" method="post" enctype="multipart/form-data" id="MyUploadForm">';
echo '<select name="CSVFileData" id="CSVFileData"><option value="default">Select CSV Upload</option><option value="NovationRoster">Novation Roster CSV File</option><option value="MembershipRoster">Membership Roster CSV File</option><option value="GLNExport">GLN Text File</option></select><br/>';
echo '<input name="FileInput" id="FileInput" type="file" />';
echo '<input type="submit" id="submit-btn" value="Upload" />';
//echo '<img src="images/loading.gif" width="30px" id="loading-img" style="display:none;" alt="Please Wait"/>';
echo '</form>';
echo '<div id="progressbox" ><div id="statustxt">0%</div></div>';
echo '<div id="output"></div>';
echo '<div><img src="images/loading.gif" width="50px" id="loading-img" style="display:none;" alt="Please Wait"/></div>';
echo '</div>';
echo '</div>';
?>
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/jquery.form.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var options = {
target: '#output', // target element(s) to be updated with server response
beforeSubmit: beforeSubmit, // pre-submit callback
success: afterSuccess, // post-submit callback
uploadProgress: OnProgress, //upload progress callback
resetForm: true // reset the form after successful submit
};
$('#MyUploadForm').submit(function() {
$(this).ajaxSubmit(options);
// always return false to prevent standard browser submit and page navigation
return false;
});
//function after successful file upload (when server response)
function afterSuccess()
{
$('#submit-btn').show();
$('#loading-img').hide();
$('#progressbox').delay( 1000 ).fadeOut(); //hide progress bar
$('#output').html("Data added to database");
}
//function to check file size before uploading.
function beforeSubmit(){
//check whether browser fully supports all File API
if (window.File && window.FileReader && window.FileList && window.Blob)
{
if( !$('#FileInput').val()) //check empty input filed
{
$("#output").html("No file, please select file!");
return false
if ($('#CSVFileData').val() == 'default')
{
$("#output").html("Select Value in Dropdown");
return false
}
var fsize = $('#FileInput')[0].files[0].size; //get file size
var ftype = $('#FileInput')[0].files[0].type; // get file type
//allow file types
switch(ftype)
{
//case 'image/png':
//case 'image/gif':
//case 'image/jpeg':
//case 'image/pjpeg':
case 'text/plain':
//case 'text/html':
//case 'application/x-zip-compressed':
//case 'application/pdf':
//case 'application/msword':
case 'application/vnd.ms-excel':
//case 'video/mp4':
break;
default:
$("#output").html("<b>"+ftype+"</b> Unsupported file type, please enter csv file type.");
return false
}
//Allowed file size is less than 5 MB (1048576)
//if(fsize>30000000)
if(fsize > 65000000)
{
$("#output").html("<b>"+bytesToSize(fsize) +"</b> Too big file! <br />File is too big, it should be less than 5 MB.");
return false
}
$('#submit-btn').hide();
$('#loading-img').show();
$("#output").html("");
}
else
{
//Output error to older unsupported browsers that doesn't support HTML5 File API
$("#output").html("Please upgrade your browser, because your current browser lacks some new features we need!");
return false;
}
}
//progress bar function
function OnProgress(event, position, total, percentComplete)
{
/ /Progress bar
$('#progressbox').show();
//$('#progressbar').width(percentComplete + '%') //update progressbar percent complete
$('#statustxt').html(percentComplete + '%'); //update status text
if(percentComplete>50)
{
$('#statustxt').css('color','#000'); //change status text to white after 50%
}
if (percentComplete == 100)
{
$('#output').html("File upload successful, adding data to database.");
$('#progressbox').delay( 1000 ).fadeOut();
}
}
//function to format bites bit.ly/19yoIPO
function bytesToSize(bytes) {
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes == 0) return '0 Bytes';
var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}
});
</script>
set_time_limit(0);
ini_set('memory_limit','2048M');
if(isset($_FILES["FileInput"]) && $_FILES["FileInput"]["error"]== UPLOAD_ERR_OK)
{
############ Edit settings ##############
$UploadDirectory = '**************************';
//specify upload directory ends with / (slash)
##########################################
//check if this is an ajax request
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
die();
}
//Is file size is less than allowed size.
//if ($_FILES["FileInput"]["size"] > 30000000)
if ($_FILES["FileInput"]["size"] > 65000000)
{
die("File size is too big!");
}
//allowed file type Server side check
switch(strtolower($_FILES['FileInput']['type']))
{
case 'text/plain':
case 'application/vnd.ms-excel':
//case 'video/mp4':
break;
default:
{
die('Unsupported File!'); //output error
}
}
$File_Name = strtolower($_FILES['FileInput']['name']);
// Get File Extension
$File_Ext = substr($File_Name, strrpos($File_Name, '.'));
//$NewFileName = $_FILES['FileInput']['name'];
if ($_POST['CSVFileData'] == 'NovationRoster')
{
$NewFileName = 'NovationRoster.csv';
}
else if ($_POST['CSVFileData'] == 'MembershipRoster')
{
$NewFileName = 'MembershipRoster.csv';
}
else if ($_POST['CSVFileData'] == 'GLNExport')
{
$NewFileName = 'export.txt';
}
if(move_uploaded_file($_FILES['FileInput']['tmp_name'], $UploadDirectory.$NewFileName ))
{
header ("location: index.php?upload=".urlencode($_FILES['FileInput']['name'])."&d=".$_POST['CSVFileData']);
}
else
{
die('error uploading File!');
}
}
else
{
die('Something wrong with upload! Is "upload_max_filesize" set correctly?');
}