从excel文件插入时php mysql内存不足

时间:2016-04-11 22:26:23

标签: php mysql excel memory

我收到以下错误:

致命错误:第482行的C:\ xampp \ htdocs \ servisa \ Excel \ reader.php中允许的内存大小为33554432字节(试图分配2个字节)

我必须从excel文件中读取并插入到mysql数据库中。 我正在读一个大的excel文件(13 mb,9000行),把它放到一个数组中,然后我在读取数组时生成插入查询,有没有办法可以用更少的内存来做到这一点? 我知道我可以在php.ini中设置更多的moemory,但我不认为这是一个很好的解决方案。是吗?

这是我的代码,对不起我可怕的英语。

require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('PAMI/PAMI.XLS');
$arreglo = array(array());
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) 
{
    if ($i == 1)
        continue;

    $nomCompleto = mysql_real_escape_string($data->sheets[0]['cells'][$i][3]);//str_replace("`", "", str_replace("'", "", $data->sheets[0]['cells'][$i][3]));
    $parts = explode(" ", $nomCompleto);
    $apellido = array_shift($parts);
    $nombre = implode(" ", $parts);
    $nroBenef = $data->sheets[0]['cells'][$i][1];
    $dni =  $data->sheets[0]['cells'][$i][5];

    $tipoDni = $data->sheets[0]['cells'][$i][4];
    $sexo = $data->sheets[0]['cells'][$i][8];
    $domicilio = $data->sheets[0]['cells'][$i][9];//mysql_real_escape_string($data->sheets[0]['cells'][$i][9].' '.$data->sheets[0]['cells'][$i][10]);

    $date = str_replace('/', '-', $data->sheets[0]['cells'][$i][6]);
    $fnac = date('Y-m-d', strtotime($date));

    $arreglo[$i][0] = $apellido;
    $arreglo[$i][1] = $nombre;
    $arreglo[$i][2] = $dni;
    $arreglo[$i][3] = $nroBenef;
    $arreglo[$i][4] = $tipoDni;
    $arreglo[$i][5] = $sexo;
    $arreglo[$i][6] = $domicilio;
    $arreglo[$i][7] = $fnac;
}   

$sql ="insert into clientespami (apellido,nombre,dni,nroBeneficiario,tipoDni,sexo,domicilio,fechaNac) values ";
$valuesArr = array();
foreach($arreglo as $fila)
{

    $ape = $fila[0];
    $nom = $fila[1];
    $dni = $fila[2];
    $ben = $fila[3];

    $tipo = $fila[4];
    $sex = $fila[5];
    $domi = $fila[6];
    $nac = $fila[7];

    $valuesArr[] = "('$ape', '$nom', '$dni','$ben','$tipo','$sex','$domi','$nac')";
}

$sql .= implode(',', $valuesArr);
//echo $sql;
mysql_query($sql,$conexion);
$cant = mysql_affected_rows();

0 个答案:

没有答案