Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zagnieżdżanie jednej funkcji w drugiej
Forum PHP.pl > Forum > PHP
ddzkm
Stworzyłem niedawno skrypt odpowiadający za rejestrowanie zdarzeń:

  1. <?php
  2. $date = date('d-m-Y');
  3. $time = date('H:i:s');
  4. $log_saver = 'folder/'.$date.'.log';
  5. $ip = $_SERVER['REMOTE_ADDR'];
  6.  
  7. // Jeśli dziennik nie został utworzony stwórz go
  8.  
  9. if (!file_exists($log_saver))
  10. {
  11. $create = fopen($log_saver, 'w');
  12. fwrite($create, ''.$date.' '.$time.': Utworzenie dziennika logowania zdarzeń na dzień '.$date.';'.'
  13. ');
  14. fclose($create);
  15. }
  16.  
  17. function log_page_loaded()
  18. {
  19. global $ip;
  20. global $log_saver;
  21. global $date;
  22. global $time;
  23. $host = gethostbyaddr($ip);
  24. $file = fopen($log_saver, 'a');
  25. fwrite($file, ''.$date.' '.$time.': Wejście na stronę z adresu IP "'.$ip.'" ('.$host.');'.'
  26. ');
  27. fclose($file);
  28. }
  29.  
  30. function log_user_login()
  31. {
  32. $username = $_POST['username'];
  33. global $ip;
  34. global $log_saver;
  35. global $date;
  36. global $time;
  37.  
  38. $file = fopen($log_saver, 'a');
  39. fwrite($file, ''.$date.' '.$time.': Użytkownik '.$username.' zalogował się pomyślnie z adresu IP "'.$ip.'";'.'
  40. ');
  41. fclose($file);
  42. }
  43.  
  44. function log_user_logout()
  45. {
  46. $username = $_SESSION['login'];
  47. global $ip;
  48. global $log_saver;
  49. global $date;
  50. global $time;
  51. $file = fopen($log_saver, 'a');
  52. fwrite($file, ''.$date.' '.$time.': Użytkownik '.$username.' wylogował się;'.'
  53. ');
  54. fclose($file);
  55. }
  56.  
  57. function log_user_not_login()
  58. {
  59. $username = $_POST['username'];
  60. global $ip;
  61. global $log_saver;
  62. global $date;
  63. global $time;
  64. $file = fopen($log_saver, 'a');
  65. fwrite($file, ''.$date.' '.$time.': Nieudana próba zalogowania się użytkownika '.$username.' z adresu IP "'.$ip.'";'.'
  66. ');
  67. fclose($file);
  68. }
  69.  
  70. ?>


Powyszy skrypt działa bez problemów, ale postanowiłem go trochę uprościć...

  1. <?php
  2. $date = date('d-m-Y');
  3. $time = date('H:i:s');
  4. $log_saver = 'logs/'.$date.'.log';
  5. $ip = $_SERVER['REMOTE_ADDR'];
  6. $host = gethostbyaddr($ip);
  7. $username = $_SESSION['login'];
  8.  
  9. if (!file_exists($log_saver))
  10. {
  11. $create = fopen($log_saver, 'w');
  12. fwrite($create, ''.$date.' '.$time.': Utworzenie dziennika logowania zdarzeń na dzień '.$date.';normal;'.'
  13. ');
  14. fclose($create);
  15. }
  16.  
  17. function add_log()
  18. {
  19. global $date;
  20. global $time;
  21. global $log_saver;
  22. global $ip;
  23. global $host;
  24. global $username;
  25. global $log_message;
  26. global $log_type;
  27.  
  28. $file = fopen($log_saver, 'a');
  29. fwrite($file, ''.$date.' '.$time.': '.$log_message.';'.$log_type.''.'
  30. ');
  31. fclose($file);
  32. }
  33.  
  34. function log_page_loaded()
  35. {
  36. $log_type = 'normal';
  37. $log_message = 'Wejście na stronę z adresu IP "'.$ip.'" ('.$host.')';
  38. add_log();
  39. }
  40.  
  41. function log_user_login()
  42. {
  43. $log_type = 'action';
  44. $log_message = 'Użytkownik '.$username.' zalogował się pomyślnie z adresu IP "'.$ip.'"';
  45. add_log();
  46. }
  47.  
  48. function log_user_logout()
  49. {
  50. $log_type = 'action';
  51. $log_message = 'Użytkownik '.$username.' wylogował się';
  52. add_log();
  53. }
  54.  
  55. function log_user_not_login()
  56. {
  57. $log_type = 'error';
  58. $log_message = 'Nieudana próba zalogowania się użytkownika '.$username.' z adresu IP "'.$ip.'"';
  59. add_log();
  60. }
  61.  
  62. ?>


...i przestal działać. Funkcja add_log(); wykonuje się poprawnie, ale nie zapisuje treści komunikatu. Czy da sie coś z tym zrobić, czy trzeba korzystać z I rozwiązania?

Pozdrawiam!
wookieb
  1. function add_log($log_message)


i wywolujesz poprzez
  1. add_log($log_message)


Usuwasz też
  1. global $log_message;
pyro
a najprościej rzecz biorąc byłoby to zrobić obiektowo (klasę)
ddzkm
Dopiero się uczę PHP, na razie wymyśliłem to co widać powyżej snitch.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.