Как загрузить большой файл Excel, используя библиотеку PHPExcel?
Когда я загружаю файл Excel, используя php в базе данных (phpMySql), я получаю сообщение об ошибке как
Ошибка загрузки файла "": не удалось открыть для чтения! Файл не существует
и в Excel почти 40000 строк. Если я загружаю файл Excel, который имеет 400-1000 строк, то он работает.
Я использую библиотеку PHPExcel.
Вот мой код:
<html>
<head>
<title>Import Excel</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
text-align: left;
padding: 8px;
}
tr:nth-child(even) {background-color: #f2f2f2;}
</style>
</head>
<?php
require 'Classes/PHPExcel/IOFactory.php';
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "office";
if(isset($_POST['upload'])){
$inputfilename = $_FILES['file']['tmp_name'];
$exceldata = array();
$conn = mysqli_connect($servername, $username, $password, $dbname);
if(!$conn){
die("Connection Failed: " . mysqli_connect_error());
}
try {
$inputfiletype = PHPExcel_IOFactory::identify($inputfilename);
$objReader = PHPExcel_IOFactory::createReader($inputfiletype);
$objPHPExcel = $objReader->load($inputfilename);
} catch(Exception $e){
die('Error loading file "'.pathinfo($inputfilename,PATHINFO_BASENAME).'": '.$e->getMessage());
}
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
for($row = 2; $row <= $highestRow; $row++) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
$sql = "INSERT INTO allsec (emp_code, emp_full_name, request_type, leave_status, leave_from, leave_to, days, year, month, pl, pm, lpm, status, emp_name, wg, leave_type)
VALUES ('".$rowData[0][0]."', '".$rowData[0][1]."', '".$rowData[0][2]."', '".$rowData[0][3]."', '".$rowData[0][4]."', '".$rowData[0][5]."', '".$rowData[0][6]."', '".$rowData[0][7]."', '".$rowData[0][8]."', '".$rowData[0][9]."', '".$rowData[0][10]."', '".$rowData[0][11]."', '".$rowData[0][12]."', '".$rowData[0][13]."', '".$rowData[0][14]."', '".$rowData[0][15]."')";
if(mysqli_query($conn, $sql)){
$exceldata[] = $rowData[0];
} else{
echo "Error: " .$sql . "<br>" . mysqli_error($conn);
}
}
echo "<table border='1'>";
foreach($exceldata as $index => $excelraw){
echo "<tr>";
foreach($excelraw as $excelcolumn){
echo "<td>".$excelcolumn."</td>";
}
echo "</tr>";
}
echo "</table>";
mysqli_close($conn);
}
?>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="file" >
<input type="submit" name ="upload" value="upload">
</form>
</body>
</html>
1 ответ
Если размер файла слишком велик, вам нужно изменить файл php.ini. По умолчанию вы можете загрузить только файл размером 8 МБ. Попробуйте изменить следующие значения до 40 M и перезапустите сервер.
; Максимально допустимый размер загружаемых файлов. upload_max_filesize = 40M
; Должно быть больше или равно upload_max_filesize post_max_size = 40M
Другая причина может заключаться в том, что ваши данные (40000 строк Excel) требуют больше времени для выполнения, чем максимальное время, отведенное для выполнения сценария на сервере. Чтобы изменить максимальное время по умолчанию, вам нужно изменить параметр max_input_time на сервере Apache (найдите аналогичный параметр, если вы используете другой сервер).
Эта ссылка поможет вам изменить настройки тайм-аута сервера - /questions/40979060/uvelichit-maxexecutiontime-v-php/40979064#40979064