我正在构建一个脚本,将数据从dbase文件迁移到mysql表,但对于一些文件(大文件),它会给我带来以下错误:
致命错误:第65行D:''wamp''www''dbf2MySql''LeerBase.php内存不足(已分配1678508032)(试图分配64字节)
这是代码
echo "Por favor espere...<br/>";
for ($valor = 1; $valor <= count($archivos); $valor++) {
//echo $valor;
//echo $archivos[$valor]; echo "<br/>";
$fichero_dbf = "tmp/". $archivos[$valor];
$conex = dbase_open($fichero_dbf, 0); //abro el archivo
if($conex){ //si la conexión es buena, realizo la migración
$arrData = array();
$total_registros = dbase_numrecords($conex);
for ($i = 1; $i <= $total_registros; $i++){
$arrData[] = dbase_get_record($conex,$i); //<-- Here is the memory error line
}
// Obtener la información de columna
$info_columna = dbase_get_header_info($conex);
//Busco los titulos o cabeceras
for ($i = 0; $i < count($info_columna); $i++) {
$titulos[$i] = $info_columna[$i]['name'];
if (in_array($info_columna[$i]['name'], $titulos)) {
$titulos[$i] = $info_columna[$i]['name']."_".$i;
}
}
//print_r($titulos);
//echo DibujarTabla($titulos, $arrData);
$arreglo = explode(".", $archivos[$valor]);
//Paso los datos a mysql
CrearTablaMySql($arreglo[0], $dbf2MySql, $titulos, $arrData, $database_dbf2MySql, $total_registros);
}else{
echo "No se pudo acceder al fichero dbf -> '" . $fichero_dbf . "'<br/>"; //Si me da un error muestro un error
}
dbase_close($conex); //Cierro la conexión al archivo
if ($valor == (count($archivos))) {
echo "FINALIZADO";
mysqli_close($dbf2MySql);
}
}
任何帮助都将不胜感激,如果你需要更多信息来帮助我解决这个问题,请告诉我
编辑
http://goo.gl/aHURGl
更新
我现在使用命令行,但我现在使用php.exe 得到这个错误
D: ''wamp''bin''php''php5.5.12>php.exe-f"D:''wamp''www''dbf2MySql''CommandScript.php"errmxite.dbfPor青睐特别。。。
致命错误:调用D:''wamp''www''dbf2MySql''Co中未定义的函数dbase_open()第33行的mmandScript.php
调用堆栈:0.0007 273304 1。{main}()D:''wamp''www''dbf2MySql''CommandScript.php:0
这是更新后的代码
http://goo.gl/drf6Ht
解决方案
我使用php命令行执行了一些更改后的脚本,现在它工作起来没有问题,这要归功于所有的
您可以尝试增加php.ini 中分配的内存
memory_limit = 1024M #or whatever size you wanna allocate to php scripts
或者,如果你想无限制地执行脚本,你可以尝试添加这个代码
ini_set('memory_limit', '-1');
在文件的开头。