Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Implementacja iteratora powoduje wyłączenie apache, pozniej serwer nie odpowiada
Wolfie
post
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam,

Mialem zaimplementowana metode getRow() ktora wygląda nastepująco :

  1. <?php
  2. public function getRow() {
  3.            return mysql_fetch_array($this->result);
  4.        }
  5. [php]
  6.  
  7. Nastepnie wywoływałem wynik w ten sposob :
  8.  
  9. [php]
  10. while($row = $rs->getRow()) {
  11.            echo $row[0]." - ".$row[1];
  12.            echo "<br />\n";
  13.        }
  14. ?>


Nastepnie aby zastapic metode getRow() zaimplementowalem interface iterator posiadający nastepujące metody :

  1. <?php
  2. interface Iterator {
  3.        public function current();
  4.        public function key();
  5.        public function next();
  6.        public function rewind();
  7.        public function valid();
  8.    }
  9. ?>


Ktore wyglądają tak :

  1. <?php
  2. public function current() {
  3.            return $this->currentrow;
  4.        }
  5.        
  6.        public function key() {
  7.            return $this->key;
  8.        }
  9.        
  10.        public function valid() {
  11.            return $this->valid();
  12.        }
  13.        
  14.        public function next() {
  15.            if($this->currentrow = mysql_fetch_array($this->result)) {
  16.                $this->valid = true;
  17.                $this->key++;
  18.            } else {
  19.                $this->valid = false;
  20.            }
  21.        }
  22.        
  23.        public function rewind() {
  24.            if($num = mysql_num_rows($this->result) > 0) {
  25.                if(mysql_data_seek($this->result, 0)) {
  26.                    $this->valid = true;
  27.                    $this->key = 0;
  28.                    $this->currentrow = mysql_fetch_array($this->result);
  29.                }
  30.            } else {
  31.                $this->valid = false;
  32.            }
  33.        }
  34. ?>


Nastepnie aby wyswietlic wynik na ekranie uzylem zamiast petli while i funkcji getRow() petli foreach :

  1. <?php
  2. foreach($rs as $row) {
  3.            echo $row[0]." - ".$row[1];
  4.            echo "<br />\n";
  5.        }
  6. ?>


No i niestety, gdy odpalilem plik index.php serwer apache przestal dzialac wywalajac komunikat windows "serwer http przestał dzialac", zrestartowałem serwer ale kolejna proba wyswietlila strone "przekroczony limit czasu połączeń"......jakim cudem taka implementacja moze zatrzymac prace serwera ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ech, to już bardziej skomplikowana sprawa...

Spróbuj zmiany wersji Apache/PHP; żonglowanie zasobami MySQL nieraz powoduje takie dziwne błędy. Teoretycznie wszystko jest ok, ale w praktyce się sypie.

A przykładowy Iterator z dokumentacji działa, czy też sypie?
Go to the top of the page
+Quote Post
Wolfie
post
Post #3





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Jeszcze nie probowalem iteratora z dokumentacji, myslisz ze zmiana na php 5.3.0 moze cos pomoc ? Aktualnie mam wercje chyba 5.2.6.....
Go to the top of the page
+Quote Post
NuLL
post
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Uruchom sobie XDebug'a i zobacz dlaczego skrypt sie tak dlugo wykonuje i sie nie konczy - debuger twoim sprzymierzencem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~Wolfie, nie trać czasu, tylko sprawdzaj podpowiedzi. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

~NuLL, to nie jest takie proste - jeśli problem tkwi w jądrze intepretera, to debugger Ci wcale nie pomoże... Czasem może być właśnie przyczyną problemów...

BTW: wyłącz wszelkie akceleratory.
Go to the top of the page
+Quote Post
Wolfie
post
Post #6





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


akceleratory ? XDebuger ? Ja narazie sie ucze php, mozna powiedziec ze to moje pierwsze kroki tak naprawde (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

------------------------------------------------------------------
Dziwne jest tez to ze jak wrocilem do porzedniej wersji mojego programu bez uzycia iteratora i petli foreach to i tak wystepuje "Przekroczenie limitu czasu połączen".......jak mozna to naprawic ? (inne projekty normalnie działają )
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Spróbuj dopisać na końcu httpd.conf linijkę:
Kod
Win32DisableAcceptEx On

i zrestartować demona.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 11:35