![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam klasę typu errorhandler. error_log zapisuje błędy do pliku W __destruct jest funkcja w której sprawdzam która zwraca FALSE. Gdy w tym samym skrypcie zapytam o historyczny log to zwraca TRUE i jest OK. file_exists - podobnie. Czy ten error_log buforuje log i po zakończeniu skryptu dopiero go zapisuje? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Nie dałeś kodu, mamy zgadywać jak to napisałeś?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Ten post edytował bulimaxiu 28.09.2011, 14:01:03 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Zacznij od wywołania tej funkcji samodzielnie, nie w destruktorze, bo w tej metodzie lubią się dziać niezłe jaja z operacjami I/O.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Ręczne odpalenie serErrorHandler(999, 'msg', 'file', '$linenum', '$vars') powoduje, że destruktor działa prawidłowo - znajduje plik i wysyła maila.
Dla jasności dodam 2 rzeczy: 1. gdy wyeliminuję przyczynę błędu w kodzie, procedura się nie odpala - prawidłowo. 2. po zakończeniu skryptu plik log pojawia się w miejscu w którym miał się pojawić. z automatu funkcja odpala się kodem Pozdrawiam. |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Ręczne odpalenie serErrorHandler(999, 'msg', 'file', '$linenum', '$vars') powoduje, że destruktor działa prawidłowo - znajduje plik i wysyła maila. Dla jasności dodam 2 rzeczy: Nie mówisz nam wszystkiego. Cytat Ręczne odpalenie Mam na myśli ręczne odpalanie kodu, który jest w destruktorze. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Ręczne odpalenie kodu, który jest w destruktorze (poprzez wywołanie __destruct() ze skryptu jak zwykłej funkcji) powoduje zgłoszenie podwójnego komunikatu o nieznalezieniu pliku do przesłania.
Staram się przekazać konkrety, nikt nie chce chyba całej klasy analizować i zbędnego wydaje mi się kodu do tego problemu. Ten post edytował bulimaxiu 28.09.2011, 15:09:04 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Mam dziwne przeczucie, że chodziło o przerzucenie kodu destruktora do nowej funkcji i jej odpalenie.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Też tak zrobiłem, ale zachowanie było dokładnie takie samo: odwołanie się do pliku logu przed zakończeniem skryptu kończy się brakiem dostępu do pliku logu. Można to oczywiście obejść funkcją z fopen, ale chciałbym zrozumieć czemu tak się dzieje, bo w manualu nic o tym nie ma (bufor też czyściłem).
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Na serwerze z innym systemem operacyjnym dzieje się to samo?
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 18.06.2008 Skąd: Reda Ostrzeżenie: (0%) ![]() ![]() |
Tak. localhost WindowsXP (Vertrigo) PHP 5.3.6 oraz współdzielony Linux PHP 5.2.14
-------- Wyjaśnione. Przyczyną był błąd powstający w klasie errorhandler w sekcji wysyłania maila z raportem, ale już po obsłudze błędów (__destruct). Gdy błąd występował wcześniej, plik się tworzył i wszystko było OK. Gdy błąd wystąpił tylko w __destruct, plik raportu się tworzył już po jego obsłudze wstępnej, w związku z czym pliku fizycznie jeszcze nie było. Jednak na dysku tuż po tym plik się pojawiał, tylko już nie był obsługiwany przez skrypt. Wniosek: w errorhandlerze nie może być drobnego błędu. Błąd logiczny, zawiły, ale wyjaśniony. Pozdrawiam. Ten post edytował bulimaxiu 6.10.2011, 11:11:27 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:42 |