Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Implementacja iteratora powoduje wyłączenie apache
Forum PHP.pl > Forum > PHP
Wolfie
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 ?
erix
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?
Wolfie
Jeszcze nie probowalem iteratora z dokumentacji, myslisz ze zmiana na php 5.3.0 moze cos pomoc ? Aktualnie mam wercje chyba 5.2.6.....
NuLL
Uruchom sobie XDebug'a i zobacz dlaczego skrypt sie tak dlugo wykonuje i sie nie konczy - debuger twoim sprzymierzencem smile.gif
erix
~Wolfie, nie trać czasu, tylko sprawdzaj podpowiedzi. 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.
Wolfie
akceleratory ? XDebuger ? Ja narazie sie ucze php, mozna powiedziec ze to moje pierwsze kroki tak naprawde 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ą )
erix
Spróbuj dopisać na końcu httpd.conf linijkę:
Kod
Win32DisableAcceptEx On

i zrestartować demona.
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.