PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfache Rekursive Funktion - Ausgabe wird abgebrochen


s.heinrich
02.06.2007, 23:05:59
Hallo @all,

meine Frage betrifft die folgende Rekursive Funktion, die als Beispiel herhalten soll, um alles etwas übersichtlicher darzustellen. Das eigentliche Problemscript zeigt die gleiche Auffälligkeit. Bei mir endet die Ausgabe des Wertes ungefähr bei 1170 - nicht bei 2000 - und ich habe keine Erklärung dafür (Tests auf Apache + Win und Apache/Unix).

Die Suche im Netz war bislang erfolglos.
Ein Test auf einem anderen Server brachte auch keine Besserung.
Ressource: 32MB sollten dafür reichen ;-)
Timeout 5 Minuten (das script braucht nur bis zur letztmöglichen Ausgabe von 1170 ca. 1 Sekunde)
Ich habe etwas mit output_buffering gespielt, was aber nicht die Lösung war.


<?php
function Test(){
static $zaehler = 0;
$zaehler++;
echo $zaehler.' ';
if ($zaehler < 2000)Test ();
$zaehler--;
}
Test();
?>

Wie gesagt: es ist nur ein Beispielscript das mein Problem übersichtlich darstellt .
Wo muss ich Einträge ändern, um zu sehen, was die Funktion leisten soll - php.ini,httpd.conf?
..oder könnte ich vielleicht im Script selbst das Ergbenis verbessern?
Ich habe nicht viel Hoffnung, aber vielleicht gibts ja jemanden hier im Forum, der die Lösung kennt.

Viele Grüße und danke an die, die mir eine Weg aufzeigen können,
Sven

meikel
03.06.2007, 02:49:33
Kann ich nicht nachvollziehen:
http://test.php-help.info/test/49/

s.heinrich
03.06.2007, 11:20:46
Hallo,

stimmt, heute gehts bei mir auch... (liegts am Kaffee?)
Aber das eigentliche Script funzt immer noch nicht.

<?php
error_reporting(E_ALL);

function countChar($str,$search){
if(trim($str)==false || !strstr($str,$search))return 0;
$zeichen = array();
for ($i=0; $i<strlen($str); $i++)
if(isset($zeichen[$str{$i}]))$zeichen[$str{$i}]++;
else $zeichen[$str{$i}]=1;
return $zeichen[$search];
}
function printItem($str,$int){
echo "<code>($int) $str</code><br>\n";
return true;
}
function recSet( $ar_pool , $int_zaehler ){
// 1. Prüfung der Werte (Testlauf)
// 2. Ersetzen der Sternchen und Ausgabe
// 3. In jedem Durchlauf wird ein Satz an Zeichen für das Ersetzen
// der Sternchen im nkommenden Durchlauf erzeugt
// (Anzahl entspr. der Sternchen).
global $str_word, $ar_abc, $int_ct_stern, $int_ct_abc, $int_last_x, $int_max_item;
$int_zaehler++;
$str_word2=$str_word;//Kopie vom Orig.
$ar_curr_abc=array();//Werte für 1 Einsatz
//So oft wie Sternchen vorhanden das Array
//mit den zugewiesenen Zeichen durchlaufen
//Werte Prüfen und Zeichen in curr_abc für das folgende Ersetzen def.
for($x=0; $x<$int_ct_stern; $x++){
if(!isset($ar_pool[$x]))die(" ERROR #".__LINE__." [$x] ");
if($ar_pool[0]>=$int_ct_abc)return;//die(" Pool Ende erreicht ");
if($ar_pool[$x] == $int_ct_abc)die(" ERROR #".__LINE__." ");
if(!isset($ar_abc[$ar_pool[$x]]))die(" ERROR #".__LINE__." ");
$ar_curr_abc[$x]=$ar_abc[$ar_pool[$x]];//zeichen def.
}
//Curr Zeichensatz verarbeiten
foreach($ar_curr_abc as $k => $v){
$t=strpos($str_word2,'*');
$str_word2{$t}=$v;
if(strpos($str_word2,'*')===false)
if(printItem($str_word2,$int_zaehler)==false)
die(" ERROR #".__LINE__." ");

}
//Neuen durchlauf vorbereiten
//Rückwärts aktualisieren
//Letzter zählt immer weiter, andere nur wenn Vorgänger Reset
$ar_reset=array();//Hilfs-Array, ob 0 im Vorg. wirklich aus einem Reset erfolgte
for($x=$int_last_x; $x >= 0; $x--){
if( $ar_pool[$x]+1 == $int_ct_abc && $x!=0
&& ($x==$int_last_x || isset($ar_reset[$x+1]))){
$ar_pool[$x]=0;//Reset
$ar_reset[$x]=true;

//nur beim letzten immer +1, sonst nur wenn Vorgänger Reset
}elseif( $x==$int_last_x || $x!=$int_last_x
&& ($ar_pool[$x+1])==0 && isset($ar_reset[$x+1])){
$ar_pool[$x]++;
}
}
//Ende, wenn Grenzwert für Ausgabe erreicht
if( $int_zaehler >= $int_max_item){
return;
}else{
recSet( $ar_pool , $int_zaehler );
}
}
//*** DEFINIERE ***
$int_max_item=2000;
$str_word='a*b*c*d';// (*) Zeichen werden ersetzt (egal, wie viele)
$int_ct_stern = countChar($str_word,'*');//Anzahl Zeichen
$ar_abc=array('ä','ö','ü','ß','+','-','a','b','c','d','e'
,'f','g','h','i','j','k','l','m','n','o'
,'p','q','r','s','t','u','v','w','x','y','z');//Pool an Zeichen
//$ar_pool defin., $ar_pool[$x]=Wert, Wert wird rekur. hochgezählt
//oder ggf. zurückgesetzt
for($x=0; $x<$int_ct_stern; $x++)$ar_pool[$x]=0;
$int_ct_abc = count($ar_abc);//Anzahl Zeichen
$int_last_x = $int_ct_stern-1;// letzter Schlüssel

//*** PRINT INFO ***
echo "<p><b>$int_ct_stern</b> Sternchen gefunden.<br>
<b>$int_ct_abc</b> Zeichen stehen zur Verfügung.<br>
Das enstpricht <b>".number_format(bcpow($int_ct_abc,$int_ct_stern,0),0,'','.')
."</b> Möglichkeiten<br>
<b>$int_max_item</b> Einträge sollen ausgegeben werden.</p>\n";

//*** START ***
recSet($ar_pool,0);
echo '<div style="height:300px"></div>';//Space

?>


Ich bin gespannt auf jeden erdenklichen Hinweis!
Danke!
Sven

Opendix
03.06.2007, 11:44:57
Und was geht hier bitte nicht?
Fehler?

s.heinrich
03.06.2007, 18:17:12
Hallo,

das Script bricht bei "(1283) aöbccüd" völlig ab - nicht bei "(2000)".
Testsystem: Win XP-Pro + aktuelle Xampp-Version.

Bei dir bricht es wohl nicht ab? Auch nicht bei beispielsweise $int_max_item=4000; ?

Viele Grüße,
Sven

meikel
03.06.2007, 19:04:06
Auch nicht bei beispielsweise $int_max_item=4000; ?
Nein. http://test.php-help.info/test/49/ (... 3996 3997 3998 3999 4000)

Warum soll das Script denn "abbrechen"? Meinst Du nicht auch, daß Deine Probleme weniger mit dem Script und wesentlich mehr mit Deiner Windows-Testumgebung (wie die auch immer aussehen mag) zu tun haben?

s.heinrich
03.06.2007, 20:29:40
Hallo,
ja, du wirst Recht haben, aber wo macht eine Suche sinn?
Bei mir wird das Script nicht bis zum Ende durchlaufen
Das komplette Script (s. oben) http://www.sven-heidrich.de/test/index2.php endet bei "(1571) aöblcüd".
Läuft bei dir das Script unter http://www.sven-heidrich.de/test/index2.php bis zum Ende durch?

Danke,
Sven

s.heinrich
03.06.2007, 21:04:31
...Nachtrag:

Ich habe gerade das nicht abgeschlossene Script aufgerufen, ins Error-Logfile gesehen und folgende Einträge zu meinem Script gefunden:

[Sun Jun 03 21:00:18 2007] [notice] Parent: child process exited with status 3221225477 -- Restarting.
[Sun Jun 03 21:00:18 2007] [crit] (22)Invalid argument: unable to replace stderr with error_log
[Sun Jun 03 21:00:18 2007] [crit] (2)No such file or directory: unable to replace stderr with /dev/null
[Sun Jun 03 21:00:18 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8d mod_autoindex_color PHP/5.2.1 configured -- resuming normal operations
[Sun Jun 03 21:00:18 2007] [notice] Server built: Jan 30 2007 12:11:56
[Sun Jun 03 21:00:18 2007] [notice] Parent: Created child process 21752
[Sun Jun 03 21:00:19 2007] [notice] Child 21752: Child process is running
[Sun Jun 03 21:00:19 2007] [notice] Child 21752: Acquired the start mutex.
[Sun Jun 03 21:00:19 2007] [notice] Child 21752: Starting 250 worker threads.
[Sun Jun 03 21:00:19 2007] [notice] Child 21752: Starting thread to listen on port 443.
[Sun Jun 03 21:00:19 2007] [notice] Child 21752: Starting thread to listen on port 80.

Ich kanns nicht nachvollziehen. Wo ist der Haken?
Vielen Dank,
Sven

s.heinrich
03.06.2007, 23:06:47
Hallo,

nach dem ich bei einem versierten Systembetreuer nachfragte, gab er mir Recht:

ICH: ...oder sehen Sie sogar die 4000 items? Vielleicht liegts an meinem System (Browser)?
ER: Das gleiche Problem habe ich hier auch. Sowohl mit IE, als auch mit Firefox. Manchmal zeigt er mir bis Zeile 1059 was an, mal bis 2083 und manchmal reloaded der Browser auf "Webseite kann nicht angezeigt werden".

ICH: Was steht im error_log?
ER: Rein gar nichts! Keine Fehlermeldung oder ähnliches.

ICH: Kennen Sie solch ein Problem?
ER: Ist mir bisher noch nicht aufgefallen. Einige Applikationen die wir entwickelt haben, schmeissen bis zu 15000 Zeilen im Webbrowser ohne Probleme aus. Daher scheint es irgendetwas im Code zu sein, was dieses Verhalten aufwirft.

Läuft das ausführliche Script überhaupt bei jemanden bis zum Ende durch?

Danke und Grüße,
Sven

meikel
03.06.2007, 23:11:10
[Sun Jun 03 21:00:18 2007] [crit] (22)Invalid argument: unable to replace stderr with error_log
[Sun Jun 03 21:00:18 2007] [crit] (2)No such file or directory: unable to replace stderr with /dev/null
[Sun Jun 03 21:00:18 2007] [notice] Apache/2.2.4 (Win32) DAV/2 mod_ssl/2.2.4 OpenSSL/0.9.8d mod_autoindex_color PHP/5.2.1 configured -- resuming normal operations

Ich kanns nicht nachvollziehen. Wo ist der Haken?
Fehlerhafte Apache u/o PHP Konfiguration: unter Windows gibt es kein Verzeichnis /dev/null.
PHP will meckern, findet aber die typischen Linux Pfade unter Windows nicht.

Sieh im phpinfo() nach, ob und wenn ja mit welcher php.ini das Modul gestartet wurde.

s.heinrich
04.06.2007, 09:17:12
Hallo,

das Problem wurde zwar nicht gelößt, aber der Weg zum Ziel ist nun leider ein anderer. Es ist nicht das, was ich wollte... aber wenigstens gehts auf die Weise.
Bitte fragt mich nicht, warum es mit einer while-Schleife geht und eine rekursive Funktion scheitert, denn nichts anderes habe ich getan (tun müssen).

Offensichtlich ein Apache-Bug
So werden alle Items angezeigt:
<?php
error_reporting(E_ALL);

function countChar($str,$search){
if(trim($str)==false || !strstr($str,$search))return 0;
$zeichen = array();
for ($i=0; $i<strlen($str); $i++)
if(isset($zeichen[$str{$i}]))$zeichen[$str{$i}]++;
else $zeichen[$str{$i}]=1;
return $zeichen[$search];
}
function printItem($str,$int){
echo "<code>($int) $str</code><br>\n";
return true;
}

//*** DEFINIERE ***
$int_max_item=4000;
$str_word='a*b*c*d';// (*) Zeichen werden ersetzt (egal, wie viele)
$int_ct_stern = countChar($str_word,'*');//Anzahl Zeichen
$ar_abc=array('ä','ö','ü','ß','+','-','a','b','c','d','e'
,'f','g','h','i','j','k','l','m','n','o'
,'p','q','r','s','t','u','v','w','x','y','z');//Pool an Zeichen
//$ar_pool defin., $ar_pool[$x]=Wert, Wert wird rekur. hochgezählt
//oder ggf. zurückgesetzt
for($x=0; $x<$int_ct_stern; $x++)$ar_pool[$x]=0;
$int_ct_abc = count($ar_abc);//Anzahl Zeichen
$int_last_x = $int_ct_stern-1;// letzter Schlüssel
$int_zaehler = 0;

//*** PRINT INFO ***
echo "<p><b>$int_ct_stern</b> Sternchen gefunden.<br>
<b>$int_ct_abc</b> Zeichen stehen zur Verfügung.<br>
Das enstpricht <b>".number_format(bcpow($int_ct_abc,$int_ct_stern,0),0,'','.')
."</b> Möglichkeiten<br>
<b>$int_max_item</b> Einträge sollen ausgegeben werden.</p>\n";

//*** START ***
while ( $ar_pool[0] < $int_ct_abc ) {
// 1. Prüfung der Werte (Testlauf)
// 2. Ersetzen der Sternchen und Ausgabe
// 3. In jedem Durchlauf wird ein Satz an Zeichen für das Ersetzen
// der Sternchen im nkommenden Durchlauf erzeugt
// (Anzahl entspr. der Sternchen).
$int_zaehler++;
$str_word2=$str_word;//Kopie vom Orig.
$ar_curr_abc=array();//Werte für 1 Einsatz
//So oft wie Sternchen vorhanden das Array
//mit den zugewiesenen Zeichen durchlaufen
//Werte Prüfen und Zeichen in curr_abc für das folgende Ersetzen def.
for($x=0; $x<$int_ct_stern; $x++){
if(!isset($ar_pool[$x]))die(" ERROR #".__LINE__." [$x] ");
if($ar_pool[0]>=$int_ct_abc)return;//die(" Pool Ende erreicht ");
if($ar_pool[$x] == $int_ct_abc)die(" ERROR #".__LINE__." ");
if(!isset($ar_abc[$ar_pool[$x]]))die(" ERROR #".__LINE__." ");
$ar_curr_abc[$x]=$ar_abc[$ar_pool[$x]];//zeichen def.
}
//Curr Zeichensatz verarbeiten
foreach($ar_curr_abc as $k => $v){
$t=strpos($str_word2,'*');
$str_word2{$t}=$v;
if(strpos($str_word2,'*')===false)
if(printItem($str_word2,$int_zaehler)==false)
die(" ERROR #".__LINE__." ");

}
//Neuen durchlauf vorbereiten
//Rückwärts aktualisieren
//Letzter zählt immer weiter, andere nur wenn Vorgänger Reset
$ar_reset=array();//Hilfs-Array, ob 0 im Vorg. wirklich aus einem Reset erfolgte
for($x=$int_last_x; $x >= 0; $x--){
if( $ar_pool[$x]+1 == $int_ct_abc && $x!=0
&& ($x==$int_last_x || isset($ar_reset[$x+1]))){
$ar_pool[$x]=0;//Reset
$ar_reset[$x]=true;

//nur beim letzten immer +1, sonst nur wenn Vorgänger Reset
}elseif( $x==$int_last_x || $x!=$int_last_x
&& ($ar_pool[$x+1])==0 && isset($ar_reset[$x+1])){
$ar_pool[$x]++;
}
}
//Ende, wenn Grenzwert für Ausgabe erreicht
if( $int_zaehler >= $int_max_item)break;
}
echo '<div style="height:300px"></div>';//Space
?>

Viele Grüße und danke an die, die mir antworteten,
Sven

feuervogel
04.06.2007, 09:46:29
Offensichtlich ein Apache-Bug


So wie es aussieht es ist Dein Windows-System, welches fehlerhaft konfiguriert wurde. Also mal wieder ein Pebcak.

s.heinrich
04.06.2007, 10:18:08
Hallo,

So wie es aussieht es ist Dein Windows-System, welches fehlerhaft konfiguriert wurde. Also mal wieder ein Pebcak.

So wie es aussieht funktioniert das ausführliche Script bei dir prächtig und es wurde wieder mal eine Schublade geöffnet und geschlossen. Man kann sich's auch leicht machen...

Ich möchte dich noch auf Beitrag #9 hinweisen. Die Person, die ich um eine Einschätzung bat sitzt auf mehreren UNIX-Systemen und sieht die gleichen Probleme wie ich mit Apache auf WIN.

Warum gehts rekursiv nicht, aber mit while? Ich habe das Script selbst in den oben stehenden 2 Versionen auf einen Account hochgeladen und getestet - online(Linux/Apache) die gleichen Ergebnisse wie Lokal (Win/Apache). Das tat ich bevor ich den Experten zu Rate zog.

Danke für dein Interesse und die unangebrachte Häme.
Sven

feuervogel
04.06.2007, 10:48:02
Ich möchte dich noch auf Beitrag #9 hinweisen. Die Person, die ich um eine Einschätzung bat sitzt auf mehreren UNIX-Systemen und sieht die gleichen Probleme wie ich mit Apache auf WIN.


Dann kann eben der auch Windows nicht administrieren.


Warum gehts rekursiv nicht, aber mit while?

Weil Rekursion bekannterweise mehr Ressourcen verschlingt als Iteration, die offentsichlich auf den Systemen, bei denen der Fehler auftritt, nicht zur Verfügung stehen.

Und brauchst Dich nicht über unangebrachte Häme zu beschweren, wenn Du Deine Probleme einfach auf den Apache schiebst, der auch nichts für Deine config kann.

s.heinrich
04.06.2007, 18:11:05
Hallo,

Dann kann eben der auch Windows nicht administrieren.
Mit verurteilen sind wir schnell...Klasse! (es sind bei ihm Linux-Server)

Weil Rekursion bekannterweise mehr Ressourcen verschlingt als Iteration, die offentsichlich auf den Systemen, bei denen der Fehler auftritt, nicht zur Verfügung stehen. Und brauchst Dich nicht über unangebrachte Häme zu beschweren, wenn Du Deine Probleme einfach auf den Apache schiebst, der auch nichts für Deine config kann.
Ja, ich hätte lieber PHP als Sündenbock hernehmen sollen. Schön, dass du JETZT die Ressourcen ansprichst, nachdem das Script bei dir auch nicht läuft...

So wie es aussieht es ist Dein Windows-System, welches fehlerhaft konfiguriert wurde. Also mal wieder ein Pebcak.
Da es beim besagten Systembetr. auch nicht ging, und in seinem error-log kein Eintrag zu sehen war, hat er meinen Code an einen Guru weitergesendet. Von einer falschen Konfiguration kann ich aber mein besten Will nichts in der Begründung sehen/lesen, was ja bislang dein Argument ist/war:

Es liegt an der rekursiven Funktion: Jeder Aufruf bewirkt eine Reservierung von Speicher im sog. Stack. Sichtbar ist hierbei immer nur die oberste Stackebene. Dieser Stack muss sich mit dem eigentlichen Programm (also dem Script und dem Parser mod_php) den Speicher teilen. Würde man sich das Ganze mit einem Debugger ansehen, würde man feststellen, dass der Speicherbedarf nicht linear, sondern zyklisch anwächst. Es wird mit jedem Zyklus (rekursivem Aufruf) nicht nur die Funktion, sondern auch das Ergebnis samt Variablen der Funktion abgelegt.

PHP ist nun so ausgelegt, dass es "selbständig" nach einer Weile feststellt (oder glaubt festzustellen), wenn ein rekursiver Aufruf in einer Endlosschleife enden würde, da keine Abbruchbedingung innerhalb der Rekursivfunktion hinterlegt ist. Und genau das ist der Knackpunkt: Je nach Auslastung des Speichers begrenzt PHP die Durchläufe einer solchen rekursiven Funktion. So sollte man bei mehr als 500 rekursiven Aufrufen auf Iterationen umsteigen (also while, for-next, do-until, etc.), da diese bei solchen Mengen bis zu 800% schneller abgearbeitet werden, als rekursive Aufrufe einer Funktion.

Wäre dies deine Antwort gewesen, dann: Hut ab!
Viel Spaß noch mit den Hilfesuchenden,
Sven

PS: Manche müssen erst nach unten treten um zu wachsen.

meikel
04.06.2007, 19:32:08
So wie es aussieht funktioniert das ausführliche Script bei dir prächtig und es wurde wieder mal eine Schublade geöffnet und geschlossen. Man kann sich's auch leicht machen...
Auf einen Konfigurationsfehler hatte ich Dich ja hingewiesen. Offenbar vergeblich...

Da es beim besagten Systembetr. auch nicht ging, und in seinem error-log kein Eintrag zu sehen war, hat er meinen Code an einen Guru weitergesendet. Von einer falschen Konfiguration kann ich aber mein besten Will nichts in der Begründung sehen/lesen,
Der hatte ja auch nicht gesehen, daß Du auf einer Windowskiste PHP gesagt hattest, es möchte sein error_log nach /dev/null schicken.

Wäre dies deine Antwort gewesen, dann: Hut ab!
Meine Fresse! Das muß Dir doch der gesunde Menschenverstand sagen, daß der mehrfache Aufruf einer Funktion mehr Speicher frißt als eine lumpige Schleife, die durch ein Array latscht.

Ich selber verwende Rekursionen bis maximal 10 Ebenen, weil mir dazu der RAM einfach zu schade ist.

feuervogel
04.06.2007, 22:54:52
Schön, dass du JETZT die Ressourcen ansprichst, nachdem das Script bei dir auch nicht läuft...

hm, mit 2000 schritten läuft es. versuche ich es mit 100000, bricht es irgendwo hinter der 16000 ab. im error-log meines apaches steht:


[Mon Jun 04 22:41:44 2007] [notice] child pid 6213 exit signal Segmentation fault (11)


bemüht man nun google ein wenig, findet man folgendes:


The problem with PHP isn't so much that there is a limit to the amount of recursion. Instead it is that the interpreter has a Segmentation Fault when the function stack is full, causing PHP to crash.


es gibt also eine limitierung was die menge der rekursiven schritte angeht. die sitzt bei dir offentsichtlich zu niedrig, für das, was du vorhast, und zudem gibt es keine gescheiten einträge in deinem error-log. ich hab keine ahnung, wo meine grenze genau sitzt, da ich rekursion möglichst meide.


Da es beim besagten Systembetr. auch nicht ging, und in seinem error-log kein Eintrag zu sehen war,


dann lies entweder meikels postings oder versuche mal /dev/null zu finden auf deiner kiste.

s.heinrich
04.06.2007, 23:09:05
...moment

s.heinrich
05.06.2007, 00:12:47
Hallo,

@meikel
>>Auf einen Konfigurationsfehler hatte ich Dich ja hingewiesen. Offenbar um sonst...<<
Nein! Ich habe stundenlang gegooglet und nach Lösungen oder hinweisen gesucht, also Infos zum Quell "des Übels". Nach wenig konstruktiven Infos wollte ich einen anderen Weg zur Fehlersuche einschlagen (die Hartnäckigkeit entschuldigend): Wenns bei anderen geht und die Linux einsetzen, dann Frage ich doch einen, der Linux hat und vielleicht ein wenig Zeit investieren würde, um in sein Log reinzuschauen. Euch wollte ich nicht damit belästigen. Er machte dies und sah ebenso wie ich Abbrüche und keinen Fehler im error_log, kennt aber einen Guru recht gut. Also schickte er die Daten weiter und zurück kam der erste klärende Text.

>>Der hatte ja auch nicht gesehen, daß Du auf einer Windowskiste PHP gesagt hattest, es möchte sein error_log nach /dev/null schicken.<<
Ja, er kannte nur das Linux-System meines "Probanten" (der mit den gleichen Abbrüchen).

>>Meine Fresse! Das muß Dir doch der gesunde Menschenverstand sagen, daß der mehrfache Aufruf einer Funktion mehr Speicher frißt als eine lumpige Schleife, die durch ein Array latscht. Ich selber verwende Rekursionen mis maximal 10 Ebenen, weil mir dazu der RAM einfach zu schade ist.<<
Nicht meine Form etwas auszudrücken, aber hilfreich! Diese Aussage hätte mir den Wechsel zur while-Schleife leichter gemacht und ein paar Stunden gespart. Kaum auszumalen, in welchem Zustand mein Verstand sein muss. Sorry, dass ich mit meinem kleinen Problem hier aufschlage. Wenn doch jeder des Rätsels Lösung wissen müsste hätt ichs doch beim googlen finden müssen.

@feuervogel
Danke für die Info. Die Suche habe ich eingestellt, denn mit der while-Schleife sind keine error_log-Einträge zu sehen (nicht mal in meinem WIN-Sys) und wie ich jetzt lernen durfte, sind Schleifen den Funktionen bei sehr vielen Aufrufen vorzuziehen.

Viele Grüße und danke für Eure Zeit,
Sven Heidrich

PS: Ein fairer Umgang ist sicherlich etwas Zeitintensiver - bringt aber erfahrungsgemäß auf lange Sicht ein gutes Klima ins Forum.

meikel
05.06.2007, 01:21:49
Nicht meine Form etwas auszudrücken, aber hilfreich!
Erfreulich. Denke immer daran, daß Deine Scripte auf einem gut besuchten Webserver mehrfach aufgerufen werden. Da muß man neben der Scriptlaufzeit auch mit dem Speicher sparen. Es sieht nicht besonders gut aus, wenn nach 10 sec. nur noch eine Fehlermeldung angezeigt werden kann...

Natürlich hast Du in gewisser Beziehung recht, wenn Du von einem Bug sprichst, weil PHP den Stackpointer mangelhaft verwaltet.

Viele Grüße und danke für Eure Zeit,
Viel Erfolg noch!