kostenloser Webspace werbefrei: lima-city


Problem : Fatal error: Maximum execution time of 20 seconds exceeded in /home/webpages/lima-city/testings/html/testings

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    testings

    testings hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    testings

    testings hat kostenlosen Webspace.

    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
  5. 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
  6. desaster-productions

    desaster-productions hat kostenlosen Webspace.

    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.
  7. 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.:-o

    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
  8. f************r

    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
  9. Lad dir XAMPP runter, mach vor das Script:

    set_time_limit(0);


    und lass es mal auf deinem Rechner laufen!
  10. 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
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!