CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Entwicklung und Softwaredesign Hier können strukturelle (Programmier-) Konzepte diskutiert und Projekte vorgestellt werden |
03.06.2007, 00:05:59
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
Einfache Rekursive Funktion - Ausgabe wird abgebrochen
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-Code:
<?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
|
03.06.2007, 03:49:33
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
|
03.06.2007, 12:20:46
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
Hallo,
stimmt, heute gehts bei mir auch... (liegts am Kaffee?)
Aber das eigentliche Script funzt immer noch nicht.
PHP-Code:
<?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
|
03.06.2007, 12:44:57
|
Senior Member
|
|
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
Und was geht hier bitte nicht?
Fehler?
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!
Betatester gesucht:
Skiclub Gams / CEVI Grabs
|
03.06.2007, 19:17:12
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
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
|
03.06.2007, 20:04:06
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
Zitat:
Zitat von s.heinrich
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?
|
03.06.2007, 21:29:40
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
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
Geändert von s.heinrich (03.06.2007 um 21:31:41 Uhr)
|
03.06.2007, 22:04:31
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
...Nachtrag:
Ich habe gerade das nicht abgeschlossene Script aufgerufen, ins Error-Logfile gesehen und folgende Einträge zu meinem Script gefunden:
Code:
[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
|
04.06.2007, 00:06:47
|
Anfänger
|
|
Registriert seit: Jun 2007
Beiträge: 11
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
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
|
04.06.2007, 00:11:10
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen
Zitat:
Zitat von s.heinrich
[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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:21:11 Uhr.
|