При запуске скрипта PHP, который импортирует большие данные в mysql, я столкнулся со следующей ошибкой:
memory exhausted near ''$GPGGA','130735.000','60.15751','N','24.74303','E','1','05','1.6','8.7','M','35' at line 1
Я до сих пор назначил ограничение памяти 256M в моем PHP INI файле. До сих пор этой памяти было достаточно для моих сценариев, и до сих пор я не испытывал никаких проблем. Я импортировал файлы размером 1 МБ и 2,84 МБ, сохраняя при этом ограничение памяти на 256 МБ. Эта ошибка возникла, когда я запустил текстовый файл размером около 1 МБ.
Я предположил, что память, на которую ссылается ошибка, является пределом памяти 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 $:
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» из входных данных не анализируется запросом. Я не уверен, что он не распознается, так как он начинается с *.