Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] cache status serwerów
Forum PHP.pl > Forum > Przedszkole
Duo
Witam !
Kombinuję sobie, jak połączyć cache ze statusem serwer, tak aby status odświeżał się co 30 sekund, więc tak aktualnie to statusik pojawia się za pierwszym razem, po odświeżeniu pojawia się link do statusu. 1 wejście obrazek, potem http://www.efrags.pl/status/cs/ffa.efrags.pl:27015.png, a nie obrazek. worriedsmiley.gif Proszę nie krzyczeć, że coś źle bo jestem zielony, chciałem połączyć dwa skrypty ze sobą ale coś trochę nie wyszło.

To co wyskrobałem:

  1. <?php
  2. /*
  3. *
  4. * Graficzny status serwerow, oparty o biblioteke GameQ ( http://gameq.sourceforge.net/ )
  5. * Copyright 2010 by Fragles.eu
  6. * Nie zezwalam na sprzedawanie tego skryptu, o czym mowi rowniez licencja GNU
  7. *
  8. */
  9.  
  10. require_once 'GameQ.php';
  11.  
  12. // przykladowe czcionki
  13. define('TEMPESTA', 'status/fonts/tempesta.ttf');
  14. define('TAHOMA', 'status/fonts/tahoma.ttf');
  15. define('VERDANA', 'status/fonts/verdana.ttf');
  16. define('TAHOMA_BOLD', 'status/fonts/tahoma_bold.ttf');
  17.  
  18. // przyporządkowujemy zmienna do zmiennej globalnej
  19. $server = $_GET['server'];
  20. $game = $_GET['game'];
  21. $cachefile = "./cache/server_".$_SERVER['QUERY_STRING'].$ext;
  22. $cachefile = str_replace(':', '-', $cachefile);
  23.  
  24. $cachetime = 30; //czas cache'owania
  25.  
  26. // cachowanie
  27. if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)))
  28. {
  29. send_headers();
  30. echo file_get_contents($cachefile);
  31. }
  32. // Jesli nie podano ip lub gry
  33. if (isset($server) && !empty($server) && isset($game) && !empty($game))
  34. {
  35. // podzielenie adresu na ip oraz port
  36. list($ip, $port) = explode(":", $server);
  37.  
  38. $gq = new GameQ();
  39. // dodajemy serwer
  40. $gq->addServer('serwer', array($game, $ip, $port));
  41. $gq->setOption('timeout', 200);
  42. $gq->setFilter('normalise');
  43. $gq->setFilter('sortplayers', 'gq_ping');
  44. $results = $gq->requestData();
  45.  
  46. /**
  47. * rozpatrujemy dwa przypadki
  48. * 1 - serwer offline bo nie ma nazwy serwera
  49. * 2 - serwer online
  50. */
  51. if($results['serwer']['gq_hostname']=="")
  52. {
  53. $hostname = "Serwer OFFLINE";
  54. $players = "x";
  55. $playersmax = "x";
  56. $map = "Offline";
  57. }
  58. else
  59. {
  60. $hostname = $results['serwer']['gq_hostname'];
  61. $players = $results['serwer']['gq_numplayers'];
  62. $playersmax = $results['serwer']['gq_maxplayers'];
  63. $map = $results['serwer']['gq_mapname'];
  64. }
  65.  
  66. // utworzenie obrazka z tla
  67. $im = imagecreatefrompng("status/bg.png");
  68. // kolor bialy
  69. $white = imagecolorallocate($im, 255, 255, 255);
  70. // polaczenie informacji do jednej zmiennej
  71. $info = $server ." ". $players ." / ". $playersmax ." ". $map;
  72. // gorny rzad, nazwa serwera
  73. imagettftext($im, 7, 0, 30, 10, $white, VERDANA, $hostname);
  74. // dolny rzad, ip serwera, gracze, mapa
  75. imagettftext($im, 7, 0, 30, 21, $white, VERDANA, $info);
  76.  
  77. // nie podano adresu w zmiennej $_GET
  78. } else {
  79. $im = imagecreatefrompng("status/background.png");
  80. $white = imagecolorallocate($im, 255, 255, 255);
  81. $info = "xx.xxx.xxx:xxxxx xx / xx OFFLINE";
  82. imagettftext($im, 7, 0, 30, 10, $white, VERDANA, "Serwer OFFLINE");
  83. imagettftext($im, 7, 0, 30, 21, $white, VERDANA, $info);
  84. }
  85.  
  86. function send_headers() {
  87. global $config;
  88. if($ext == '.png') {
  89. header ('Content-type: image/png');
  90. } else {
  91. header ('Content-type: image/jpeg');
  92. }
  93. }
  94.  
  95. // okreslenie typu zawartosci
  96. header('Content-type: image/png');
  97. imagepng($im);
  98. imagedestroy($im);
  99. $fp = fopen($cachefile, 'wb');
  100. fclose($fp);
  101. ?>


refresh
CuteOne
jeżeli cachujesz obrazek i chcesz go wyświetlić:
  1. echo '<img src="'.$cachefile.'">';

zamiast
  1. send_headers();
  2. echo file_get_contents($cachefile);
Duo
teraz po odświeżeniu statusu pojawia się taki błąd
  1. Warning: Cannot modify header information - headers already sent by (output started at /home/u0068/domains/efrags.pl/public_html/status/index.php:30) in /home/u0068/domains/efrags.pl/public_html/status/index.php on line 96
  2. &#65533;PNG  ��� IHDR��h������X������IDATx��\w`T��?s�n6 $BB�4A���"�E� �h��%�!/R�D�E"AA


CuteOne
bez headera.... następnym razem wrzuć błąd w google i sam zobacz co on oznacza smile.gif
Duo
teraz wyświetla mi się takie coś po odświeżeniu, dodam tylko tyle, że w folderze cache zapisują się pliki ale nie są one obrazkami zajmują po 0 kb i są puste (cały kod się nie mieści, więc wkleiłem fragment)

Kod
�PNG  ��� IHDR��h������X������IDATx��\w`��?�����$�J� "(��|���A�#]��&AA�@��`(�c��@|QP@Az ��J�m[f��c�lnnB���_wgΜ9sf��s�^��#y~\Bzfƨ��e�h !䃸 e(����+�3� NW }X Mv`wN�`kXe[9^Q��x�j�8U(3e(�� �ױ��>����ֳC��=�U���|aa���Hڶ-�ĺ���Q P$�M��P�2�H���v0FEW���d���-�R���f���+�Ϗ?>>~V�"���7�� L-�lY?oB�mo�g��/��S�ھu� �~~;Ln7���� �2���{oU�C{����1�c,;++//��teee�o�`k����/�@E,���-�O����^�.i���w` ��˭���L�$<�;���*���pؽ�M��a6%%oJJ��5kTgd���mVJ)c싍;w��޵��E��� >i>��^�\���?oB߱�cwD0���/�� Q�)e!�x1�h� T�֣�~#2�232Ϟ=k��e�|��1�J��K�G������T�*弟Y׫���}�r����PՈ����cB� ��^�R�GO���fV���۔e�B����?�dw��ԫ�t���0�Ͽ�kՂr��S�0�ٗ�0��ʕ�� �F�8t�o�x$��8򍡽;Ʈ�j���յ}�H]۷�X>0~ބ#'R����17k�uk���K욭Ƶ�\�f�q��� ���cBL���jW��{���F �n������}�ǚ��$�vȊz9#��f 9r�3�V��X�А�8�0�c�-  ���_T{�%� ���`�!B褨��`�l٬�q����۬��=APhw�#�J ?�E�4��f �������f�� BHfffaa����y��զ�}��ժY�IӦ!Ω��vT�k�tڻގ��J�ա�;��ͻR�1~���/t����kd V:]�( 1+-��m|Բ�I�� Z�f۾_����:e��/��{���.`3�E)�\����W�ڬ���:<��:"��Z�f�3c�l5 �� ��xDڔ��v�.F�7=&�%+߭��1�Z��k��&�
CuteOne
google -> zapis pliku graficznego
Duo
nic ciekawego na ten temat nie znalazłem
Duo
  1. <?php
  2. /*
  3. *
  4. * Graficzny status serwerow, oparty o biblioteke GameQ ( http://gameq.sourceforge.net/ )
  5. * Copyright 2010 by Fragles.eu
  6. * Nie zezwalam na sprzedawanie tego skryptu, o czym mowi rowniez licencja GNU
  7. *
  8. */
  9.  
  10. require_once 'GameQ.php';
  11.  
  12. // przykladowe czcionki
  13. define('TEMPESTA', 'status/fonts/tempesta.ttf');
  14. define('TAHOMA', 'status/fonts/tahoma.ttf');
  15. define('VERDANA', 'status/fonts/verdana.ttf');
  16. define('TAHOMA_BOLD', 'status/fonts/tahoma_bold.ttf');
  17.  
  18. // przyporządkowujemy zmienna do zmiennej globalnej
  19. $server = $_GET['server'];
  20. $game = $_GET['game'];
  21. $cachefile = "./cache/server_".$_SERVER['QUERY_STRING'].$ext;
  22. $cachefile = str_replace(':', '-', $cachefile);
  23. $cachetime = 30; //czas cache'owania
  24.  
  25.  
  26. // cachowanie
  27. if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile)))
  28. {
  29. $im = imagecreatefrompng('.$cachefile.');
  30. echo '<img src="'.$cachefile.'">';
  31. }
  32. // Jesli nie podano ip lub gry
  33. if (isset($server) && !empty($server) && isset($game) && !empty($game))
  34. {
  35. // podzielenie adresu na ip oraz port
  36. list($ip, $port) = explode(":", $server);
  37.  
  38. $gq = new GameQ();
  39. // dodajemy serwer
  40. $gq->addServer('serwer', array($game, $ip, $port));
  41. $gq->setOption('timeout', 200);
  42. $gq->setFilter('normalise');
  43. $gq->setFilter('sortplayers', 'gq_ping');
  44. $results = $gq->requestData();
  45.  
  46. /**
  47. * rozpatrujemy dwa przypadki
  48. * 1 - serwer offline bo nie ma nazwy serwera
  49. * 2 - serwer online
  50. */
  51. if($results['serwer']['gq_hostname']=="")
  52. {
  53. $hostname = "Serwer OFFLINE";
  54. $players = "x";
  55. $playersmax = "x";
  56. $map = "Offline";
  57. }
  58. else
  59. {
  60. $hostname = $results['serwer']['gq_hostname'];
  61. $players = $results['serwer']['gq_numplayers'];
  62. $playersmax = $results['serwer']['gq_maxplayers'];
  63. $map = $results['serwer']['gq_mapname'];
  64. }
  65.  
  66. // utworzenie obrazka z tla
  67. $im = imagecreatefrompng("status/bg.png");
  68. // kolor bialy
  69. $white = imagecolorallocate($im, 255, 255, 255);
  70. // polaczenie informacji do jednej zmiennej
  71. $info = $server ." ". $players ." / ". $playersmax ." ". $map;
  72. // gorny rzad, nazwa serwera
  73. imagettftext($im, 7, 0, 30, 10, $white, VERDANA, $hostname);
  74. // dolny rzad, ip serwera, gracze, mapa
  75. imagettftext($im, 7, 0, 30, 21, $white, VERDANA, $info);
  76.  
  77. // nie podano adresu w zmiennej $_GET
  78. } else {
  79. $im = imagecreatefrompng("status/background.png");
  80. $white = imagecolorallocate($im, 255, 255, 255);
  81. $info = "xx.xxx.xxx:xxxxx xx / xx OFFLINE";
  82. imagettftext($im, 7, 0, 30, 10, $white, VERDANA, "Serwer OFFLINE");
  83. imagettftext($im, 7, 0, 30, 21, $white, VERDANA, $info);
  84. }
  85.  
  86.  
  87.  
  88. // okreslenie typu zawartosci
  89. imagepng($im);
  90. imagedestroy($im);
  91. $fp = fopen($cachefile, 'wb');
  92. fclose($fp);
  93. ?>


nie wiem gdzie to wstawić, wstawiłem do linii 30 i nadal błąd mi pokazuje
CuteOne
Więc musisz się douczyć PHP lub zlecić komuś napisanie tego
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.