|
|
|
| Есть такой код, в начале - всякие подключения, потом разбор файла и занесение в базу. По окончании должен быть переход на файл с формой загрузки другого отчета, а он не делается! Просто останавливается и все. Может, break убрать? Но без него вообще не останавливается. Да еще и забивает базу строками с нулевыми значениями.
...
$filename = $_FILES["uploaded_file"]["tmp_name"];
$fp = fopen($filename,"r"); //открываем нужный нам файл на чтение в бинарном режиме
$fsize = filesize($filename); //Узнаём размер исходного файла
$cicl = ceil($fsize/256) + 1; //узнаём кол-во циклов
$grammes=0;
for($i = 0; $i < $cicl; $i ++) { //запускаем цикл
if ($i == 0) {
fseek ( $fp, 0 ); //ну на первом цикле переходим в начало файла
} else {
fseek ( $fp, ftell ( $fp ) ); //бегаем по файлу
}
$text = fread ( $fp, 512000 ); //читаем файл по 512кб
$file_array = explode("<br />",nl2br($text));
$i=2;
foreach ($file_array as $line_num => $line) {
$line_exp = explode(";", str_replace("\"", "", $line));
$line_exp[0] = addslashes(trim($line_exp[0])); //// Phone
$line_exp[1] = addslashes(trim($line_exp[1])); //// Status Call
$line_exp[2] = addslashes(trim($line_exp[2])); //// Agente
$line_exp[3] = addslashes(trim($line_exp[3])); //// Date & Time
$line_exp[4] = addslashes(trim($line_exp[4])); //// Duration(Seg)
$line_exp[5] = addslashes(trim($line_exp[5])); //// Uniqueid
$line_exp[6] = addslashes(trim($line_exp[6])); //// Failure Cod
$line_exp[7] = addslashes(trim($line_exp[7])); //// Failure Cause - 2 fields
$line_exp[8] = addslashes(trim($line_exp[8])); //// Failure Cause - 2 fields
$datetime_call = substr($line_exp[5], 0, 10);
$grammes++;
////1. проверка на наличие записи в базе
$check_sql = "SELECT * FROM ".$db_prefix."cc_report WHERE
uniq_code LIKE '".$line_exp[5]."' AND
phone LIKE '".$line_exp[0]."'";
$result = mysql_query($check_sql) or die($check_sql." ".mysql_error());
/// 2. если нет такой - вставляем
if (mysql_num_rows($result) <=0) {
$update_query = "INSERT INTO ".$db_prefix."cc_report (id, campania, phone, status_call, agent, datetime_call, duration, fail_code, fail_cause, uniq_code) VALUES (NULL,
'".str_replace(".csv", "", $_FILES["uploaded_file"]["name"])."',
'".$line_exp[0]."',
'".$line_exp[1]."',
'".$line_exp[2]."',
'".$datetime_call."',
'".$line_exp[4]."',
'".$line_exp[6]."',
'".$line_exp[7]."',
'".$line_exp[5]."')
";
$result = mysql_query($update_query) or die(" $update_query <b>failed!</b><br>".mysql_error());
}
}
flush ();
if (feof ( $fp ) == true) { //когда достигаем конца файла прекращаем выполнение цикла
break;
}
}
fclose ($fp); //закрываем файлы
header("Location: upload_csv.php?msg=111&file=".$csvFile);
exit;
|
| |
|
|
|
|
|
|
|
для: elenaki
(17.12.2015 в 11:23)
| |
fclose ($fp); //закрываем файлы
|
отрабатывает?
странно что в теле цикла идёт работа с БД..и выборка и инсерт..может цикл должен сформировать массив ..а потом делать выборку одним запросом данными из этого сформированного массива... | |
|
|
|
|
|
|
|
для: S_7
(17.12.2015 в 21:13)
| | Почему странно? Выбрали стрoку из файла, разбили ее на поля, спросили базу - есть такая? Если нет - занесли, пошли дальше. Как узнать, отрабатывает fclose или нет? Закомментировать?
Сейчас проверю. Главное, что я этот скрипт во многих проектах использую и везде работает. А этот не хочет. | |
|
|
|