gpt4 book ai didi

php - 内存限制已耗尽

转载 作者:行者123 更新时间:2023-11-29 09:16:08 33 4
gpt4 key购买 nike

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

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 的文本文件时出现此错误。

我假设错误所指的内存是 PHP 内存限制。是否还有其他内存限制需要设置?我希望得到一些解决这个问题的建议。非常感谢。

新编辑

...
...
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 查询错误让我的生活变得非常痛苦,我需要帮助。

这是我从文本文件输入数据的示例:

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 的结果:

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”没有被查询解析​​。我不确定它是否未被识别,因为它以 * 开头。

最佳答案

一次插入一行还是批量插入,比如一次插入 50 行...

$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));

关于php - 内存限制已耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154363/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com