Вот история,
Я загружаю список номеров деталей в текстовый файл через gzip, чтение прошло успешно. Формат:
"ДАТА"|"ТИП"|"ID"|"FPN"|"PN"|"IOC"|"ПОЛЕ"|"ОВАЛ"|"NVAL"
Образец значения:
"2013-09-10 19:19:08"|"DU"|"10161000001354"|""|"ANTX100P001B24003"|""|"Подкатегория 1"|"Металлическая антенна"|"Антенна на печатной плате"
Теперь сценарий таков: я зацикливаюсь на каждой записи, чтобы вставить ее в базу данных и настроить уведомления для пользователей, чтобы они видели обновление об этом определенном номере детали и получали свою электронную почту для проведения рассылки позже на другой странице.
код цикла здесь:
for($x=1;$x<=count($lines)-1;$x++){
$cur_row = trim(str_replace('"','',$lines[$x]));
$cols = preg_split('/\|/',$cur_row);
$query = sprintf('INSERT INTO `notification_details`(`NDATE`, `NTYP`,`NPID`,`NFPN`,`NPN`,`NIOC`, `NFILD`, `NOV`, `NNV`) VALUES(\'%s\',\'%s\',%s,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')',$cols[0],$cols[1],$cols[2],$cols[3],$cols[4],$cols[5],$cols[6],$cols[7],$cols[8]);
mysql_query($query);
$query = 'SELECT DISTINCT `id` FROM `project_details` WHERE `prod_id` = \''.$cols[2].'\';';
$result = mysql_query($query);
$count = mysql_num_rows($result);
if($count>0){
$query = 'SELECT MAX(`NID`) FROM `notification_details`';
$result = mysql_query($query);
$row=mysql_fetch_array($result);
$NID = $row[0];
$query = sprintf('INSERT INTO `read_details`(`NID`, `PID`,`ISREAD`) VALUES(%s,%s,1);',$NID,$row['id']);
mysql_query($query);
}
echo $cols[2].".... Done!<br />";
flush();ob_flush();
}
//EMAIL LISTING BLOCK
echo "Listing E-mails...<br />";
$query = 'SELECT B.`proj_user`, C.`email` '
.'FROM `read_details` A, `project_details` B, `login_details` C'
.'WHERE A.`ISREAD` = 1 '
.'AND A.`PID` = B.`id` AND B.`proj_user` = C.`username` '
.'GROUP BY B.`proj_user`';
$result = mysql_query($query);
while($row=mysql_fetch_array($result)){
mysql_query('INSERT INTO `email_details`(`email`,`user`) VALUES(\''.$row[1].'\',\''.$row[0].'\')');
echo $row[1].".... Added!<br />";
}
Вот несколько прогонов, которые я сделал:
Продукт (193 строки) + полный запуск приведенного выше кода = внутренняя ошибка сервера + весь сайт переходит в состояние внутренней ошибки сервера при попытке доступа к другой странице
Продукт (193 строки) + меньше блока электронной почты = успешно
Продукт (18 000 строк) + полный запуск приведенного выше кода = внутренняя ошибка сервера + весь сайт переходит в состояние внутренней ошибки сервера при попытке доступа к другой странице.
Продукт (18 000 строк) + меньше блока электронной почты = внутренняя ошибка сервера + весь сайт становится под внутренней ошибкой сервера при попытке доступа к другой странице.
Я не знаю, только ли это у меня или что, но даже сервер возвращает внутреннюю ошибку сервера, продукты продолжают добавляться в базу данных (я смотрю на нее и пытаюсь запросить счетчик, и он увеличивается) и останавливается в случайной точке, с этого момента сайт снова становится доступным. Но иногда этого не происходит.
Любые идеи? Заранее спасибо.
РЕДАКТИРОВАТЬ :
NID и PID — БОЛЬШИЕ, ISREAD — BOOLEAN, остальные — ДЛИННЫЙ ТЕКСТ.
Кроме того, во время работы страница /uploadpcn.php, этот код находится в /do_upload_pcn.php, поэтому сценарий таков, что весь процесс загружается, пока находится на /uploadpcn.php, и когда процесс завершится, браузер перейдет к / do_upload_pcn.php показывает все эхо ИЛИ показывает внутренние ошибки сервера в любое время в процессе.