Problem mit PHP oder JavaScript: Maximum execution Time

the_royal

Mitglied
Guten Morgen Community
Ich müsste in einer Website eine kleine Textanimation einfügen, wo der Text von Links nach Rechts fliegt.
Bis jetzt funktionierte dies auch mithilfe von $fx:
http://fragen.bbcpost.ch/index.php?pid=1
Nun kam aber der Wunsch nach mehreren Texten welche gleichzeitig herumschweben.
Hier mein Versuch dies irgendwie mit einer Schlaufe zu lösen:

PHP:
$i=0;
$count=0;
while($i<1){
echo'<div id="test'.$count.'">'.$frage.'</div>';
?>
<script type="text/javascript"> 
  Slide(<?php $count?>);
</script>
<?php 
sleep(30);
$count++;
}
?>

Hier meine Javascript Function Slide:

HTML:
  function Slide(x){
	    //Die Fensterbreite 
	  var width= Fensterweite();
	    //die Fensterhöhe abzüglich der Grösse des Text-divs
	  var height= Fensterhoehe()-200;
	    //Liefert eine zufällige Grösse im Bereich zwischen 0 und der Höhe des Fensters
	  var randomHeight = Zufall(height);

	    
	    //Setzt margin-top vom Text-div auf den Punkt der Höhe-der zufälligen Höhe
	  document.getElementById("test".x).style.marginTop=height-randomHeight+"px";
	  document.getElementById("test".x).style.marginLeft="0px";
	  //Setzt den Mittelpunkt, wo der Schriftzug kurz anhaltet
	  //Bei marginLeft wird der Punkt aus der Bildweite/2(Mittelpunkt) - 210(die halbe weite unseres TextDivs) berechnet
	    $("#test".x).animate({"marginLeft": (width/2)-210+"px", "marginTop": height/2+"px", "opacity":"1"},10000);
	  //Timeout für eine Sekunde
	    $("#test".x).delay(1000);
	    //Setzt den Endpunkt des Schriftzuges
	  //Bei marginLeft wird die Bildweite abzüglich der 420(weite unseres textDivs) gesetzt, bei height wird jetzt unser Zufallswert gesetzt
	    //Dadurch sollte der Streckenverlauf des Divs immer linear sein
	    $("#test".x).animate({"marginLeft": width-420+"px", "marginTop": randomHeight+"px", "opacity":"0"},10000);    
	     };

Nun kommt aber nach längerer Zeit die Fehlermeldung:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\Fragen\show.php on line 38

Line 38 wäre die Zeile mit dem $count++.

Kann jemand das Problem sehen?:confused:
Vielen Dank im Voraus für eure Tipps!

Gruss the_royal
 
Deine while Schleife prüft auf $i. Du inkrementierst aber nur $count, so dass $i immer gleich bleibt und die Schleife ewig läuft.

JavaScript hat rein gar nix mit der Laufzeit eines php Scripts zu tun.

P.S. sleep ist nicht schön.
 
die Schleife muss ja auch ewigs laufen... zumindest solange bis jemand wieder zur Home-Seite wechselt.

Welche Alternative hast du für sleep?

Andere Vorschläge für mein Problem**** :confused:
 
Hast du dir die Seite mal angeschaut?
http://fragen.bbcpost.ch/index.php?pid=1

Es geht darum immer wieder eine zufällige Frage aus der DB zu holen und diese über den Screen laufen zu lassen. Bisher löse ich das mit einem refresh der Seite nach Durchlauf des Eintrags über den Screen.
Nun wird aber gewünscht, dass mehrere Einträge gleichzeitig über das Bild laufen.
Deshalb meine Idee das ganze in einer Schlaufe immer wieder aufzurufen... Denke aber mittlerweile, dass das ganze so nicht möglich ist...
Wäre deshalb wahrscheinlich eher dankbar um Alternativ vorschläge... Irgendein Flashplugin?

Gruss the_royal
 
Ich würde vermutlich eher auf Ajax zurück greifen.
Einfach mit ajax alle x Sekunden einen Request an die PHP datei abgeben.
PHP gibt dann eine zufällige Frage an den Ajax-Aufruf zurück und Javascript lässt das dann übers Bild wandern.

Wenn es mehrere Fragen sein sollen funktioniert das dann genauso nur das du dir von PHP eben nicht eine sondern mehrere Fragen geben lässt.
 
Ich würde mir ganz ehrlich x Fragen aus der DB holen und diese in einem Array abspeichern.
Mit dem Array kannst du dann machen, was du willst und musst nicht immer wieder die DB bemühen.
Dann könnte man eine Funktion ja rekursiv aufrufen, damit sie immer wieder durchlaufen wird.
Wenn man das nicht mehr will, dann wird beispielsweise einfach ein Wert inkrementiert bzw. wenn die Seite verlassen wird ist es ja eh wurscht ;)
 
Hallo Alex
Das mit den mehreren Fragen aus der DB holen habe ich mir auch schon überlegt. Ich denke nicht, dass es soooo viele Fragen sein werden, so dass man gut alle beim ersten Aufruf in ein Array laden kann.

Kannst du mir anhand eines Beispiels an meinem Code erläutern wie ich die Funktion rekursiv aufrufen kann?
Ich habe das ganze ja schon versucht, aber wie erwähnt hat das nicht ganz geklappt.. =)
Das Problem bei meinem Beispiel sind auch jeweils die Koordinaten welche neu mit zufälligen Werten gespeist werden müssten...?

Gruss the_royal
 
Hallöle,
alsorekursiv heißt, du rufst die Funktion in der Funktion nochmal auf.
Am Beispiel deines Codes würde das wie folgt aussehen:

PHP:
<?php
count = 0;
function Aufrufen($count) {
a=0;
?>
<script type="text/javascript">
      Slide(<?php $count?>);
</script>
<?php
sleep(30); //Bzw. gewünschten Wert
$count++;
/*
folgende if-Prüfung ist nicht unbedingt notwendig, weil das Skript ja erst aufhören soll, wenn die Seite verlassen wird und da bricht es ja eh ab
*/
if($a==0) {
Aufrufen($count);
} else {}
}

//und die Funktion dann einfach aufrufen
Aufrufen($count);
?>

so ungefähr könnte das hinhauen, obwohl ich denke, dass auch hier der Fehler auftreten wird, da das Skript in einer bestimmten Zeit "durch" sein muss.
Deshalb vllt. bei ausbleibendem Erfolg mal Richtung Flash oder Ajax schauen, die dürften diese Begrenzung nicht haben, da sie nicht nur serverseitig laufen.
 
Also ich kanns nur nochmal sagen.
Sleep verwenden ist unschön.
Ein Script zu schreiben das unter Umständen in eine endlos-Schleife läuft ist unschön.

Und sorry aber eine Rekursion macht an dieser Stelle überhaupt keinen Sinn, da ein gewöhnlicher loop völlig ausreicht.
 
Zurück