Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ [PHP] Aktualizacja modułu z php 5.6 na 7.0

Napisany przez: alkesz1718 14.01.2018, 05:07:46

Witam,
Mam 2 problemy z modułem i już nie wiem gdzie kryje się błąd...
Na początek mój moduł wyświetla ostatnio aktywnych użytkowników na stronie oraz aktualnych.

1. Błąd jak jest to z jakiegoś powodu na PHP 5.6 (nie wiem jak na starszych ale raczej jest ok) w przeglądarce po znalezieniu mojej strony w "opisie" jest taki komunikat:

  1. The Error returned was: Something is wrong in your syntax obok '`time`=VALUES(`time`)' w linii 3. SQL query: INSERT INTO `dle_online` (`http://www.php.net/key`, `uid`, `uname`, `http://www.php.net/time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('c73438351767789436b3403cb68c2728', '0', 'robot', '1515768201', ...


Sprawdzałem kod i jest z nim (przynajmniej wg mnie) wszystko ok bo wyświetla prawidłowo wszystkich użytkowników itd.

2. Problem jest taki że po zmienieniu wersji PHP na 7.0 nagle przestało pokazywać mi wszystkich użytkowników, robotów itd mimo że w liczbie aktywnych pisze że np aktywnych aktualnie jest 5 lub ileś tam ale nie pokazuje nicków tych użytkowników.

Poniżej daję cały moduł byście mogli przejrzeć kod i podpowiedzieć mi co mam zmienić lub ewentualnie samemu to zrobić o ile ktoś jest na tyle miły.

http://www25.zippyshare.com/v/8AamXP5N/file.html


Z góry dziękuję za pomoc

Napisany przez: trzczy 14.01.2018, 07:37:23

Pokaż błędy php.

Napisany przez: alkesz1718 14.01.2018, 13:23:53

Właśnie problem w tym że nie pokazuje żadnego błędu. Jak napisałem wyżej na php7 działa moduł z tym że nie pokazuje żadnych użytkowników... możesz wejść na moją stronę i sam zobaczysz...

http://dj-alexn.pl

Na samym dole strony ten licznik jest

Napisany przez: trzczy 14.01.2018, 14:22:44

Cytat(alkesz1718 @ 14.01.2018, 13:23:53 ) *
Właśnie problem w tym że nie pokazuje żadnego błędu.

Dziwna sprawa. Nie zmieniłeś wersji bazy danych, tylko wersję php. Skąd więc pojawia się błąd bazy danych? Rozumiem, że w kodzie jest coś takiego?
  1. http://www.php.net/error_reporting(-1);
  2. http://www.php.net/ini_set('display_errors', true);


Napisany przez: viking 14.01.2018, 14:27:11

Po wejściu na stronę wyświetla się ostrzeżenie o bezpieczeństwie. Nie masz tam jakiegoś wirusa?

Napisany przez: alkesz1718 14.01.2018, 14:27:20

to co podałeś to znalazłem coś podobnego w pliku gdzie jest tylko:

  1. <?php
  2. /*
  3. ####################################################
  4. @copyright (c) 2015-2017 Dj_AlexN Graphic
  5. @name Moduł Online by Dj_AlexN Graphic
  6. @version 6.2
  7. @link http://dj-alexn.xaa.pl
  8. ####################################################
  9. */
  10.  
  11. @http://www.php.net/error_reporting(7);
  12. @http://www.php.net/ini_set('display_errors', true);
  13. @http://www.php.net/ini_set('html_errors', false);
  14.  
  15. http://www.php.net/define('DATALIFEENGINE', true);
  16. http://www.php.net/define('ROOT_DIR', '../..');
  17. http://www.php.net/define('ENGINE_DIR', '..');
  18.  
  19. include ENGINE_DIR.'/data/config.php';
  20.  
  21. @http://www.php.net/header("HTTP/1.0 200 OK");
  22. @http://www.php.net/header("HTTP/1.1 200 OK");
  23. @http://www.php.net/header("Cache-Control: no-cache, must-revalidate, max-age=0");
  24. @http://www.php.net/header("Expires: 0");
  25. @http://www.php.net/header("Pragma: no-cache");
  26. @http://www.php.net/header("Content-type: text/css; charset=".$config['charset']);
  27.  
  28.  
  29. $data = "Ustawienia";
  30.  
  31. http://www.php.net/echo $data;
  32. ?>


Viking a wchodzisz przez http czy https?? jak przez http to będzie ci pokazywał tak

Napisany przez: trzczy 14.01.2018, 14:48:34

To co masz w liniach od 11 do 13 zamień na to

  1. http://www.php.net/error_reporting(-1);
  2. http://www.php.net/ini_set('display_errors', true);


Tymczasowo do testów, bo normalnie nie powinno się pokazywać błędów użytkownikom strony.

Napisany przez: alkesz1718 14.01.2018, 14:52:53

Więc rozumiem że mówisz o wyświetlaniu tego błędu w przeglądarce:

  1. The Error returned was: Something is wrong in your syntax obok '`time`=VALUES(`time`)' w linii 3. SQL query: INSERT INTO `dle_online` (`http://www.php.net/key`, `uid`, `uname`, `http://www.php.net/time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('c73438351767789436b3403cb68c2728', '0', 'robot', '1515768201', ...


Po zmianie kodu błąd się wyświetla nadal... (nie u mnie bo taki błąd jest jak w wyszukiwarce wpiszesz zajefajna.net.pl )

Napisany przez: trzczy 14.01.2018, 23:17:45

Cytat(alkesz1718 @ 14.01.2018, 14:52:53 ) *
Więc rozumiem że mówisz o wyświetlaniu tego błędu w przeglądarce:
Tak. To jest błąd bazydanych. Myślałem, że są jeszcze błędy php.

Napisany przez: alkesz1718 14.01.2018, 23:20:00

No to dobra to jest rozwiązanie z 1 ale teraz dlaczego jak zmienię wersję PHP na 7.0 to nagle w bloku nie wyświetla mi użytkowników a po zmianie na php 5.6 pojawiają się... tu na pewno jest coś nie tak z kodem php

Napisany przez: trzczy 14.01.2018, 23:22:36

Wklej tu kod, bo ludzie raczej nie wczhodzą na nieznane strony i nie otwierają nieznanych plików.

Napisany przez: alkesz1718 14.01.2018, 23:28:50

Ok więc tak w szablonie daję kod:
{include file='engine/modules/online.php'}
Kod z tego pliku:

  1. <?php
  2. /*
  3. ####################################################
  4. @copyright (c) 2015-2017 Dj_AlexN Graphic
  5. @name Moduł Online by Dj_AlexN Graphic
  6. @version 6.2
  7. @link <a href="http://dj-alexn.xaa.pl" target="_blank">http://dj-alexn.xaa.pl</a>
  8. ####################################################
  9. */
  10. if(!http://www.php.net/defined('DATALIFEENGINE'))
  11. {
  12. http://www.php.net/die("Hacking attempt!");
  13. }
  14.  
  15. /*
  16. ====================================
  17.  Podłączenie klasy
  18. ====================================
  19. */
  20.  
  21. require_once ROOT_DIR.'/engine/classes/online.class.php';
  22.  
  23. /*
  24. ====================================
  25. Usuwanie starych zapisywań
  26. ====================================
  27. */
  28.  
  29. $time = $_TIME - $online_config['time_out'] * 60;
  30. $rand = http://www.php.net/rand(1, 20);
  31. if($rand%2 == 0)
  32. {
  33. $db->query("DELETE FROM `".PREFIX."_online` WHERE `time` < '$time'");
  34. }
  35.  
  36. /*
  37. ====================================
  38.  Określenie miejsca pobytu
  39. ====================================
  40. */
  41.  
  42. $location = $online_api->getUserLocation();
  43.  
  44. /*
  45. ====================================
  46.  Określenie IP, Proxy, User agent
  47. ====================================
  48. */
  49.  
  50. $_IP = $db->safesql($_SERVER['REMOTE_ADDR']);
  51. $_UA = $db->safesql($_SERVER['HTTP_USER_AGENT']);
  52. $_PROXY = $db->safesql(http://www.php.net/getenv('HTTP_X_FORWARDED_FOR'));
  53.  
  54. /*
  55. ==============================================
  56.  Jeśli użytkownik wszedł - czyści ciasteczka
  57. ==============================================
  58. */
  59.  
  60. if( http://www.php.net/isset( $_POST['login'] ) and $_POST['login'] == "submit" )
  61. {
  62. if( PHP_VERSION < 5.2 )
  63. {
  64. http://www.php.net/setcookie( "module_online", "", 0, "/", DOMAIN . "; HttpOnly" );
  65.  
  66. } else {
  67. http://www.php.net/setcookie( "module_online", "", 0, "/", DOMAIN, NULL, TRUE );
  68. }
  69.  
  70. $key = http://www.php.net/md5("guest".$_IP);
  71. $db->query("DELETE FROM `".PREFIX."_online` WHERE `key`='{$key}'");
  72. }
  73.  
  74. /*
  75. =================================================
  76. Ciasteczka nope? Dryfuje na liście użytkowników
  77. =================================================
  78. */
  79.  
  80. if(!http://www.php.net/isset($_COOKIE['module_online']))
  81. {
  82.  
  83. /*
  84. ====================================
  85. Jeśli jesteś zalogowany
  86. ====================================
  87. */
  88.  
  89. if($is_logged)
  90. {
  91.  
  92. /*
  93. ====================================
  94. Określić system operacyjny
  95. ====================================
  96. */
  97.  
  98. $OS = $online_api->getUserOS($_UA);
  99.  
  100. /*
  101. ====================================
  102. Ustalamy przeglądarkę
  103. ====================================
  104. */
  105.  
  106. $user_agent = $online_api->getUserBrowser($_UA);
  107.  
  108. /*
  109. ====================================
  110. Tworzenie klucza, dodać do listy
  111. ====================================
  112. */
  113.  
  114. $key = http://www.php.net/md5($member_id['user_id'].$_IP);
  115.  
  116. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '{$member_id['user_id']}', '{$member_id['name']}', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '$location', '$_PROXY', '{$member_id['foto']}', '{$member_id['user_group']}') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `uid`=VALUES(`uid`), `uname`=VALUES(`uname`), `user_agent`=VALUES(`user_agent`), `foto`=VALUES(`foto`), `OS`='$OS', `proxy`='$_PROXY', `time`='$_TIME', `location`='$location', `user_group`=VALUES(`user_group`)");
  117. } else {
  118.  
  119. /*
  120. ====================================
  121. Jeśli nie jest zalogowany
  122. ====================================
  123. */
  124.  
  125. /*
  126. ====================================
  127. Ustal robota
  128. ====================================
  129. */
  130.  
  131. $robot = $online_api->check_robot($_UA);
  132.  
  133. /*
  134. =========================================================
  135. Umieszcza się w bazie danych robota lub odwiedzających
  136. =========================================================
  137. */
  138.  
  139. if($robot != '')
  140. {
  141. $key = http://www.php.net/md5($robot.$_IP);
  142.  
  143.  
  144. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`)
  145. VALUES ('{$key}', '0', 'robot', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '{$location}', '{$_PROXY}', 'unknown', '{$member_id['user_group']}')
  146. ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `user_agent`=VALUES(`user_agent`), `OS`='$OS', `location`='$location' `time`=VALUES(`time`)");
  147. } else {
  148. $key = http://www.php.net/md5("guest".$_IP);
  149. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `location`) VALUES ('{$key}', '0', 'guest', '$_TIME', '{$_IP}', '{$location}') ON DUPLICATE KEY UPDATE `uid`='0', `uname`='guest', `user_agent`='unknown', `foto`='unknown', `OS`='unknown', `proxy`='unknown', `time`='$_TIME', `location`='unknown', `user_group`='unknown'");
  150. }
  151. }
  152.  
  153. /*
  154. ==========================================
  155. Tworzenie plików cookie na czas wyjścia
  156. ==========================================
  157. */
  158.  
  159. $expires = http://www.php.net/time() + ($online_config['time_out'] * 60);
  160.  
  161. if( PHP_VERSION < 5.2 )
  162. {
  163. http://www.php.net/setcookie( "module_online", "1", $expires, "/", DOMAIN . "; HttpOnly" );
  164.  
  165. } else {
  166. http://www.php.net/setcookie( "module_online", "1", $expires, "/", DOMAIN, NULL, TRUE );
  167. }
  168. }
  169.  
  170. /*
  171. ===============================================
  172.  Jeśli AKTYWNY - aktualizowanie lokalizacji
  173. ===============================================
  174. */
  175.  
  176. if($online_config['show_location'] == "yes" OR $online_config['show_last_visit'] == "yes")
  177. {
  178. if($is_logged)
  179. {
  180. $key = http://www.php.net/md5($member_id['user_id'].$_IP);
  181. $db->query("UPDATE `".PREFIX."_online` SET `time`='$_TIME', `location`='{$location}' WHERE `key`='{$key}'");
  182. } else {
  183.  
  184. $robot = $online_api->check_robot($_UA);
  185.  
  186. if($robot != null)
  187. {
  188. $key = http://www.php.net/md5($robot.$_IP);
  189. $db->query("UPDATE `".PREFIX."_online` SET `time`='$_TIME', `location`='{$location}' WHERE `key`='{$key}'");
  190. }
  191. }
  192. }
  193.  
  194. $OnlineList = $online_api->getOnlineList();
  195. $all = $OnlineList['all'];
  196. $users_count = $OnlineList['users_count'];
  197. $users = $OnlineList['users'];
  198. $guests = $OnlineList['guests'];
  199. $robots_count = $OnlineList['robots_count'];
  200. $robots = $OnlineList['robots'];
  201.  
  202. /*
  203. ==========================================
  204.  wuświetlanie 20-stu ostatnich aktywnych
  205. ==========================================
  206. */
  207.  
  208. if($online_config['show_twenty_users'] == "yes")
  209. {
  210. $sql = $db->query("SELECT lastdate, user_id, name, logged_ip, foto, user_group FROM ".USERPREFIX."_users ORDER BY lastdate DESC LIMIT 20");
  211. $twenty_users_count = 0;
  212. $twenty_users = null;
  213. while($row = $db->get_row($sql))
  214. {
  215. $online_api->start($row['user_id'], $row['name'], $row['logged_ip'], $row['lastdate'], null, $row['user_group'], null, null, null, $row['foto']);
  216. $twenty_users .= $online_api->getUserInfo();
  217. $twenty_users_count++;
  218. $online_api->clear();
  219. }
  220. }
  221.  
  222. /*
  223. ====================================
  224.  Usuń ostatni przecinek
  225. ====================================
  226. */
  227.  
  228. if($users_count == 0) { $users = "0"; } else { $users = http://www.php.net/substr($users, 0, -2); }
  229. if($robots_count == 0) { $robots = "0"; } else { $robots = http://www.php.net/substr($robots, 0, -2); }
  230. if($twenty_users_count == 0) { $twenty_users = "0"; } else { $twenty_users = http://www.php.net/substr($twenty_users, 0, -2); }
  231.  
  232. /*
  233. ====================================
  234.  Otwórz szablon, wprowadź kody
  235. ====================================
  236. */
  237.  
  238. $tpl->load_template('online/list.tpl');
  239. $tpl->set('{guests}', $guests);
  240. $tpl->set('{users}', $users);
  241. $tpl->set('{robots}', $robots);
  242. $tpl->set('{twenty_users}', $twenty_users);
  243. $tpl->set('{users_count}', $users_count);
  244. $tpl->set('{robots_count}', $robots_count);
  245. $tpl->set('{twenty_users_count}', $twenty_users_count);
  246. $tpl->set('{all}', $all);
  247. $tpl->compile('online');
  248. $tpl->clear();
  249.  
  250. http://www.php.net/echo $tpl->result['online'];
  251. ?>

Dalej połączony z tym plik jest online.class.php:
http://wklejto.pl/322587

Niestety ten 1 plik musiałem dać na wklejkę bo za dużo znaków było w poście

Dodam że w tym 1 pliku może być również związany błąd o którym była mowa wcześniej

Napisany przez: Pyton_000 15.01.2018, 08:15:49

Kod
, `location`='$location' `time`=VALUES(`time`)");


przecinka brakuje...

Napisany przez: alkesz1718 15.01.2018, 08:23:07

Ale nadal to nie rozwiązuje problemu z brakiem wyświetlania aktywnych użytkowników na php 7

Napisany przez: viking 15.01.2018, 08:26:47

Sprawdź logi serwera bo masz pewnie kupę błędów których nie wyświetlasz. Teb obiekt db to mam nadzieję nie rozszerzenie mysql?

Napisany przez: alkesz1718 15.01.2018, 08:43:05

Sprawdziłem logi i nic tam nie ma jedyne błędy to z rss.xml
A co do tego obiektu db to w systemie w wielu miejscach jest podobne odniesienie do bazy danych np:

  1. $db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );

więc na pewno on nie wadzi tutaj

Napisany przez: viking 15.01.2018, 09:09:42

Jeśli masz błędy rss.xml to zapewne nie sprawdzasz błędy php tylko logi wejść.

Napisany przez: alkesz1718 15.01.2018, 09:13:39

wszystkie logi serwera jakie mogłem sprawdzić to sprawdziłem i jedyne błędy jakie były to tylko z rss i nic więcej

Napisany przez: viking 15.01.2018, 10:02:36

Apache generuje domyślnie 2 logi error_log i access_log. Sprawdzasz to u siebie lokalnie czy na serwerze?

Napisany przez: alkesz1718 15.01.2018, 10:20:14



Mówię że nie ma żadnych błędów...

Napisany przez: viking 15.01.2018, 10:28:15

Niemożliwe żeby błąd zapytania który sypał co najmniej warningiem nie został nigdzie uwzględniony. Raczej to wyżej nie działa. czyli które ci się zapytania wykonują na nowej wersji a które nie? Wkładania rekordów do bazy działa ale nie działa samo ich pobieranie?

Napisany przez: alkesz1718 19.01.2018, 02:25:33

Napiszę to co pisałem jednemu użytkownikowi na PW.
Moduł działa na zasadzie że: użytkownik, gość lub robot wchodząc na stronę jego dane są wysyłane do bazy na określony czas. Na stronie w bloku wyświetla liczbę aktywnych użytkowników ale nie wyświetla nicków i nawet w konsoli ich nie ma tak jakby nie istniały. W panelu admina gdzie mam konfigurację tam również można zobaczyć kto jest online i ich dane i w panelu wszystko jest ok tylko na stronie coś nie chce wyświetlać.

Jak zmienię wersję PHP na 5.6 to wszystko pokazuje jak należy ale jak zmienię na 7.x to już nagle brak użytkowników.

Wcześniejszy błąd dotyczący bazy co podałem wyświetlał w wyszukiwarce jak wpisało się adres strony to tak jakby w opisie strony przykład:


//////////////////////////////////////////////


Problem z wyświetlaniem użytkowników rozwiązany ale nadal ni stąd ni z owąd nadal pojawia się błąd z SQL w 'opisie' strony w wynikach wyszukiwania. Skopiowałem część tego błędu by znaleźć czy dużo jest takich stron... na szczęście nie ale to strasznie odstrasza ludzi jak coś wpisują w wyszukiwarkę i wyskakuje im 1 strona gdzie w opisie jest błąd...

Po przetłumaczeniu tego błędu wychodzi:

Cytat
Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu `` time` = VALUES (`time`) 'w linii 3. Zapytanie SQL: INSERT INTO `dle_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, ...


Jedyne takie zapytania to mam 2 w całym module:
  1. if($is_logged)
  2. {
  3.  
  4. $OS = $online_api->getUserOS($_UA);
  5.  
  6. $user_agent = $online_api->getUserBrowser($_UA);
  7.  
  8. $key = http://www.php.net/md5($member_id['user_id'].$_IP);
  9.  
  10. // Pierwsze Odwołanie
  11. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '{$member_id['user_id']}', '{$member_id['name']}', '$_TIME', '{$_IP}', '{$user_agent}', '$OS', '$location', '$_PROXY', '{$member_id['foto']}', '{$member_id['user_group']}') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `uid`=VALUES(`uid`), `uname`=VALUES(`uname`), `user_agent`=VALUES(`user_agent`), `foto`=VALUES(`foto`), `OS`='$OS', `proxy`='$_PROXY', `time`='$_TIME', `location`='$location', `user_group`=VALUES(`user_group`)");
  12. } else {
  13.  
  14. $robot = $online_api->check_robot($_UA);
  15.  
  16. if($robot != '')
  17. {
  18. $key = http://www.php.net/md5($robot.$_IP);
  19. // 2 Odwołanie
  20. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`, `user_agent`, `os`, `location`, `proxy`, `foto`, `user_group`) VALUES ('{$key}', '0', 'robot', '$_TIME', '{$_IP}', '$robot', 'unknown', 'unknown', 'unknown', '/engine/skin/images/online/icon_root.png', 'unknown') ON DUPLICATE KEY UPDATE `key`=VALUES(`key`), `time`=VALUES(`time`)");
  21. } else {
  22. $key = http://www.php.net/md5("guest".$_IP);
  23. $db->query("INSERT INTO `".PREFIX."_online` (`key`, `uid`, `uname`, `time`, `ip`) VALUES ('{$key}', '0', 'guest', '$_TIME', '{$_IP}') ON DUPLICATE KEY UPDATE `uid`='0', `uname`='guest', `user_agent`='unknown', `foto`='unknown', `OS`='unknown', `proxy`='unknown', `time`='$_TIME', `location`='unknown', `user_group`='unknown'");
  24. }
  25. }


Teraz specyfikacja serwera:
PHP: 7.0.7
Wersja MySQL: 5.5.32-cll MySQLi
Kodowanie bazy danych: utf8_general_ci

Poniżej daję link do zrzutu ekranu do struktury tej tabeli
https://i.imgur.com/T8QTdYg.png



Normalnie to by było już po sprawie ale moduł ten odnowiony dałem na stronę gdzie nigdy takiego nie było i w ciągu 2 dni w opisie strony w wynikach wyszukiwania pojawił mu się taki błąd...
Może mam coś nie tak z budową tej tabeli albo coś jest nie tak w wywołaniu bazy... może wy coś znajdziecie

Napisany przez: Pyton_000 19.01.2018, 09:21:38

Nie te zapytania podałeś... Błąd masz ewidentnie w zapytaniu SQL ale nie w tym. I na dodatek z przecinkiem o którym Ci już mówiłem.

Napisany przez: alkesz1718 19.01.2018, 11:59:56

Tamtego zapytania już nie ma, zrobiłem nowe zapytanie co jest wyżej podane z względów nie wyświetlania wszystkich informacji w bloku ale nigdzie nie brakuje tego przecinka a w wyszukiwarce nadal pojawia się błąd...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)