Как импортировать большой файл Excel в базу данных MySql с помощью PHP

Мне нужно загрузить данные файла excel в базу данных MySQL, используя php. Я нашел код для этого, но я не могу загружать большие файлы.

Может ли кто-нибудь сказать мне, как я могу увеличить максимальный размер файла для кода, упомянутого в ссылке ниже:

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");
}
?>

person Darshan    schedule 26.05.2014    source источник
comment
Как многие предлагали здесь, вы должны изменить размер сообщения и размер загрузки из файла php.ini.   -  person amilaishere    schedule 24.03.2015


Ответы (4)


Вы можете использовать команду LOAD DATA в MySQL: Подробнее

вы должны использовать данные загрузки в инструкции mysql. Это может загрузить ваш большой файл в базу данных.

mysqli_query($dblink, '
    LOAD DATA LOCAL INFILE "'.$file.'"
        INTO TABLE transactions
        FIELDS TERMINATED by ","
        OPTIONALLY ENCLOSED BY "\'"
        LINES TERMINATED BY "\n"
');
person truesource    schedule 26.05.2014
comment
Я не могу использовать, потому что обычному пользователю не предоставляется большой доступ... Мне нужно создать интерфейс, откуда они могут загружать данные из Excel. - person Darshan; 26.05.2014
comment
по умолчанию размер загрузки/импорта в phpmyadmin составляет 2 МБ. вы можете увеличить upload_max_filesize = 20M , post_max_size = 20M в вашем apache php.ini. попробуйте - person truesource; 26.05.2014
comment
Я пробовал, но проблема осталась прежней - person Darshan; 27.05.2014
comment
Пишет: файл, который вы пытались загрузить, слишком велик... Имя файла excel_file/1401167648140116764829 не читается - person Darshan; 27.05.2014
comment
Вы можете проверить код здесь: drive.google.com/file/d /0Bz6rEtX6kxclMFRBa1U1ZkpTWlE/ - person Darshan; 27.05.2014
comment
Я думаю, что данные загрузки - это решение для загрузки большого файла. поэтому вы можете попробовать выполнить вышеуказанный запрос, чтобы загрузить файл в свою базу данных. - person truesource; 27.05.2014
comment
Давайте продолжим обсуждение в чате. - person Darshan; 27.05.2014

Посмотрите на эти значения в вашем php.ini

upload_max_filesize = 10M post_max_size = 10M

person Blake    schedule 26.05.2014
comment
в моем php.ini upload_max_filesize = 32M... Но я не могу загружать файлы размером более 1 МБ - person Darshan; 26.05.2014
comment
Также проверьте время max_input в зависимости от версии php. - person Blake; 26.05.2014

Вам нужно установить значение upload_max_filesize и post_max_size в вашем php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

Я должен добавить, что вы должны перезапустить сервер

person ASNAOUI Ayoub    schedule 26.05.2014
comment
Я сделал, как вы сказали, но проблема осталась прежней... Я думаю, что исходный код необходимо отредактировать. Вы можете проверить исходный файл по ссылке ниже.. drive.google.com/file/d/0Bz6rEtX6kxclMFRBa1U1ZkpTWlE/ - person Darshan; 27.05.2014

Согласно 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

Теперь Он отлично работает.....

Спасибо всем за помощь

person Darshan    schedule 27.05.2014
comment
Вы имеете в виду upload_max_filesize = 41943040? - person Md Riad Hossain; 02.06.2014
comment
Нет, не в php.ini, я говорю о переменной, используемой в приведенном выше коде. - person Darshan; 02.06.2014
comment
Я понял! Вы говорили о своей функции uploadFile(). Затем, если я внесу указанные выше изменения в php.ini, я смогу загрузить большой файл. Я прав ? - person Md Riad Hossain; 02.06.2014
comment
Да... сейчас я могу загрузить большой файл - person Darshan; 02.06.2014