Problem : Fatal error: Maximum execution time of 20 seconds exceeded in /home/webpages/lima-city/testings/html/testings
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bedingung
berechnung
code
datum
ende
endlos schleife
ergebnis
fakt
fehler
formular
grundlegendes problem
kurzer kampf
laufen
liegen
rand
rechner
runden echo
schleife
sekunde
werte echo
-
Hallo ,
ich habe folgendes Problem : Sobald ich das Formular mit den eingebenen Daten meines Simulators (kleiner Schlachtensimulator für ein Browsergame)abschicke , dauert ca. 20 sek und :
Fatal error: Maximum execution time of 20 seconds exceeded in /home/webpages/lima-city/testings/html/testings/testsim2.php on line 18 erscheint
Der Code<?php //$_post['att-werte'] //$_post['att-fakt'] //$_post['def-werte'] //$_post['def-fakt'] define('SPATT-WERTE', $_post['att-werte'],true); define('SPDEF-WERTE',$_post['def-werte'],true); $zufallszahldef = (rand (9001,10999))/10000; $zufallszahlatt = (rand(9001,10999))/10000; define('VAUSFUERDEF', ($_post['att-werte']/10),true); define('AUSFUERDEF', floor(VAUSFUERDEF),true); define('VAUSFUERATT', $_post['def-werte']/10,true); define('AUSFUERATT', floor(VAUSFUERATT),true); $gesamtdef = $_post['def-werte']*$zufallszahldef ; $gesamtatt = $_post['att-werte']*$zufallszahlatt ; $runden = 0; //______________ while($gesamtdef >= AUSFUERDEF and $gesamtatt >= AUSFUERATT){ $killandef = $_post['att-fakt']*$gesamtatt ; $killanatt = $_post['def-fakt']*$gesamtdef ; $gesamtdef - $killandef ; $gesamtatt - $killanatt ; $runden + 1 ; } if ($gesamtdef > AUSFUERdEf and $gesamtatt < AUSFUERaTt ){ echo "Der deffer hat gewonnen und startete mit "; echo SPDEF-WERTE; echo "/ der atter mit "; echo SPATT-WERTE ; echo ",der der hatte eine(anfängliche) E-Rate von "; echo $_post['def-fakt']; echo "/der atter von "; echo $_post['att-fakt']; echo"sowie am Ende "; echo$gesamtdef; echo"/"; echo$gesamtatt; echo ". Der Kampf dauerte "; echo $runden; echo " Runden ."; } if ($gesamtdef > AUSFUERdEF and $gesamtatt > AUSFUERaTt ){ echo "Der deffer hat verloren und startete mit "; echo SPDEF-WERTE; echo "/ der atter mit "; echo SPATT-WERTE; echo " , der der hatte eine(anfängliche) E-Rate von "; echo $_post['def-fakt']; echo "/der atter von "; echo $_post['att-fakt']; echo "sowie am Ende "; echo $gesamtdef; echo"/"; echo $gesamtatt; echo ". Der Kampf dauerte "; echo $runden; echo" Runden ."; } else { echo "Fehler"; } ?>
Was kann ich dagegen tun ???
Danke !
MFG -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Maximale Ausführungsdauer ist auf 20 sekunden beschränkt, das heißt wenn php länger braucht, dann kommt der Fehler. Evtl. irgendwo eine endlos schleife eingebaut?
ich geh mal davon aus das das problem die while schleife ist.
Beitrag zuletzt geändert: 9.3.2009 16:02:05 von myhead -
while($gesamtdef > AUSFUERDEF and $gesamtatt > AUSFUERATT){ $killandef = $_post['att-fakt']*$gesamtatt ; $killanatt = $_post['def-fakt']*$gesamtdef ; $gesamtdef - $killandef ; $gesamtatt - $killanatt ; $runden + 1 ;
//Das "=" war garnicht in dem Code auf dem Server enthalten
d.h. doch nur :Solange a größer b und c größer d:
Tue:
a - e
b-f
;
Endlos-Schleife ??? : irgend-wann ist a oder c kleiner b bzw. d und dann ignoriert es doch die Schleife.
An AUSFUERDEF / AUSFUERATT kann es nicht liegen die sind konstant mit den Eingaben den aus dem Formular verwachsen , welche auch konstant sind .
Dann müsste es an "$killanatt" und an $killandef liegen , bsp.:
a = 10000
b = 10000
killanatt = 0,5*a = 5000
killandef = 0,1*b=1000
-> a =9000
-> b =5000
nächste Runde :
9000*0,5 = 4500
5000*0,1 = 500
-> a = 4500
-> b = 500 (und damit kleiner als der Bedingungswert-< Ende der Schleife ) , oder ???
MFG
-
tjoar line 18 ist die whileschleife :o
kann mir jetzt nicht vorstellen dass das 20 sekunden dauern soll O.o
aber anscheinend tut es das:p
vllt mal woanders probieren.. :3
//EDIT:
woanders = anderer webspace
Beitrag zuletzt geändert: 9.3.2009 16:46:28 von darkytiger -
am besten mal auf localhost. in der php-config die max execution time seeeeehr hoch setzen, eine rauchen gehen und dann schauen obs geht. wenns noch immer ned geht, is das kampfscript entweder verbuggt oder für ein BG einfach unbrauchbar.
-
Mir scheint, da gibt es ein grundlegendes Problem bei deiner Berechnung.
Testweise mal $attwerte = 100 und $deff-werte = 10 gesetzt. Sollte also ein kurzer Kampf werden. ;)
Das Sricpt läßt die while-Schleife aber bis zum Timeout über 800000 Mal laufen.
Außerdem noch ein Fehler:
$runden + 1;
soll wohl eher
$runden +=1;
lauten. Sonst werden die Runden nicht hochgezählt
EDIT: Man sollte genauer hinschauen. Das kann ja gar nicht funktionieren. Die While-Schleife läuft endlos, da du
die Ergebnisse deiner Berechnung
$gesamtdef - $killandef ;
$gesamtatt - $killanatt ;
nicht übergibst und sich somit die Bedingungen nie verändern.
EDIT2: Achte bei der Auswertung der Ergebnisse auf die Groß-/Kleinschreibung deiner Konstanten. Sonst gibbet immer Fehler ;)
Freddy
Beitrag zuletzt geändert: 12.3.2009 17:09:56 von fatfreddy -
Hi,
ich würde einfach mal
$gesamtdef - $killandef ; $gesamtatt - $killanatt ; $runden + 1 ;
in
$gesamtdef = $gesamtdef - $killandef ; $gesamtatt = $gesamtatt - $killanatt ; $runden = $runden + 1 ;
ändern!
MfG
Steffen -
Lad dir XAMPP runter, mach vor das Script:
set_time_limit(0);
und lass es mal auf deinem Rechner laufen! -
cookies schrieb:
Lad dir XAMPP runter, mach vor das Script:
set_time_limit(0);
und lass es mal auf deinem Rechner laufen!
Wem soll das helfen, wenn, wie in den beiden Beiträgen vor deinem erwähnt, die Berechnungen nicht gespeichert und die while-Schleife endlos ausgeführt wird. Selbst ein Timelimit von 2 Stunden würde kein Ergebnis bringen.
BTW: Den Threadstarter scheint es ja eh nicht mehr zu interessieren, sonst hätte er vermutlich schon geantwortet.
Freddy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage