Дублирование при записи fwrite() -ом

Saboth

Новичок
Фрагмент кода
PHP:
 //-----лог------------------start
 if($operid<10 && $operid>-1)
 {
  $line = " ";	 
 }
 else
 {
  $line = "";	
 } 

$filename = "fail.log";
$data = date('Y-m-d (P) H:i:s')." s #".$operid.$line." ent\r\n";

if(file_exists($filename))
{
 if(filesize($filename) > 102400)
 {
  unlink($filename); 
 }
}
 
$mf = fopen($filename, "a");
fwrite($mf, $data); 
fclose($mf); 
//-----лог------------------end
  
header("Location: main_gen.php"); 
exit;
В файл записывается две записи с одинаковым значением.
Запись точно производится из одного места дваждый (везде стоят идентификаторы).
Циклов и подобного нет.

Не подскажите почему записей две и как это победить (уменьшить до одной)?
Если можно желательно записывать один раз, а не проверять наличие записи.
 

Linker

Новичок
Название файла у вас говорит обо всём красноречиво, но я бы переименовал в epic_fail.log так ещё точнее
а у вас, случайно редирект не на ту же самую страницу идёт main_gen.php ? Возможно в этом дело?
 

Linker

Новичок
Ну в том коде, что приведен выше нет никаких намёков на "двойную" запись, значит дело в другом, например остаётся предыдущая запись в файле, или в другом фрагменте кода (в другом файле, например main_gen.php) есть аналогичное обращение к тому же файлу.
 

Linker

Новичок
Saboth
так и я о том же,
а что с "двойной" записью? Если руками файл удалить, потом код приведённый выше выполнить, так и останутся две записи?
 

baev

‹°°¬•
Команда форума
Судя по строке «if($operid<10 && $operid>-1)», этот кусок кода в цикле вызывается.
Вот в месте вызова и надо искать.
 

Gas

может по одной?
или всё рерайтится на этот файл, а броузер делает обращения к favicon/robots.txt или просто 404 из-за отсутствия картинки/css/что_угодно.
 

Saboth

Новичок
Судя по строке «if($operid<10 && $operid>-1)», этот кусок кода в цикле вызывается.
Вот в месте вызова и надо искать.
Нет, в цикле не вызывается. В файле всего один цикл for и он на 3 строчки.
PHP:
 if($rowcountWeb>0)
 {
  for($i=1;$i<=$rowcountWeb;$i++)
  {
    odbc_fetch_row($resultWeb,$i);
	$webRole[$i] = odbc_result($resultWeb, "id_func");
	$_SESSION['webRole_gen'] = $webRole;
  }
 }
И всё.
Этот файл часть комплекса авторизации. А if($operid<10 && $operid>-1)... просто выравнивает записи в логах, чисто такой эстетический момент.
 

Linker

Новичок
Тогда нужно заниматься отладкой.
Во-первых Header закомментировать на время, потом проверять содержимое переменной $data
и так по-шагово, пока не найдётся тот кусок, где происходит fail
 

Saboth

Новичок
или всё рерайтится на этот файл, а броузер делает обращения к favicon/robots.txt или просто 404 из-за отсутствия картинки/css/что_угодно.
Это не. Тут у меня система как танк. Прочих редиректов не происходит. robots отключен.
Этот файл только один раз проходится, при любых обстоятельствах. И в случае малейшего подозрения на некоректность всё натурально сбрасывается (вплоть до сессии) и выходит в стартовое положение. Без нажатия на кнопку ничего не произойдёт.
Конечно может быть что то экзотическое - но у меня по этому поводу никаких мыслей.
 

Saboth

Новичок
Прошёл пошагово. Стало записывать по одной записи, само по себе. Но я сильно не порадовался, тоже самое было вчера.
Закрыл закладку браузера. Окрыл поновой страницу и песня повторилось, опять двоит.
 

Saboth

Новичок
посмотри файрбагом, может какие лишние запросы возникают
Я в принципе от фаербага далёк, но поставил, что было посмотрел. Схожая фиговина есть встроенная в Chrome. Насколько хватило моего понимая, там никаких проблем не найдено.

Ну ладно это не критично, буду обрабатывать повторяющие записи.

Спасибо, всем кто пытался помочь.
 

Beavis

Banned
создай новый скрипт из одной строчки
PHP:
<?php
file_put_contents('log.txt', 'data', FILE_APPEND);
?>
и начни его постепенно дорабатывать под свои нужны, после каждого изменения - проверяй работоспособность
 

Saboth

Новичок
создай новый скрипт из одной строчки
PHP:
<?php
file_put_contents('log.txt', 'data', FILE_APPEND);
?>
Да, функция поудобнее. Но жизнь не наладилась.

Попробовал поставить прединкрементирование прямое и через cookie, вот так вот
PHP:
 file_put_contents($filename, $data." ".++$a, FILE_APPEND);
 setcookie("varA",++$_COOKIE['varA']);
 file_put_contents($filename, $_COOKIE['varA'], FILE_APPEND);
Так эта сволочь мне два раза две еденицы вывела.

Вообщем теперь очевидно, на этой странице ничего не повторяется, не редиректится, оно просто тупо само 2 раза выводится.
 
Сверху