Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP Notice: Array to string conversion in
Forum PHP.pl > Forum > Przedszkole
czytophp
Dzień dobry.

Mam problem z następującym błędem:
  1. [php7:notice] [pid 22016:tid 1948] [client ::1:64296] PHP Notice: Array to string conversion in ....


Błąd jest w liniach img id="graph_maps" oraz img id="graph_players

  1. if($online)
  2. {
  3. $gt = curl_get_contents('http://www.gametracker.com/server_info/'.$ip.'/');
  4. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  5. $gid = trim($gid[1]);
  6. }
  7.  
  8. <div style="width: 38%; float:right;">
  9. <h4>Najczęściej grane mapy</h4>
  10. <img id="graph_maps" class="item_260x170" alt="" src="http://cache.www.gametracker.com/images/graphs/server_maps.php?GSID='.$gid.'">
  11.  
  12. <h4>Wykres graczy (ostatnie 24h)</h4>
  13. <img id="graph_players" class="item_260x170" alt="" src="http://cache.www.gametracker.com/images/graphs/server_players.php GSID='.$gid.'&start=-1d&request=02208003562523282">


Proszę o pomoc.
kapslokk
W zmiennej, którą próbujesz wyświetlić masz tablicę, a nie string.
czytophp
Cytat(kapslokk @ 9.05.2018, 18:14:23 ) *
W zmiennej, którą próbujesz wyświetlić masz tablicę, a nie string.

A mógłbym prosić trochę jaśniej?
Jak to naprawić?
Bo jestem trochę zielony jeszcze w PHP
kapslokk
preg_match do $gid wrzuca Ci tablice, musisz odwołać się do konkretnego elementu tej tablicy, a nie do całej w momencie wyświetlania.

http://php.net/manual/en/language.types.array.php
czytophp
Cytat(kapslokk @ 9.05.2018, 20:14:23 ) *
preg_match do $gid wrzuca Ci tablice, musisz odwołać się do konkretnego elementu tej tablicy, a nie do całej w momencie wyświetlania.

http://php.net/manual/en/language.types.array.php

if(preg_match('/var GSID => (.*);/', $gt, $gid)) Coś takiego ?
leonpro778
Cytat(czytophp @ 9.05.2018, 20:22:35 ) *
if(preg_match('/var GSID => (.*);/', $gt, $gid)) Coś takiego ?


Nie. Zobacz tutaj:
  1. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  2. $gid = trim($gid[1]);
  3. }


Zrób sobie po tym print_f($gid) i zobacz co będzie zmienna $gid zawierała
czytophp
Cytat(leonpro778 @ 9.05.2018, 21:48:51 ) *
Nie. Zobacz tutaj:
  1. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  2. $gid = trim($gid[1]);
  3. }


Zrób sobie po tym print_f($gid) i zobacz co będzie zmienna $gid zawierała


https://cache.gametracker.com/images/graphs....php?GSID=Array

Czyli GSID zwraca Array tak, czyli $gid zawiera array?

Po to ten temat napisałem w przedszkolu, bo tak jak mówiłem nie jestem jakiś super w PHP.
LowiczakPL
proponuję użyć tego kodu

  1. $re = '/GSID = (\d{1,})/';
  2. if (preg_match($re, $gt, $response, PREG_OFFSET_CAPTURE, 0)) {
  3. $gid = $response[1];
  4. }

kapslokk
Pokaz cały kod wink.gif Nie masz przypadkiem gdzieś wyżej zadeklarowanego $gid jako tablicy? Jeśli preg_match nie znajdzie takiego tekstu pasującego do wzoru, to kod w

  1. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  2. $gid = trim($gid[1]);
  3. }

się nie wykona.
czytophp
Cytat(kapslokk @ 10.05.2018, 07:38:16 ) *
Pokaz cały kod wink.gif Nie masz przypadkiem gdzieś wyżej zadeklarowanego $gid jako tablicy? Jeśli preg_match nie znajdzie takiego tekstu pasującego do wzoru, to kod w

  1. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  2. $gid = trim($gid[1]);
  3. }

się nie wykona.


Proszę:

  1. <?php
  2. # Pobieranie konfiguracji
  3. define ('BOOST', true);
  4. require_once "config.php";
  5.  
  6. require_once "include/header.php";
  7. # Menu
  8. require_once "include/menu.php";
  9. require_once 'include/GameQ.php';
  10. ?>
  11. <div id="right_box" style="width:100%;">
  12. <div class="container-fluid content">
  13. <div class="row-fluid">
  14. <div class="span12" id="content" style="margin-bottom:20px;">
  15. <legend>Informacje o serwerze</legend>
  16. <div class="bbq-item" style="padding-bottom:10px;">
  17. <div class="clearfix"></div>
  18. <?php
  19. function curl_get_contents($url)
  20. {
  21. $ch = curl_init($url);
  22. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  23. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  24. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  25. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  26. $data = curl_exec($ch);
  27. curl_close($ch);
  28. return $data;
  29. }
  30. if(!$_GET['ip']){
  31. echo $newMess->into_msg("3", "Brak podanego IP serwera.", "3");
  32. }else{
  33. $ip = clear($_GET['ip']);
  34. $ip = trim($ip);
  35. if(!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{1,5}$/', $ip)){
  36. echo $newMess->into_msg("2", "Zły format ip serwera.", "2");
  37. }else{
  38. $server = array(
  39. 'type' => 'cs16',
  40. 'host' => $ip
  41. );
  42.  
  43. $gq = new GameQ();
  44. $gq->setOption('timeout', 5);
  45. $gq->setOption('debug', TRUE);
  46. $gq->setFilter('normalise');
  47. $gq->addServer($server);
  48.  
  49. $results = $gq->requestData();
  50.  
  51. $online = $results[$ip]['gq_online'];
  52. if($online){
  53.  
  54.  
  55. $gt = curl_get_contents('http://www.gametracker.com/server_info/'.$ip.'/');
  56. if(preg_match('/var GSID = (.*);/', $gt, $gid)){
  57. $gid = trim($gid[1]);
  58. }
  59.  
  60. $map = $results[$ip]['gq_mapname'];
  61. $nextmap = $results[$ip]['amx_nextmap'];
  62. $hostname = $results[$ip]['gq_hostname'];
  63. $maxplayers = $results[$ip]['gq_maxplayers'];
  64. $numplayers = $results[$ip]['gq_numplayers'];
  65. $password = $results[$ip]['gq_password'];
  66. if($password == 1) $password = 'Włączone'; else $password = 'Wyłączone';
  67. $buytime = $results[$ip]['mp_buytime'];
  68. $buytime = $buytime * 60;
  69. $c4time = $results[$ip]['mp_c4timer'];
  70. $ff = $results[$ip]['mp_friendlyfire'];
  71. if($ff == 1) $ff = 'Włączone'; else $ff = 'Wyłączone';
  72. $roundtime = $results[$ip]['mp_roundtime'];
  73. $startmoney = $results[$ip]['mp_startmoney'];
  74. $limittime = $results[$ip]['mp_timelimit'];
  75. $players = $results[$ip]['players'];
  76. $version = $results[$ip]['version'];
  77. if($version == 49) $version = 'Steam'; else $version = 'Steam/Nonsteam';
  78. $amxbans_version = $results[$ip]['amxbans_version'];
  79. $amxmodx_version = $results[$ip]['amxmodx_version'];
  80.  
  81. echo ' <div style="width: 48%; float:left;">
  82. <h4>Główne informacje</h4>
  83. <p>
  84. Nazwa serwera: '.$hostname.'<br />
  85. Gracze: '.$numplayers.'/'.$maxplayers.' ('. round($numplayers/$maxplayers*100) .'%)<br />
  86. <div style="width: 48%; float:left;">
  87. Aktualna mapa: '.$map.'<br />
  88. <img style="border-radius:4px; margin:10px;" src="http://image.www.gametracker.com/images/maps/160x120/cs/'.$map.'.jpg" onerror="ImgError(this)"/><br />
  89. </div>
  90. <div style="width: 48%; float:left;">
  91. Następna mapa: '.$nextmap.'<br />
  92. <img style="border-radius:4px; margin:10px;" src="http://image.www.gametracker.com/images/maps/160x120/cs/'.$nextmap.'.jpg" onerror="ImgError(this)"/><br />
  93. </div>
  94. </p>
  95. </div>
  96. <div style="width: 48%; float:right;">
  97. <h4>Dodatkowe informacje</h4>
  98. <p>
  99. Hasło: '.$password.'<br />
  100. Czas kupna: '.$buytime.' sec<br />
  101. Czas do wybuchu C4: '.$c4time.' sec<br />
  102. Atakowanie drużyny: '.$ff.'<br />
  103. Czas rundy: '.$roundtime.' min<br />
  104. Kasa na start: '.$startmoney.'$<br />
  105. Czas mapy: '.$limittime.' min<br />
  106. Wersja gry: '.$version.'<br />
  107. Wersja AmxBans: '.$amxbans_version.'<br />
  108. Wersja AmxModX: '.$amxmodx_version.'<br />
  109. </p>
  110. </div>
  111. <div style="width: 60%; float:left;">
  112. <h4>Aktywni gracze</h4>
  113. <table class="table table-bordered table-striped">
  114. <tr>
  115. <th>#</th>
  116. <th>Nick</th>
  117. <th>Wynik</th>
  118. <th>Czas gry</th>
  119. </tr>';
  120. $i = 1;
  121. foreach($players as $gracz){
  122.  
  123. if($gracz['time'] >= 60 and $gracz['time'] < 3600){
  124. $czas = round($gracz['time']/60,0).' min';
  125. }else if($gracz['time'] >= 3600){
  126. $czas = round($gracz['time']/3600, 0).' godz '.($gracz['time']/3600) % 60 .' min';
  127. }else if($gracz['time'] < 60 and $gracz['time'] >= 0){
  128. $czas = round($gracz['time']).' sec';
  129. }else if($gracz['time'] < 0){
  130. $gracz['time'] = -$gracz['time'];
  131. if($gracz['time'] >= 60 and $gracz['time'] < 3600){
  132. $czas = round($gracz['time']/60,0).' min';
  133. }else if($gracz['time'] >= 3600){
  134. $czas = round($gracz['time']/3600, 0).' godz '.($gracz['time']/3600) % 60 .' min';
  135. }else if($gracz['time'] < 60 and $gracz['time'] >= 0){
  136. $czas = round($gracz['time']).' sec';
  137. }
  138. }
  139. echo ' <tr>
  140. <td>'.$i.'</td>
  141. <td>'.$gracz['name'].'</td>
  142. <td>'.$gracz['score'].'</td>
  143. <td>'.$czas.'</td>
  144. </tr>';
  145. $i++;
  146. }
  147.  
  148. echo ' </table>
  149. </div>
  150. <div style="width: 38%; float:right;">
  151. <h4>Najczęściej grane mapy</h4>
  152. <img id="graph_maps" class="item_260x170" alt="" src="http://cache.www.gametracker.com/images/graphs/server_maps.php?GSID='.$gid.'">
  153.  
  154. <h4>Wykres graczy (ostatnie 24h)</h4>
  155. <img id="graph_players" class="item_260x170" alt="" src="http://cache.www.gametracker.com/images/graphs/server_players.php?GSID='.$gid.'&start=-1d&request=02208003562523282">
  156. </div>';
  157. }else{
  158. echo $newMess->into_msg("4", "Serwer nie odpowiada.", "4");
  159. }
  160. }
  161. }
  162. ?>
  163. <br><br><br><br><br><br><br><br><br><br><br>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. <div class="clear"></div>
  170. </div>
  171. </body>
  172. </html>


Cytat(LowiczakPL @ 9.05.2018, 22:43:29 ) *
proponuję użyć tego kodu

  1. $re = '/GSID = (\d{1,})/';
  2. if (preg_match($re, $gt, $response, PREG_OFFSET_CAPTURE, 0)) {
  3. $gid = $response[1];
  4. }


Twój kod nic nie daje.
leonpro778
A możesz pokazać co zwraca print_f($gid); ? Wstaw to po tym Twoim preg_match
czytophp
Cytat(leonpro778 @ 10.05.2018, 15:06:05 ) *
A możesz pokazać co zwraca print_f($gid); ? Wstaw to po tym Twoim preg_match


Pomyliliście chyba miało być print_r a nie print_f bo tak to nic nie wyświetla

  1. $gt = curl_get_contents('http://www.gametracker.com/server_info/'.$ip.'/');
  2. if(preg_match('/var GSID = (.*);/', $gt, $gid))
  3. {
  4. $gid = trim($gid[1]);
  5. }
  6. print_r($gid);


Wyświetliło: Array ( )
leonpro778
No i widzisz. Zwraca Ci pustą tablicę smile.gif Szukaj problemów w preg_match. I tak, mój błąd, powinno być print_r
LowiczakPL
Napisałem Ci rozwiązanie nie kombinuj tylko podstaw kod.
czytophp
Cytat(LowiczakPL @ 10.05.2018, 19:18:40 ) *
Napisałem Ci rozwiązanie nie kombinuj tylko podstaw kod.


Jakie nie kombinuj jak twoje rozwiązanie nie działa ?
print_r($response); wywala to samo czyli Array ( )
LowiczakPL
Nie wiem jak to robisz ale ja testowałem i działało, pobiera bez problemu ID z podanej prze Ciebie strony
czytophp
Cytat(LowiczakPL @ 10.05.2018, 21:21:14 ) *
Nie wiem jak to robisz ale ja testowałem i działało, pobiera bez problemu ID z podanej prze Ciebie strony

  1. $gt = curl_get_contents('http://www.gametracker.com/server_info/'.$ip.'/');
  2. $re = '/GSID = (\d{1,})/';
  3. if (preg_match($re, $gt, $response, PREG_OFFSET_CAPTURE, 0))
  4. {
  5. $gid = $response[1];
  6. }
  7. print_r($response);


A na czym testowałeś jaki PHP ?
LowiczakPL
php 7.2
czytophp
Cytat(LowiczakPL @ 10.05.2018, 21:32:11 ) *
php 7.2


Mam tą samą wersje, nawet stworzyłem specjalnie nowy plik dla testu:

  1. <?php
  2. function curl_get_contents($url)
  3. {
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  7. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  8. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  9. $data = curl_exec($ch);
  10. curl_close($ch);
  11. return $data;
  12. }
  13.  
  14. $gt = curl_get_contents('http://www.gametracker.com/server_info/137.74.6.19:27015');
  15. $re = '/GSID = (\d{1,})/';
  16. if (preg_match($re, $gt, $response, PREG_OFFSET_CAPTURE, 0))
  17. {
  18. $gid = $response[1];
  19. }
  20. print_r($response);
  21. ?>


I tak samo Array ( ) więc nie wiem dlaczego Tobie działa a mi nie.
Pyton_000
podstawowe pytanie. zobacz co masz w $gt
czytophp
Cytat(Pyton_000 @ 10.05.2018, 21:41:54 ) *
podstawowe pytanie. zobacz co masz w $gt


Chodzi ci o to że od razu dałem link bez funkcji $ip ? do testu chciałem od razu podać dane IP żeby zobaczyć czy zadziała.Chyba że o coś innego Ci chodzi ;D
LowiczakPL
najpierw sprawdź czy istnieje serwer a następnie parsuj dane

The server you requested is not in the GameTracker database.

mi działa bo sprawdzam istniejące serwery
czytophp
Cytat(LowiczakPL @ 10.05.2018, 22:13:35 ) *
najpierw sprawdź czy istnieje serwer a następnie parsuj dane

The server you requested is not in the GameTracker database.

mi działa bo sprawdzam istniejące serwery


Przecież IP, które podaje w pliku testowym jest prawidłowe, istnieje serwer, na tym IP i jest wpisany do tej strony w tym przypadku GameTracker`a.
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.