Я пытаюсь прочитать в простом плоском файле, в нем 738 627 записей, пример файла выглядит так:
#export_dategenre_idapplication_idis_primary
#primaryKey:genre_idapplication_id
#dbTypes:BIGINTINTEGERINTEGERBOOLEAN
#exportMode:FULL
127667880285760002817317350
127667880285760002818261461
127667880285760002825372301
127667880285760002827785570
127667880285770193778591110
127667880285770193778771240
127667880285770193779116230
127667880285770193779482590
127667880285770193779623800
127667880285770193780516840
#recordsWritten:738627
Мой соответствующий код PHP выглядит следующим образом
ini_set("memory_limit","40M");
$fp1 = fopen('genre_application','r');
if (!$fp) {echo 'ERROR: Unable to open file.'; exit;}
$loop = 0;
while (!feof($fp1)) {
$loop++;
$line = stream_get_line($fp1,128,$eoldelimiter); //use 2048 if very long lines
if ($line[0] === '#') continue; //Skip lines that start with #
$field[$loop] = explode ($delimiter, $line);
list($export_date, $genre_id, $application_id, $is_primary ) = explode($delimiter, $line);
// does application_id exist?
$application_id = mysql_real_escape_string($application_id);
$query = "SELECT * FROM jos_mt_links WHERE link_id='$application_id';";
$res = mysql_query($query);
if (mysql_num_rows($res) > 0) {
echo $application_id . "application id" . $link_id . "\n";
} else
{
// no, application_id doesn't exist
echo $loop . "\n";
}
} //close reading of genre_application file
fclose($fp1);
Последний вывод на моем экране выглядит следующим образом, поэтому он даже не проходит первые 100,00 записей.Есть ли способ предотвратить исчерпание памяти сценарием?
81509
81510
81511
81512
81513
81514
81515
81516
Неустранимая ошибка PHP: исчерпан допустимый объем памяти 41943040 байт (попытался выделить 14 байт) в / var / www / vhosts/smartphonesoft.com/httpdocs/fred/xmlfeed/test/text_to_mysql.php в строке 156
Неустранимая ошибка: допустимый объем памяти 41943040 байт исчерпан (попытка выделить 14 байт) в / var / www / vhosts /smartphonesoft.com/httpdocs/fred/xmlfeed/test/text_to_mysql.php в строке 156