SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Entwicklung und Softwaredesign

PHP Entwicklung und Softwaredesign Hier können strukturelle (Programmier-) Konzepte diskutiert und Projekte vorgestellt werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.06.2007, 00:05:59
s.heinrich s.heinrich ist offline
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
Mit Zitat antworten
  #2  
Alt 03.06.2007, 03:49:33
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Einfache Rekursive Funktion - Ausgabe wird abgebrochen

Kann ich nicht nachvollziehen:
http://test.php-help.info/test/49/
Mit Zitat antworten
  #3  
Alt 03.06.2007, 12:20:46
s.heinrich s.heinrich ist offline
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]+== $int_ct_abc && $x!=
            
&& ($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])==&& 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
Mit Zitat antworten
  #4  
Alt 03.06.2007, 12:44:57
Opendix Opendix ist offline
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
Mit Zitat antworten
  #5  
Alt 03.06.2007, 19:17:12
s.heinrich s.heinrich ist offline
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
Mit Zitat antworten
  #6  
Alt 03.06.2007, 20:04:06
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
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 Beitrag anzeigen
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?
Mit Zitat antworten
  #7  
Alt 03.06.2007, 21:29:40
s.heinrich s.heinrich ist offline
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)
Mit Zitat antworten
  #8  
Alt 03.06.2007, 22:04:31
s.heinrich s.heinrich ist offline
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
Mit Zitat antworten
  #9  
Alt 04.06.2007, 00:06:47
s.heinrich s.heinrich ist offline
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
Mit Zitat antworten
  #10  
Alt 04.06.2007, 00:11:10
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
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 Beitrag anzeigen
[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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Einfache ausgabe und berechnung? Distructive HTML, CSS und JavaScript Help! 3 01.02.2007 16:38:53
Rekursive Funktion Nena PHP Grundlagen 3 07.02.2006 12:08:05
Rekursive Funktion + Array Funjoy PHP für Fortgeschrittene und Experten 1 23.01.2006 13:23:30
bestimmte html ausgabe joker PHP Grundlagen 2 15.11.2004 22:37:56
rekursive funktion ( baumstruktur sortieren ) Redoc PHP für Fortgeschrittene und Experten 3 10.10.2003 15:16:53


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt