首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存限制已耗尽

问内存限制已耗尽
EN

Stack Overflow用户
提问于 2010-11-11 20:26:04
回答 2查看 2.3K关注 0票数 0

在运行PHP脚本将大量数据导入mysql时,我遇到了以下错误:

代码语言:javascript
复制
memory exhausted near ''$GPGGA','130735.000','60.15751','N','24.74303','E','1','05','1.6','8.7','M','35' at line 1

在此之前,我在PHP INI文件中分配了256M的内存限制。到目前为止,这段记忆对我的脚本来说已经足够了,到目前为止,我还没有遇到任何问题。我导入了大小为1MB和2.84MB的文件,同时将内存限制保持在256MB。当我运行一个大约1MB的文本文件时发生THis错误。

我假设错误所指的内存是PHP内存限制。还可以设置其他内存限制吗?我希望能为解决这个问题提供一些建议。非常感谢。

新编辑

代码语言:javascript
复制
...
...
if (is_array($inFile)) {

foreach($inFile as $inFileName) {

    $newFilePath = $upload_directory."/".$inFileName;

    if($inFileName != "")

    $handle = fopen($newFilePath,"r");
    $numlines =1;

    $query = "INSERT INTO gga_raw_data(device_id, gga_date,  nmea, gga_time, latitude, north, longitude, east, fixed_quality, no_of_satelites, hdop, altitude, meters, height_of_geoid, metres, check_sum, test_case_id) values";
    while (($data = fgetcsv($handle)) !== FALSE)
    {
        $numlines++;

        $myDay=substr($data[1], 0,2);
        $myMonth=substr($data[1], 2,2);
        $myYear=substr($data[1], 4,2);

        $gga_date = convertToNiceDate($myDay, $myMonth, 2000+$myYear);

        $longitude = convertToDegrees($data[6]);
        $latitude  = convertToDegrees($data[4]);


        if (!isset($data[16])) {
            $data[16] = '';
        }

        $query .="('$data[0]','$gga_date','$data[2]','$data[3]','$latitude','$data[5]','$longitude','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]','$data[13]','$data[14]', '$data[15]', '$data[16])',";


    }

    $query = substr($query, 0,-1);

我不想开始一个新的问题,因为它仍然在这个问题上。我已经解决了“内存耗尽”的问题,但现在有一个mySQL查询错误,这让我的生活相当痛苦,我需要帮助。

这是我从一个文本文件中获取的输入数据示例:

代码语言:javascript
复制
1,070610,$GPGGA,080323.460,6013.45368,N,02445.28396,E,1,04,4.6,18.3,M,35.0,M,,*67
1,070610,$GPGGA,080327.000,6013.44424,N,02445.31214,E,1,05,1.9,30.8,M,35.0,M,,*66

这是来自echo $query的结果:

代码语言:javascript
复制
INSERT INTO gga_raw_data(device_id, gga_date, nmea, gga_time, latitude, north, longitude, east, fixed_quality, no_of_satelites, hdop, altitude, meters, height_of_geoid, metres,check_sum) values('1','2010,06,07','$GPGGA','080323.460','60.22423','N','24.75473','E','1','04','4.6','18.3','M','35.0','M','')('1','2010,06,07','$GPGGA','080327.000','60.22407','N','24.7552','E','1','05','1.9','30.8','M','35.0','M','')
)('1','2010,06,07','$GPGGA','053416.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','053431.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','062929.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','080250.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','080305.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','080305.000','0','','0','','0','','','','','','','')('1','2010,06,07','$GPGGA','080320.000','0','','0','','0','','','','','','','')


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('1','2010,06,07','$GPGGA','080327.000','60.22407','N','24.7552','E','1','05','1' at line 1

我注意到,查询没有解析输入数据中的最后一个变量"*67“。我不确定它是否没有被识别,因为它以*开头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-11 21:40:37

一次插入一行,或者批量插入,比方说一次插入50行...

代码语言:javascript
复制
$gen_query=$query; // keep $query as the stub

while (($data = fgetcsv($handle)) !== FALSE)
{
    $numlines++;

    ...
    $gen_query .="('$data[0]','$gga_date','$data[2]','$data[3]','$latitude','$data[5]','$longitude','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]','$data[13]','$data[14]', '$data[15]', '$data[16])',";
   if ($numlines % 50 == 0) {
      mysql_query(substr($gen_query,0,-1));
      $gen_query=$query;
   }
}
if ($gen_query!=$query) mysql_query(substr($gen_query,0,-1));
票数 2
EN

Stack Overflow用户

发布于 2010-11-11 20:31:43

你还可以在php.ini中设置其他限制,比如最大帖子大小、最大上传大小等。但这个错误看起来是由于其他原因造成的。你是否在php中构建了非常大的对象,很可能是在你读完上传的文件之后的数组?我昨晚遇到了类似的问题,我所要做的就是增加我在php.ini中的内存限制。

当我以前遇到过这个问题,没有增加内存限制的选择时,我不得不重写我的代码,这样就不会同时在内存中存储如此多的对象。你能发布一些代码吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4154363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档