Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] klasa statystyk
Forum PHP.pl > Forum > Przedszkole
Rafiki
Otoz za pomoca webinside napisalem klase do odczytywania statystyk z servera shoutcast, zmodyfikowalem ja wedlug swoje uznania i jeszcze musze dodac jedna rzecz zwiazana z rekordem aby sie zapisywal do pliku bo po restarcie servera shoutcast rowniez i rekordowy wynik sluchaczy jest resetowany... Ale nie chodzi oto chodzi o to ze klasa wyglada tak:

  1. <?php
  2.  
  3. /*
  4. CURRENTLISTENERS  - ilość aktualnych słuchaczy
  5. PEAKLISTENERS  - dotychczasowy rekord liczby słuchaczy
  6. MAXLISTENERS  - maksymalna ilość słuchaczy
  7. SERVERGENRE  - rodzaj serwera
  8. SERVERURL  - adres URL strony
  9. SERVERTITLE  - nazwa serwera
  10. SONGTITLE  - nazwa utworu aktualnie odtwarzanego
  11. IRC  - identyfikator IRC
  12. AIM  - identyfikator AIM
  13. ICQ  - identyfikator ICQ
  14. STREAMSTATUS  - status strumienia
  15. BITRATE  - jakość nadawania
  16. */
  17.  
  18. class shoutcast {
  19.  
  20. public function __construct ($host, $port, $password)
  21. {
  22. $this -> shoutcast_host = $host;
  23. $this -> shoutcast_port = $port;
  24. $this -> shoutcast_password = $password;
  25. }
  26.  
  27. public function shoutcast_connect ()
  28. {
  29. $this -> shoutcast_connect = fsockopen($this -> shoutcast_host, $this -> shoutcast_port, $errno, $errstr, 5);
  30.  
  31. if ( !$this -> shoutcast_connect ) 
  32. {
  33. return false;
  34. } else {
  35. fputs($this -> shoutcast_connect, 'GET /admin.cgi?pass=' . $this -> shoutcast_password . '&mode=viewxml HTTP/1.0\r\n');
  36. fputs($this -> shoutcast_connect, 'User-Agent: Mozilla\r\n\r\n');
  37.  
  38. while ( !feof($this -> shoutcast_connect) )
  39. {
  40. $this -> shoutcast_contents .= fgets($this -> shoutcast_connect);
  41. }
  42.  
  43. fclose($this -> shoutcast_connect);
  44.  
  45. if ( stristr($this -> shoutcast_contents, "HTTP/1.0 200 OK") != true )
  46. return false;
  47.  
  48. $this -> shoutcast_xml = xml_parser_create();
  49.  
  50. if ( !xml_parse_into_struct($this -> shoutcast_xml, $this -> shoutcast_contents, $this -> shoutcast_values, $this -> shoutcast_index) )
  51. return false;
  52.  
  53. xml_parser_free($this -> shoutcast_xml);
  54. return true;
  55. }
  56. }
  57.  
  58. public function shoutcast_echo ($parameters)
  59. {
  60. return( $this -> shoutcast_values[$this -> shoutcast_index[$parameters][0]]["value"] );
  61. }
  62.  
  63. }
  64.  
  65. ?>


A wykorzystuje ja tak:

  1. <?php
  2.  
  3. /*
  4. CURRENTLISTENERS  - ilość aktualnych słuchaczy
  5. PEAKLISTENERS  - dotychczasowy rekord liczby słuchaczy
  6. MAXLISTENERS  - maksymalna ilość słuchaczy
  7. SERVERGENRE  - rodzaj serwera
  8. SERVERURL  - adres URL strony
  9. SERVERTITLE  - nazwa serwera
  10. SONGTITLE  - nazwa utworu aktualnie odtwarzanego
  11. IRC  - identyfikator IRC
  12. AIM  - identyfikator AIM
  13. ICQ  - identyfikator ICQ
  14. STREAMSTATUS  - status strumienia
  15. BITRATE  - jakość nadawania
  16. */
  17.  
  18. function __autoload($class)
  19. {
  20. include_once 'class.'.$class.'.php';
  21. }
  22.  
  23. $stat = new shoutcast('84.16.242.108', '8000', 'haslo');
  24.  
  25. if ( $stat -> shoutcast_connect() )
  26. {
  27. if ( $stat -> shoutcast_echo('STREAMSTATUS') )
  28. {
  29. print 'Nazwa serwera:' . $this -> shoutcast_echo('SERVERTITLE') . '<br />';
  30. } else {
  31. print "Serwer jest włączony, ale aktualnie nie ma żadnej audycji.";
  32. }
  33. } else {
  34. echo 'Serwer jest wyłączony.';
  35. }
  36.  
  37. ?>


W komentarzach podalem elementy jakie moze odczytywac skrypt....

Ale blad jest w tym ze przy wywolaniu klasy i zdefiniowaniu danych do laczenia nie dziala :/ skrypt laduje sie dosc dlugo... oj bardzo dlugo i wywala Serwer jest wylaczony.... Kombinowalem aby zobaczyc gdzie jest blad i do jakiego momenty dochodzi skrypt... otoz dochodzi do warunku if ( !$this -> shoutcast_connect ) i wlasnie chodzi oto ze shoutcast_connect jest spelnione....

Kombinowalem dalej i zawuzaylem ze po wywaleniu petli while niby jest ok nie wywala bledu ale ukazuje sie strona bez tresci :/
LBO
  1. <?php
  2. if ( !$this -> shoutcast_connect ) {
  3. return false;
  4. }
  5. ?>


gdzie w kodzie klasy masz zadeklarowana zmienna $shoutcast_connect?

P.S. nadawanie takich samych nazw metodom i zmiennym klasy nie nalezy do najlepszych nawykow

edit:
nie zauwazylem rowniez bys zadeklarowal reszte zmiennych klasy $shoutcast_host, $shoutcast_port i $shoutcast_password
Rafiki
przed wszhystkimi obiektami zdefiniowalem wszystkie zmienne ale nic to nie dalo... Myslalem ze

$this -> shoutcast_connect = fsockopen($this -> shoutcast_host, $this -> shoutcast_port, $errno, $errstr, 5);

wystarczy tak stworzyc zmienna jakby w locie....

Moze w temacie nie napisalem tego zbyt wyraznie ale warunek if ( !$this -> shoutcast_connect )


jest przechodzny pomyslnie bo gdy zmienie na:

  1. <?
  2. if ( !$this -> shoutcast_connect ) 
  3. {
  4. return false;
  5. } else {
  6. return true;
  7. } 
  8. ?>


Skrypt wykonuje sie odrazu i zwraca true.... tak jak pisalem po usunieciu petli while niby tez jest ok bo skrypt sie wykonuje jednakze nic nie zwraca... zas z petla while pierw laduje sie kilkanascie sekund i pokazuje sie info ze serwer wylaczony :/
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.