Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Аномальное поведение Rename

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Hapson
Отправлено: 11 Марта, 2014 - 17:57:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


Вчера наткнулся на необычный глюк.
Вобщем так: есть скрипт - обработчик ошибок, который пишет ошибки в лог файл - error.log.
Пишет он значит пишет... и если размер файла превышает 100кБ, он его переименовывает в
error.время-дата.log и создает новый error.log.
PHP:
скопировать код в буфер обмена
  1.  
  2. private function WriteToLog($string){
  3.         $this->CheckWeightLogs($this->log_file);
  4.         $this->CheckWeightLogs($this->log_file_php);
  5.         $file = fopen($this->log_file, "ab"); flock($file, LOCK_EX | LOCK_NB);
  6.         fwrite($file, $string);
  7.         flock($file, LOCK_UN); fclose($file);
  8.         array_pop($this->log_collection);
  9. }
  10.  
  11. private function CreateLogFile($path){
  12.         $file = fopen($path, "wb");
  13.         if($file){fclose($file); return true;}
  14.         return false;
  15. }
  16.  
  17. private function CheckWeightLogs($file){
  18.         if(filesize($file) > 100 * 1024){
  19.                 $date = date("Y-m-d_H-i-s", time());
  20.                 $new = preg_replace("#^(.+)log$#u", "\${1}". $date .".log", $file);
  21.                 rename($file, $new);
  22.                 $this->CreateLogFile($file);
  23.         }
  24. }
  25.  


Так вот, время от времени наблюдал такое (открыл браузер на пол монитора и проводник):

  • файл переименовывается
  • создается новый нулевого размера
  • тут же пропадает новый
  • переименованый опять переименовывается на старое имя
  • сообщение для лога теряется

Закономерности не обнаружил никакой. То работает, то нет. Это че, глюк винды?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
LIME
Отправлено: 11 Марта, 2014 - 18:09:51
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




$this->log_file
$this->log_file_php
что там лежит убедился?
 
 Top
Hapson
Отправлено: 11 Марта, 2014 - 18:18:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


LIME пишет:
$this->log_file
$this->log_file_php
что там лежит убедился?

Полные пути к файлам


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
OrmaJever Модератор
Отправлено: 11 Марта, 2014 - 18:24:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Hapson пишет:
        $this->CheckWeightLogs($this->log_file);
        $this->CheckWeightLogs($this->log_file_php);
        $file = fopen($this->log_file, "ab");

уследите за этими строками, вы вначале перейменовываете файл, а затем открываете файл со старым именем, т.к. в CheckWeightLogs новое имя никуда не записывается.
(Добавление)
Hapson пишет:
переименованый опять переименовывается на старое имя

на старое имя ничего не перейменовывается, происходит то что я написал выше.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Hapson
Отправлено: 11 Марта, 2014 - 18:28:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


OrmaJever пишет:
вы вначале перейменовываете файл, а затем открываете файл со старым именем

Именно так и нужно. Старый переименовать и создать новый со старым именем переименованого. Новое имя мне не нужно. Он переименовался и все - больше он мне не нужен.
(Добавление)
PS то есть есть файл

error.log ___ 100kB

Размер превышает 100kB и должно получиться так

error.дата-время.log ___ 100kB
error.log _____________ 0kB


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
LIME
Отправлено: 11 Марта, 2014 - 18:44:51
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Hapson пишет:
Полные пути к файлам
вот так и знал Хм
каким?? они разные??
метод 2 раза вызывается зачем?
 
 Top
Hapson
Отправлено: 11 Марта, 2014 - 18:55:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


LIME пишет:
каким?? они разные??

конечно разные. Было бы странно, если бы в двух переменных лежали одинаковые пути.
LIME пишет:
метод 2 раза вызывается зачем?

Потому что два файла отслеживаются
(Добавление)
Чуть позже попробую в ЦентОси потестить. Я думаю это глюк винды. Не дружит винда с fopen и прочими файловыми операциями.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
OrmaJever Модератор
Отправлено: 11 Марта, 2014 - 19:08:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




а старый файл который перейменовывается точно точно не занят чем-то другим?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Hapson
Отправлено: 11 Марта, 2014 - 19:18:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


OrmaJever пишет:
а старый файл который перейменовывается точно точно не занят чем-то другим?

Нет, в него пишет только одна функция. И никто его не читает.
(Добавление)
Вот тут полный код, функция записи внизу

https://www[dot]dropbox[dot]com/s/3nhpnx[dot][dot][dot]ErrorHandler.php
(Добавление)
Упс, вот ссылка
https://www[dot]dropbox[dot]com/s/fx6yz1[dot][dot][dot]andler[dot]class.php


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB