Oneindige loop - Apache crashed
Bestet mensen,
Heb een probleempje dat nogal op mijn zenuwen begint te werken...
Als ik per ongeluk een oneindige loop maak, loopt mijn Apache vast, tenminste ik kan niks meer van mijn localhost openen, hij blijft dan maar draaien alsof hij nog in die loop zit (terwijl ik al ESC heb gebruikt om script te stoppen).
Ik moet echt bij mijn services Apache2 opnieuw opstarten, wil het weer werken..
Het gaat in die geval om deze stukjes code:
Heeft iemand anders dat ook?
Enn vraag 2, waarom komt hij in een oneindige loop?
Want als ik 'met de hand' de resultaten fetch werkt het wel goed...
Heb een probleempje dat nogal op mijn zenuwen begint te werken...
Als ik per ongeluk een oneindige loop maak, loopt mijn Apache vast, tenminste ik kan niks meer van mijn localhost openen, hij blijft dan maar draaien alsof hij nog in die loop zit (terwijl ik al ESC heb gebruikt om script te stoppen).
Ik moet echt bij mijn services Apache2 opnieuw opstarten, wil het weer werken..
Het gaat in die geval om deze stukjes code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
// ................ //
$results = $DB->query("SELECT Field_Name, Replacement FROM template_fields");
// De loop
while($rows = $DB->fetch($results))
{
$FileContent = str_replace($rows['Field_Name'],$rows['Replacement'],$FileContent);
}
$FileContent = str_replace('{$MENU$}','Menu knoppen uit de database',$FileContent);
return $FileContent;
?>
// ................ //
$results = $DB->query("SELECT Field_Name, Replacement FROM template_fields");
// De loop
while($rows = $DB->fetch($results))
{
$FileContent = str_replace($rows['Field_Name'],$rows['Replacement'],$FileContent);
}
$FileContent = str_replace('{$MENU$}','Menu knoppen uit de database',$FileContent);
return $FileContent;
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// .......... //
function query($query)
{
global $DB, $LANG;
if($this->result = @mysql_query($query))
{
return $this->result;
}
else
{
$this->DBerror ='<br />'.$LANG['query_error'].'<br /><b>'.mysql_error().'</b>';
}
return $this->DBerror;
}
var $rows;
function fetch($result)
{
global $DB, $LANG;
if($this->rows = @mysql_fetch_array($result))
{
return $this->rows;
}
else
{
$this->DBerror = '<br /><br /><b>'.mysql_error().'</b>';
}
return $this->DBerror;
}
?>
// .......... //
function query($query)
{
global $DB, $LANG;
if($this->result = @mysql_query($query))
{
return $this->result;
}
else
{
$this->DBerror ='<br />'.$LANG['query_error'].'<br /><b>'.mysql_error().'</b>';
}
return $this->DBerror;
}
var $rows;
function fetch($result)
{
global $DB, $LANG;
if($this->rows = @mysql_fetch_array($result))
{
return $this->rows;
}
else
{
$this->DBerror = '<br /><br /><b>'.mysql_error().'</b>';
}
return $this->DBerror;
}
?>
Heeft iemand anders dat ook?
Enn vraag 2, waarom komt hij in een oneindige loop?
Want als ik 'met de hand' de resultaten fetch werkt het wel goed...
Gewijzigd op 23/02/2006 11:56:00 door Willem Jan Z
Gesponsorde koppelingen:
in je function "fetch" return je een error als het fout gaat en een result als het goed gaat. Dat betekent dat er altijd iets geretourneerd wordt en dat deze regel
while($rows = $DB->fetch($DB->result))
dus altijd true is.
edit: je kunt het uittesten door geen error te retourneren, maar gewoon false
while($rows = $DB->fetch($DB->result))
dus altijd true is.
edit: je kunt het uittesten door geen error te retourneren, maar gewoon false
Gewijzigd op 23/02/2006 11:59:00 door Jan Koehoorn
Bij fetch, bij een fout, geef je een string terug. In een WHILE-lus gaat het om true en false. Een string staat voor true, dus zo lang hij fouten geeft, gaat de while lus door. Als je false terug geeft, stopt de lus. Dus ipv een string met de fout kan je beter false terug geven en de error ergens opslaan, en die achteraf echo'en.
edit: jan was eerder ;)
edit: jan was eerder ;)
Gewijzigd op 23/02/2006 11:59:00 door Jelmer rrrr
Tnx!
Maar hebben jullie dat ook? Dat apache vast loopt als je in een oneindige lus bent gekomen?
Maar hebben jullie dat ook? Dat apache vast loopt als je in een oneindige lus bent gekomen?
Zou ik even moeten uittesten. De max execution time is toch standaard 30 sec?
Dacht het wel ja
Mijn niet, had gisteren nog een paar. Maar op esc drukken in de browser (stoppen met laden) hielp goed genoeg. Wel vreemd dat toen mijn schijf plotseling vol was. Blijkbaar had Apache zo'n enorm geheugengebruik dat mijn swap-file was opgezwollen.
Net lokaal even deze getest:
Kan hem op elk moment stoppen met esc zonder dat apache vastloopt.
Kan hem op elk moment stoppen met esc zonder dat apache vastloopt.
Ben de hele server opnieuw aan het installeren, zonder Xampp deze keer.
Eens zien of dat iets oplevert...
Eens zien of dat iets oplevert...
Willem-Jan:
Ik heb Apache2 met Arjans tut geïnstalleerd, en ja, soms is hij buggy. Dan echo'et hij niet meer, dat lukt hem niet, en dan moet ik heb stoppen en weer starten (herstarten werkt dan niet). Dat heb ik ook als ik bepaalde dingen via mijn AJAX Console scriptje via shell_exec() wilt uitvoeren. Bij 'cmd' ingevoert te hebben moet ik mijn server stoppen en weer starten.Tnx!
Maar hebben jullie dat ook? Dat apache vast loopt als je in een oneindige lus bent gekomen?
Maar hebben jullie dat ook? Dat apache vast loopt als je in een oneindige lus bent gekomen?
Daar ben ik nu ook mee bezig, alleen wil ik hem op poort 8080, maar daarom heeft hij hem niet als service geinstalleerd...
Weet iemand hoe dat met de hand moet?
Weet iemand hoe dat met de hand moet?
poort 8080 is toch standaard?
Nee 80 is standaard, maar daar heb ik nu JSP server op staan, en host ik voor school... Dus is 8080 (wat JSP tomcat standaard port is) beetje lastiger.



