Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Skrypt co jakiś czas wywala ERR_CONNECTION_RESET
Forum PHP.pl > Forum > Przedszkole
d0m1n1k_
Witam,
nie jestem pewien dlaczego skrypt co jakiś czas (7 na 9 odświeżeń) wywala mi błąd: ERR_CONNECTION_RESET

Nie wiem gdzie szukać błędu, nie mogę znaleźć elementów błędnych, szczególnie że kod działa poprawnie.
Czy pętla przetwarzająca kilka stron i dodająca dane do tablicy może być aż tak niefortunna?
Nawet gdy wywali errora i tak zadziała i doda pobrane dane do bazy mysql.
Poniżej podaję kod który napisałem.
Z góry dziękuję za każdą podpowiedź.
Nadmienię, że inne skrypty działają i nie wywalają takich errorów.
Serwis z którego pobieram dane zawsze odpowiada poprawnie.

  1. include('core/configuration.php');
  2.  
  3. //Pobieranie danych z bazy
  4. $stats_ident = mysql_query("SELECT * FROM `stats_id` WHERE `si_stat` = '0' ORDER BY `si_id` ASC LIMIT 1");
  5. if(mysql_num_rows($stats_ident) > 0){
  6. while($si = mysql_fetch_array($stats_ident)){
  7. $year = $si['sik'];
  8. $marka = $si['sia'];
  9. $model = $si['sil'];
  10. $usedca = '/**dane uzupełniające***/';
  11. $adres = '/**adres1**/' . $marka . '/' . $model . '/**adres2**/' . $year . '/**adres3**/' . $year;
  12.  
  13. $curl = curl_init();
  14. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  15. curl_setopt($curl, CURLOPT_HEADER, false);
  16. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  17. curl_setopt($curl, CURLOPT_URL, $adres . $usedca);
  18. curl_setopt($curl, CURLOPT_REFERER, $adres . $usedca);
  19. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  20. $str = curl_exec($curl);
  21. curl_close($curl);
  22.  
  23. $html_base = new simple_html_dom();
  24. $html_base->load($str);
  25.  
  26. foreach($html_base->find('h1') as $z){
  27. if(strpos($z->plaintext, 'Nie istnieje') !== false) {
  28. $niemawynikow[] = $z->plaintext;
  29. }
  30. }
  31. if(isset($niemawynikow)){
  32. echo "Dla " . $si['si_showid'] . " nie odnaleziono wyników<br />";
  33. $change_end = mysql_query("UPDATE `stats_id` SET `si_stat` = '1' WHERE `si_id` = '" . $si['si_id'] . "'");
  34. $year++;
  35. }else{
  36. //Ilość stron z zawartością
  37. foreach($html_base->find('span[class=sites]') as $element){
  38. $strony[] = preg_replace('/[^0-9]+/', '', $element->plaintext);
  39. }
  40. if(!isset($strony)){
  41. $ilosc_stron = 1;
  42. }else{
  43. $ilosc_stron = max($strony);
  44. }
  45.  
  46. //Strony do przelecenia
  47. $i = 1;
  48. while($i <= $ilosc_stron){
  49. if($i == 1){
  50. $url[] = $adres . $usedca;
  51. }else{
  52. $url[] = $adres . '/**adres4**/' . $i . $usedca;
  53. }
  54. $i++;
  55. }
  56.  
  57. foreach($url as $link){
  58.  
  59. $curl = curl_init();
  60. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  61. curl_setopt($curl, CURLOPT_HEADER, false);
  62. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
  63. curl_setopt($curl, CURLOPT_URL, $link);
  64. curl_setopt($curl, CURLOPT_REFERER, $link);
  65. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  66. $str = curl_exec($curl);
  67. curl_close($curl);
  68.  
  69. $html = new simple_html_dom();
  70. $html->load($str);
  71.  
  72. //Pobierz walutę USD
  73. foreach($html->find('ul[class=xm-params-lists]') as $g){
  74. foreach($g->find('span') as $e){
  75. if(strpos($e->plaintext, ' usd') !== false) {
  76. if($e->plaintext != '1 usd'){
  77. $usd[] = str_replace("usd", "", str_replace(" ", "", $e->plaintext));
  78. }
  79. }
  80. }
  81. }
  82. //Pobierz walutę EUR
  83. foreach($html->find('span[class=om-price]') as $f){
  84. if(strpos($f->plaintext, ' EUR') !== false) {
  85. if($f->plaintext != '1 EUR'){
  86. $eur[] = str_replace("EUR", "", str_replace(" ", "", $f->plaintext));
  87. }
  88. }
  89. }
  90. }
  91.  
  92. $sredni_usd = round(array_sum($usd)/count($usd),0);
  93. $srednia_eur = round(array_sum($eur)/count($eur),0);
  94. $srednia_zakres = count($eur);
  95.  
  96. if($sredni_usd != 0){
  97. $A_insert = mysql_query("INSERT INTO `stats_a`(`sc_id`, `sc_si`, `sc_a`, `sc_count`, `sc_data`) VALUES (NULL, '" . $si['si_id'] . "', '" . $sredni_usd . "', '" . $srednia_zakres . "', NOW())");
  98. }else{
  99. echo "Nie dodano A.<br />";
  100. }
  101.  
  102. if($srednia_eur != 0){
  103. $B_insert = mysql_query("INSERT INTO `stats_b`(`sp_id`, `sp_si`, `sp_b`, `sp_count`, `sp_data`) VALUES (NULL, '" . $si['si_id'] . "', '" . $srednia_eur . "', '" . $srednia_zakres . "', NOW())");
  104. }else{
  105. echo "Nie dodano B.<br />";
  106. }
  107.  
  108. //Zaznacz ze przetworzono
  109. $change_end = mysql_query("UPDATE `stats_id` SET `si_stat` = '1' WHERE `si_id` = '" . $si['si_id'] . "'");
  110. $year++;
  111.  
  112. unset($html_base);
  113. unset($ilosc_stron);
  114. unset($url);
  115. unset($html);
  116. unset($usd);
  117. unset($eur);
  118. if(isset($strony)){
  119. unset($strony);
  120. }
  121. }
  122. }
  123. }else{
  124. echo "Brak elemetów do przetworzenia.<br />";
  125. }
viking
Jaki serwer? Widzę że na starszym Wamp taki błąd wyrzucało kiedy nie zamykało się połączenia z bazą. Poza tym obstawiał bym problemy z połączeniem na drugim curl w pętli jeśli jest duża pętla.
d0m1n1k_
A więc tak:
Serwer to WebServ (Apache, PHP, MySQL, FTP) na Windows 10.
Serwer ma limity ustawione przeze mnie:
- memory_limit:1024MB
- max_execution_time: 30 sekund (0 dla tego skryptu);
- maksymalny rozmiar przesyłanych danych/plików w formularzach: 100MB

Dodałem do kodu
  1. mysql_close($connection);

ale nic to nie dało :-//

Co do wielkości danych obsługiwanych przez curl - najwięcej dotychczas obrabiało 15 stron z sumą niecałych 450 poszukiwanych informacji.
Strony co prawda, są dość obfite, ale nie przekraczają 100kB - czyli wynika z tego, że suma danych do ogarnięcia nie przekracza 1/6 przydzielonych zasobów.
viking
Nie chodzi o zasoby ale ilość nawiązywanych połączeń w foreach -> foreach($url as $link){...
d0m1n1k_
Czyli limit powinien być ustawiony na jakąś wartość?
5? 7? 10? 15?
Error wywala niezależnie od liczby stron do parsowania (i przy 1, i przy 10).
To jak mam parsować gdy dany wątek ma 7 czy 20 stron danych?
Pyton_000
Wrzuć w kod kilkanaście echo żeby zdiagnozować w którym miejscu się wywala.
d0m1n1k_
Na chwilę obecną zrobiłem sobie iframe z interval'em

  1. <script type="text/javascript">
  2. window.setInterval("reloadIFrame();", 22000);
  3. function reloadIFrame() {
  4. document.getElementById("statss").src="statistics_script.php";
  5. }
  6.  
  7. <div align="center" width="100%" height="100%">
  8. <div width="250" height="250">
  9. <iframe id="statss" name="statss" marginwidth="0" marginheight="0" width="90%" height="90%" frameborder=1 src="statistics_script.php">
  10. </iframe>
  11. </div>
  12. </div>


dorzuciłem
  1. ini_set('display_errors', 1);


ale cały czas zero reakcji.
Albo nie wywala żadnego błędu, albo się wysypuje.
I - co zabawne w tej całej sytuacji - niezależnie od wszystkich wrzuca prawidłowe dane do bazy danych.
jiskauska
Mam problemy ERR_CONNECTION_RESET w moim komputerze ...

Znalazłem moją poprawkę

http://www.deskdecode.com/err_connection_reset/

wszystko działa teraz
alistecfil
In layman’s terms, Err_Connection_Reset usually occurs due to the connection break between internet and website.

Anyway, this issue can be fix with the following solutions

Check Your Proxy Settings
Verify or Change Your MTU
Disable Anti-virus Software

if still having issue i will request to check solution given here https://errorcodespro.com/fix-err_connectio...c-windows-7-10/
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.