php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.10.2011, 10:49  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
ad_mf80 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Fatal error: Maximum execution time

Hallo Leute,

ich bin immernoch nicht so fit, wie ich es gerne wäre, deshalb poste ich mal Euch meine Frage:

Ich habe mittels PHP, MySQL eine Art Kalender programmiert. Im Kalender gibt es verschiedene Kategorien der Termine, wie z.B. unwichtig, "wichtig" usw. - Mit dem Kalender funktioniert alles wunderbar.
Nun möchte ich immer das so machen, dass auf der Startseite nur der nächste "wichtige" Termin angezeigt wird. Allerdings geht das bis jetzt noch nicht so richtig. Ich bekomme immer dann nur die Meldung: Fatal error: Maximum execution time of 30 seconds exceeded in ... on line ... - Bei den Datenmengen ist es aber auch nicht unbedingt so erstauntlich, dass da eine Zeitüberschreitung vorhanden ist.
Kann ich da was dran ändern oder muss ich mir die alternative Variante überlegen, die "nächster Termin"-Ausgabe mittels einer seperaten Datenbank zu machen?

Hier mein Script (ungefähr):

Code:
$count=0;

$akt_Datum = date("Ymd");

$con =  mysql_connect($dbserver, $dbuser, $dbpass);
$db =  mysql_select_db("$dbname");
$res =  mysql_query("SELECT * FROM Kalender order by Anfang ASC, Ende ASC");

while($row =  mysql_fetch_array($res)) 

	{
          $anfang_datum = $row['Anfang'];
          $ende_datum = $row['Ende'];

          if ($row['Kategorie'] == "wichtig")

	          {
			while($count < 1) 
				
				{
				if ($akt_Datum <= $ende_datum)

					{
						echo $row['Titel']; 
						$count++;
					}
				}
			}
	}

Geändert von ad_mf80 (20.10.2011 um 10:58 Uhr).
ad_mf80 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.10.2011, 11:10  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

ungefähr scheint mir hier nicht den fehler zu reproduzieren..

In dem Code ist erstmal nix, das in irgendeiner Form dein Execution-Time-Limit überschreiten könnte, es sei denn dein Select hätte ein Paar tausend Rows.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   Mit Zitat antworten
Alt 20.10.2011, 11:14  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
ad_mf80 befindet sich auf einem aufstrebenden Ast
Standard

im Moment sind es (noch) 96 Datensätze in der Kalender-Tabelle mit 4 verschiedenen Kategorien...

wegen ungefähr: es gibt noch zwischendrin zwei IF-Abfragen, ob das Enddatum dem Anfangsdatum entspricht. - Wenn nicht, werden beide Tage mittels echo ausgegeben, sonst nur eins. - Diese Programmzeile habe ich zwar oben nicht reingeschrieben aber ich habe es auch schon mal als "Test" rausgelassen und das hat an dem Problem nichts geändert.

Geändert von ad_mf80 (20.10.2011 um 11:18 Uhr).
ad_mf80 ist offline   Mit Zitat antworten
Alt 20.10.2011, 11:18  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Joa, ist nur ne Sache wie du das zukünftig realisieren willst, stell dir vor du hast 50000-60000 Termine in der Tabelle, willst du die alle auf die Seite patschen ? Ich würde da definitiv mit Limits arbeiten. Ich könnte mir vorstellen das deine innere while ins unendliche läuft, und die Bedingung davon nicht erfüllt wird. Schau das du eine Feste Menge an Daten zusammenstellst und über diese traversierst ( per foreach ).
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   Mit Zitat antworten
Alt 20.10.2011, 11:35  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

genau - je nach Umfang der Tabelle, stellt vielleicht der Datentransfer zu PHP den Flaschenhals dar - du lässt dir ALLE Termine , von jedem User liefern und "ackerst" dann per PHP darauf herum - in Schleife(n) .. das ist suboptimal .. lass die Datenbank ein wenig mehr schwitzen, und dir dafür gleich die in frage kommenden Termine liefern.

und prüfe auch gleich in der Datenbank, ob kategorie="wichtig" am Termin dransteht .. das sollte zusammen mit Limit den Zeitaufwand deutlich reduzieren. Wenn du dann noch das aktuelle Datum mit übergibst, so dass die Datenbank auch nur noch Termine von "Jetzt" bis in die Zukunft betrachtet .... naja du siehst, da gibts Optimierungspotential ohne Ende ...

Grobe Richtung : Lass soviel wie möglich von der Datenbank erledigen, du bist in php auf jeden Fall langsamer als die hochoptimierten C-Routinen eines anständig programmierten Datenbank-Systems
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 20.10.2011, 11:41  
Erfahrener Benutzer
 
Registriert seit: 22.07.2004
Beiträge: 226
DirkHo befindet sich auf einem aufstrebenden Ast
Standard

Warum holst du dir nicht von vornherein NUR die Termine die wichtig sind (WHERE clause prio = "wichtig")? Das würde die Datenmege und die Ausführungszeit schon mal eingrenzen.

Wenn du dann noch ein Limit setzt hast du schon alle Daten die du brauchst und musst nur noch dafür sorgen, dass sie formatiert ausgegeben werden.
DirkHo ist offline   Mit Zitat antworten
Alt 20.10.2011, 12:00  
Erfahrener Benutzer
 
Registriert seit: 28.06.2009
Beiträge: 109
PHP-Kenntnisse:
Fortgeschritten
eisenhans befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ad_mf80 Beitrag anzeigen
Code:
$count=0;


while($row =  mysql_fetch_array($res)) 

	{

          if ($row['Kategorie'] == "wichtig")

	          {
			while($count < 1) 
				
				{
				if ($akt_Datum <= $ende_datum)

					{
						echo $row['Titel']; 
						$count++;
					}
				}
			}
	}
Also der Code, den Du hier postest erzeugt bei mir den Verdacht: Endlosschleife !
Vor allem while($count<1)
__________________
Webstammtisch Oldenburg
eisenhans ist offline   Mit Zitat antworten
Alt 20.10.2011, 12:17  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
ad_mf80 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von eisenhans Beitrag anzeigen
Also der Code, den Du hier postest erzeugt bei mir den Verdacht: Endlosschleife !
Vor allem while($count<1)
Hast Du das count++ gesehen?

Code:
<?php

$count = 0;

while($count < 1) 
				
	{
 
		$count++;

		echo "Count = "; echo $count; echo "<br>";
	
	}

?>
Ausgabe: Count = 1

genau das gleiche Prinzip! Wo ist da die Endlosschleife...?

AN ALLE ANDEREN:
Habe die Ausgabe der Datenbank mittels where Kategorie="schwer" eingegränzt... Immernoch das gleiche Problem... Andere Kommentare verstehe ich grade auch nicht so!
ad_mf80 ist offline   Mit Zitat antworten
Alt 20.10.2011, 12:31  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

du hast da jetzt eine Vereinfachung vorgenommen , die den Sinn deines Codes verfälscht - denn count++ wird nur unter einer ganz bestimmten Bedingung erreicht (im ursprünglichen Code) ... und es gibt offensichtlich Datensätze, wo diese bestimmte Bedingung nie erfüllt wird - und dann wird auch count++ nicht durchlaufen ergo -> Endlosschleife....

du müsstest wohl die Abfrage des While modifizieren, um einen gewünschten Abbruch zu erreichen (vielleicht, wenn alle Datensätze durchlaufen wären) -

aber eigentlich komplett unnötig - lass die Prüfungen auch von der Datenbank machen, soweit möglich .. dann stolperst du nicht über solche SELBST AUFGESTELLTEN Tretminen

im Zweifel - lass dir mit einem einfachen
PHP-Code:
echo '<pre>';
var_dump($row);
echo 
'</pre>'
mal ausgeben, wie dein Datensatz aussieht
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 20.10.2011, 12:43  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 5
PHP-Kenntnisse:
Anfänger
ad_mf80 befindet sich auf einem aufstrebenden Ast
Standard

Man bin ich doof! Einfach mal die if ($akt_Datum <= $ende_datum) vor der while($count < 1) gesetzt und schon geht es!!!
ad_mf80 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fatal error: Maximum execution time Willi0815 PHP Einsteiger 5 10.03.2011 13:42
Fatal Error nicht in bash durchhreichen starwhooper PHP-Fortgeschrittene 10 17.10.2010 14:30
Fatal error: Maximum execution ... in Swiftmailer 4.0.3 ... Hilfe!? Faror PHP Tipps 2010 9 25.08.2010 14:32
Time out Problem? Frutz PHP Tipps 2010 2 19.08.2010 20:14
[Erledigt] Swiftmailer Fatal Errors sinnvoll!? d0ne PHP-Fortgeschrittene 2 21.04.2010 16:44
execution time Colophoniaz PHP Tipps 2010 3 02.04.2010 01:37
Maximum Execution Time umgehen chunky PHP Tipps 2010 2 19.02.2010 10:34
Fatal error: Maximum execution time of bei xampp themonk PHP Tipps 2009 19 07.01.2010 17:44
[Erledigt] Fatal error: Maximum execution time of 20 seconds exceeded in??? Kocgiri PHP Tipps 2009 4 17.12.2009 09:44
[Erledigt] Joomla php fatal error EinNickname PHP Tipps 2009 7 13.07.2009 11:32
[Erledigt] Hilfe bei WHERE Anweisung mit time format ivkin Datenbanken 11 26.06.2009 05:22
Maximum execution time of 60 seconds Ponton PHP Tipps 2008 18 31.10.2008 09:53
Maximum execution time of 60 seconds exceeded lindner PHP Tipps 2006 3 25.07.2006 22:46
execution time karl PHP Tipps 2007 4 15.12.2005 11:18
Fatal error: Maximum execution time of 30 seconds exceeded nicobischof PHP Tipps 2005-2 15 11.08.2005 18:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
maximum execution time of 30 seconds exceeded, maximum execution time of 30 seconds exceeded in php, \fatal error: maximum execution time of 30 seconds exceeded in\ abfangen, php fatal error: maximum execution time abfangen, maximum execution time of 30 seconds exceeded in, fatal error maximum execution time of 60 seconds exceed bei abfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum