【问题标题】:PHP Fatal Error ut of memory (allocated -1678508032) (tried to allocate 64 bytes) on dbase_get_recorddbase_get_record 上的 PHP 致命错误 ut 内存(已分配 -1678508032)(试图分配 64 个字节)
【发布时间】:2026-01-12 15:50:01
【问题描述】:

我正在构建一个脚本来将数据从 dbase 文件迁移到 mysql 表,但是对于一些文件(大文件)它给了我这个错误:

致命错误:D:\wamp\www\dbf2MySql\LeerDbase.php 第 65 行内存不足(已分配 -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.dbf 支持espere...

致命错误:调用 D:\wamp\www\dbf2MySql\Co 中的未定义函数 dbase_open() mmandScript.php 第 33 行

调用堆栈: 0.0007 273304 1. {main}() D:\wamp\www\dbf2MySql\CommandScript.php:0

这是更新的代码

http://goo.gl/drf6Ht

解决方案

我使用 php 命令行执行了一些更改的脚本,现在它可以正常工作了,谢谢大家

【问题讨论】:

  • 在将它们写入 MySQL 之前,不要从 dbase 读取所有记录并将它们放入数组中...读取一个,写入一个,读取下一个,写入下一个,等等
  • 或者将sql查询保存到文件中,然后导入MySQL。不要将所有内容都存储在内存中。
  • 脚本是要迁移的,我构建了mysql语句以便稍后执行它们
  • 当我每个 cicle @Cheery 执行一个时,它给出了同样的错误

标签: php mysql memory dbase


【解决方案1】:

你可以尝试在你的 php.ini 中增加分配的内存

memory_limit = 1024M  #or whatever size you wanna allocate to php scripts 

或者如果您想无限制地执行脚本,您可以尝试添加此代码

ini_set('memory_limit', '-1');

在文件的开头。

【讨论】:

  • 它使电脑崩溃了,但还是谢谢你,仍在寻找更好的解决方案,该文件有超过 600 万条记录