hmm: php webservice geht manchmal und manchmal nicht.... grund?

0 50

php webservice geht manchmal und manchmal nicht.... grund?

hmm
  • php
  1. 0
    hmm
  2. 0
    Jörg Reinholz
    1. 0
      hmm
      1. 0
        dedlfix
        1. 0
          hmm
          1. 0
            Jörg Reinholz
            1. 0
              hmm
              1. 0
                Der Martin
                1. 0
                  hmm
                  1. 0
                    Der Martin
                    1. 0
                      Jörg Reinholz
                      1. 0
                        hmm
          2. 0
            dedlfix
      2. 0
        Jörg Reinholz
        1. 0
          hmm
          1. 0
            hmm
            1. 0
              Jörg Reinholz
              1. 0
                hmm
                1. 0
                  Jörg Reinholz
              2. 0
                Der Martin
                1. 0
                  hmm
                  1. 0
                    Jörg Reinholz
                    1. 0
                      hmm
                      1. 0
                        Jörg Reinholz
                        1. 0
                          hmm
                          1. 0
                            Jörg Reinholz
                            1. 0
                              hmm
                              1. 0
                                Jörg Reinholz
                                1. 0

                                  Fischi

                                  Camping_RIDER
                                  • meinung
                                  • menschelei
                                  • offtopic
                                  1. 0
                                    Jörg Reinholz
                                    1. 0
                                      Der Martin
                                      1. 0
                                        Jörg Reinholz
                                        1. 0
                                          Der Martin
                          2. 3
                            dedlfix
                            1. 1
                              Jörg Reinholz
                              1. 1
                                dedlfix
                                1. 0
                                  Jörg Reinholz
                                  1. 0
                                    Jörg Reinholz
                                    1. 0
                                      hmm
                                      1. 0
                                        Jörg Reinholz
                                        1. 0
                                          Jörg Reinholz
                                          1. 0
                                            Hmm16.05
                                            1. 0
                                              Hmm16.05
                                              1. 0
                                                Jörg Reinholz
                                                1. 0
                                                  hmm
                                                  1. 0
                                                    Jörg Reinholz
                                      2. 0
                                        dedlfix
                                        1. 0
                                          hmm
                                        2. 0
                                          Jörg Reinholz

hallo leute,

ich habe einen webservice in php geschrieben, welchen ich mit c# aufrufe.

das tolle ist, dass ich bei beim jedem aufruf über c# mit einer jeweils unterschiedlich gewichteten Chance einen der folgenden outputs erhalte:

  1. das gewünschte ergebenis wird zurück gegeben

  2. oder ich bekomme: Der vom Client gefundene Anforderungsinhaltstyp ist 'text/html', erwartet wurde 'text/xml'.

  3. oder ich bekomme: Die Antwort ist kein wohlgeformter XML-Code.

hier mein c# aufruf:

            TestKlasse.MC mc = new TestKlasse.MC();
            //mc.Timeout = 1000000000;

            string timeline = "1;2;3";
            for (int i = 1; i < 200; i++)
            {
                timeline += ";" + i.ToString();
            }

            string s = mc.testKlasse("root", "pw", "10000", timeline, "40");
         
            MessageBox.Show(s);
            textBox1.Text = s;

und hier mein php (ja ich kann kein php) code:

<?php


function _checkID($name, $pw){
//TODO

return 1;
}



function testKlasse($name, $pw, $anzahlSimulationen, $timeline, $prognoseHorizont){

	if(doubleval($anzahlSimulationen) != 10000 || doubleval($prognoseHorizont) != 40){//abfrage ob parameter veraendert wurden
		return "ErrorParams";
	}
	else if(_checkID($name,$pw)==1){
	
		$a_line = explode(";",$timeline);
		$lastValue = $a_line[count($a_line)-1];
		$logDiff = _logDiff($a_line);
		$a_line = null;
		
		
		$arrayWithChains = _generateZV($anzahlSimulationen, $logDiff, 20); //berechnet 20 log wachstumsraten
		
		//testaufruf
		return implode(",",$arrayWithChains);
		//testaufruf end
		
		$output = ""; // string mit - getrennt, die wiederum die einzelnen werte der simulationen enthalten die mit ; getrennt sind
		
		for($d=1; $d<=100; $d++){//100 durchlaeufe, bzw simulationen
		
			if($d !=1){
				$output[$d] += "-";
			}
		
			$wert = $lastValue;
			for($h=1; $h<=intval($prognoseHorizont);$h++){//durchlaufe horizont
				$rand_keys = array_rand($anzahlSimulationen, 1);
				$wert = $wert * exp($anzahlSimulationen[$rand_keys[0]]);
				
				$output += strval($wert);
				if($h<intval($prognoseHorizont)){
					$output += ";";
				}
			}
		}
		
		return output;
	}	
	else {
		return "null";
	}
}











//----------HILFSFUNKTIONEN--------//
function _logDiff($timeline){

	$logDiff = array();
	
	for($i=0; $i<=count($timeline)-2;$i++){
		$logDiff[$i] = log(doubleval($timeline[$i+1])) - log(doubleval($timeline[$i]));
	}
	
	return $logDiff;
}



function _metropolisHastings($startvalue, $iterations, $x, $horizont){
		
	$spline = _gaussDichte($x);
	$chain = array();
	$chain[0] = $startvalue;
	$ew = _mean($x);
	
	$s = 0;
	for($i=0; $i<=count($x)-1;$i++){
		$s += pow($x[$i]-$ew ,2);
	}
	$s = sqrt($s/(count($x)-1));

	$horizont = intval($horizont);
	$iterations = intval($iterations) - 1;
	for($i=0; $i<=$iterations ; $i++){
	
		$proposal = _generateNormZV($ew, $s)[1];
				
		$probab = min(1,($spline->value($proposal) * _dichteNorm($chain[$i],$ew,$s) / ($spline->value($chain[$i]) * _dichteNorm($proposal,$ew,$s))));
		
		if(_generateNormZV($ew, $s)[1] < $probab)
		{
		  $chain[$i +1] = $proposal;
		}
		else
		{
		  $chain[$i +1] = $chain[$i];
		}
	}
	
  $rand_keys = array_rand($chain, $horizont);
  $out = array();  
 
  for($i=0; $i<=count($rand_keys)-1; $i++){
	$out[$i] = $chain[$rand_keys[$i]];
  }
  
  return($out);
}


function _generateNormZV($mueh, $sigma) { 
	
    do{ 
      $y1 = mt_rand()/ mt_getrandmax(); 
      $y2 = mt_rand() / mt_getrandmax(); 
      $q = pow(2 * $y1 - 1, 2) + pow(2 * $y2 - 1, 2); 
    } 
    while ($q > 1); 
 
    $p = sqrt((-2 * log($q)) / $q); 
	
    $z1 = (2 * $y1 - 1) * $p; 
    $z2 = (2 * $y2 - 1) * $p; 

	$r = array($sigma * $z1 + $mueh, $sigma * $z2 + $mueh); 
	return $r;
  } 
  
  
  
function _dichteNorm($zv, $mueh, $sigma){

	if($sigma == 0){
		return 0;
	}
	else{
		$b = ($zv - $mueh)/$sigma;
		return (exp(- 1/2 * ($b * $b)) / ($sigma * sqrt(2 * pi())) );
	}
}



function _generateZV($iterationen, $x, $horizont)
{
	$r = _metropolisHastings(_mean($x), $iterationen, $x, $horizont);
  
	return $r;
}



function _mean($arr)
{
	$summe = array_sum($arr);
	$anzahl = count($arr);
	$durchschnitt = $summe / $anzahl;
	return $durchschnitt;
}



/**
*	Schaetzt die Kerndichte von n zufallsvariablen x1,...,xn, mit der Gausskernfunktion und einem optimalen Gaussbantbreitenschaetzer.
*	Gibt ein spline objekt zurueck.
*/
function _gaussDichte($x){

	$def = array();
	$bild = array();
	
	$ew = _mean($x);
	
	$s = 0;
	for($i=0; $i<=count($x)-1;$i++){
		$s += pow($x[$i]-$ew ,2);
	}
	$s = sqrt($s/(count($x)-1));
	
	$h = pow((4*pow($s,5))/(3*count($x)) ,1/5);
		
	//berechne bilder der gausskernfunktion
	sort($x);
	if(count($x) > 100){
	
		$rand_keys = array_rand($x, 100);
		for($i=0; $i<=count($rand_keys)-2; $i++){
			$def[$i+1] = $x[$rand_keys[$i]];
		}
		
		sort($def);
		
		$def[0] = $x[0];
		$def[count($def)] = $x[count($x)-1];
	}
	else{
		$def = $x;
	}
	
	for($i=0; $i<=count($def)-1; $i++){
		
		$bild[strval($def[$i])] = 0;
		
		for($k=0; $k<=count($def)-1; $k++){
			$bild[strval($def[$i])] += exp(-1/2 * pow(($def[$i] - $def[$k])/$h, 2)) / sqrt(2 * pi());
		}
		
		$bild[strval($def[$i])] = $bild[strval($def[$i])] / ($h * count($def));		
	}
	
	//berechne splinefunktion
	$spline = new spline();
	$spline -> init($def,$bild);
	
	return $spline;
}










//----------HILFSCLASSEN--------//


class spline{

	private $def;
	private $bild;
	private $momente;
	
	/**
	*	Berechnet die Momente.
	*/
	public function init($d1, $b1){
		
		sort($d1);
		$this->def = $d1;
		$this->bild = $b1;
		
		//berechnung der momente per thomas algorithmus fuer tridiagonale gleichungssysteme
		$d_c = array();
		$d_d = array();
		
		$d_c[0] = 0; //c1/b1
		$d_d[0] = 1; //d1/b1
		
		for($i=1; $i<=count($d1)-2; $i++){
			
			$ah = $d1[$i] - $d1[$i-1];
			$ch = $d1[$i+1] - $d1[$i];
			$dh = ($this->bild[strval($d1[$i + 1])] - $this->bild[strval($d1[$i])]) / $ch - ($this->bild[strval($d1[$i])] - $this->bild[strval($d1[$i - 1])]) / $ah;
					
			$bh = 2 * ($ah + $ch);
			if($i == count($d1)-1){
				$bh = 1;
			}
			
			$d_c[$i] = $ch / ($bh - $d_c[$i-1] * $ah);
			$d_d[$i] = ($dh - $d_d[$i-1] * $ah) / ($dh - $d_c[$i-1] * $ah);
		}
		
		$this->momente = array();
		$this->momente[count($d_d)-1] = $d_d[count($d_d)-1];
		
		for($i=count($d_d)-2; $i>=0; $i--){
			$this->momente[$i] = $d_d[$i] - $d_c[$i] * $this->momente[$i+1];
		}
	}

	/**
	*	Ermittelt fuer jedes x dass im Definitionsbereich [x1,xn] liegt das Bild f(x).
	*/
	public function value($x){
	
		$index = $this->_index($x);
		$h = $this->def[$index + 1] - $this->def[$index];
		
		$a = $this->bild[strval($this->def[$index])];
		$b = ($this->bild[strval($this->def[$index + 1])] - $this->bild[strval($this->def[$index])]) / $h - ( $h * ($this->momente[$index + 1] + 2 * $this->momente[$index]) ) / 6;
		$c = $this->momente[$index] / 2;
		$d = ($this->momente[$index + 1] - $this->momente[$index]) / (6 * $h);

		return ( $a + $b * ($x - $this->def[$index]) + $c * pow($x-$this->def[$index],2) + $d * pow($x-$this->def[$index],3) );
	}

	/**
	*	Berechnet den Index i mit x \in [xi,xi+1].
	*/
	private function _index($x){
			
		for($k=0; $k<=count($this->def)-2; $k++){
		
			if($this->def[$k] <= $x && $x <= $this->def[$k+1]){
				return $k;
			}
		}
	}
	
}



















//----------WEBSERVICE--------//

require_once('lib/nusoap.php');
$namespace = "WindowsFormsApplication1";//"http://sanity-free.org/services";
// create a new soap server
$server = new soap_server();
// configure our WSDL
$server->configureWSDL("MC");
// set our namespace
$server->wsdl->schemaTargetNamespace = $namespace;



$server->register(
                // method name:
                'testKlasse', 		 
                //param
				array('name'=>'xsd:string', 'pw'=>'xsd:string', 'anzahlSimulationen'=>'xsd:string', 'timeline'=>'xsd:string', 'prognoseHorizont'=>'xsd:string'),
				//return
				array('return'=>'xsd:string'),
                // namespace:
                $namespace,
                // soapaction: (use default)
                false,
                // style: rpc or document
                'rpc',
                // use: encoded or literal
                'encoded',
                // description: documentation for the method
                'A simple Hello World web method');




                
// Get our posted data if the service is being consumed
// otherwise leave this data blank.                
$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
                ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

// pass our posted data (or nothing) to the soap service                    
$server->service($POST_DATA);                
exit();

?>

könnt ihr mir helfen das problem oben zu lösen? ich versuch gerade die letzten programmierfehler per "return string" zu lösen (php schreibe ich im nodepad, da der aufruf über c# erfolgt habe ich keine ahnung wie ich das richtig debugge)

tausche ich das $iterations in der Metropolismethode gegen eine 10 aus, sinkt die wahrscheinlichkeit für eine fehlermeldung, schreibe ich aber 1000 oder 10.000 rein, ist die wahrscheinlichkeit für einen fehler hoch....usw. irgendwas hab ich vermorkst

  1. scheibenkleistert. ich erzeuge zufallsvariablen und diese zufallsvariablen lösen so wies aussieht in manchen fällen null pointer exceptions aus und weil ich das ganze so schlau "debugge" bekomme ich das garnicht erst mit. man.... ich brauche was zum schnellen php debuggen und testen

  2. Moin!

    1. das gewünschte ergebenis wird zurück gegeben

    2. oder ich bekomme: Der vom Client gefundene Anforderungsinhaltstyp ist 'text/html', erwartet wurde 'text/xml'.

    3. oder ich bekomme: Die Antwort ist kein wohlgeformter XML-Code.

    2 und 3 sagen mir: Es gab eine Fehlermeldung. Dein C# - Dingens sollte den HTTP-Statuscode auswerten und wenn da keine 200 drin steht den gesendeten Text als "Webseite" anzeigen. Wenn das nicht geht als HTML-Quelltext.

    Schaue ins Error-Log Deines Web-Servers. Dort sollte hilfreiches sichtbar werden. Unter Linux mach ich das mit:

    ~> tail -f /var/log/apache2/error.log
    

    (Das "beobachtet" das Logfile. Ich hab mir Rechte daran eingeräumt. (Linux: man chmod und man logrotate -> create helfen an der Stelle weiter)

    Hast Du unter Windows kein tail, dann hole Dir endlich brauchbare Werkzeuge, entpacke den Stuff in einen Ordner, den Du auch dem Suchpfad hinzufügst.

    Jörg Reinholz

    1. danke, ich kenne mich mit php entwicklung noch nicht aus.

      ich muss folgende sachen machen:

      1. debuggen, d.h. ich brauche einen vernünftigen debugger für php, idealerweise so dass ich meine einzelnen funktionen direkt mit passenden eingaben starten kann

      2. junittests würde ich gerne für meine php sachen schreiben, wie mach ich das?

      3. ich hasse es mathematische dinge selbst zu programmieren, weil ich dann nie weiß ob ich mich irgendwo vertippt habe. da es jetzt nicht anders ging, möchte ich meine funktionen einzeln testen, bzw. passende tests durchführen. ich denke den c# teil muss ich nicht testen, es reicht wenn ich nur die php geschichten teste.

      du hast mehr php erfahrung als ich, kannst du mir eine entwicklungs umgebung empfehlen mit der ich das hinbekomme? ich benutze windows.

      und kannst du meinen php code kurz überfliegen und mir paar tipps geben, was ich wie verbessern könnte? das ist mein erster php code, ich vermute dass ich viele anfängerfehler gemacht habe. (notationen, variablen, eventuell schlechtangelegte klasse etc.)

      1. Tach!

        ich muss folgende sachen machen:

        1. debuggen, d.h. ich brauche einen vernünftigen debugger für php, idealerweise so dass ich meine einzelnen funktionen direkt mit passenden eingaben starten kann

        Es gibt auch Debugger. Sogar mit Einzelschrittabarbeitung. Aber meist macht man einfach Kontrollausgaben mit var_dump(). Ich weiß, dass das Zend Studio einen drin hatte (vor langer Zeit, ist bestimmt immer noch eingebaut). Vielleicht gibts auch was für Eclipse - keine Ahnung.

        1. junittests würde ich gerne für meine php sachen schreiben, wie mach ich das?

        Suchmaschine nach PHP Unit Test befragen, die findet da was.

        dedlfix.

        1. mich interessiert bei jedem punkt was die leute hier im forum praktisch (bei der arbeit) einsetzen, dass bei google muss nicht unbedingt dass sein was man normalerweise verwendet

          warum verwendet man logausgaben anstelle von debuggern bei php? nachdem was ich gelesen habe ist php auch bei großen projekten weit verbreitet, aber wie will man bei großen php projekten ohne debugger kleinere flüchtigkeitsfehler finden?

          eigentlich müsste das debuggen in php extrem leicht sein, da php oft verwendet wird und debuggen eine sache ist, die man eigentlich immer machen muss.... ich kann nicht glauben dass die meisten php entwickler mit logdateien und der einfinger-suchmethode entwickeln

          1. Moin!

            da php oft verwendet wird und debuggen eine sache ist, die man eigentlich immer machen muss....

            Die Skriptsprache PHP wird weit überwiegend für kleine Projekte verwendet. Ergo findest Du auch weit überwiegend Beschreibungen, die auf kleine Projekte passen.

            aber wie will man bei großen php projekten ohne debugger kleinere flüchtigkeitsfehler finden?

            ~> php skript.php #liefert schon mal die Typos...
            

            Ansonsten kommt man bei wirklich großen Projekten um Zend-Studio wohl kaum herum.

            Jörg Reinholz

            1. Die Skriptsprache PHP wird weit überwiegend für kleine Projekte verwendet. Ergo findest Du auch weit überwiegend Beschreibungen, die auf kleine Projekte passen.

              so klein sind php projekte wie facebook auch wieder nicht

              ~> php skript.php #liefert schon mal die Typos...
              

              danke, ich arbeite mich jetzt durch beide postings durch und versuche erstmal etwas zum debuggen hinzubekommen, ich krieg die flüchtigkeitsfehler im code sonst nicht weg. ich hab versucht mein eclipse per plugin auf php aufzurüsten, aber mir werden da keine tippfehler angezeigt und wie ich php funktionen direkt aufrufen kann (ohne html etc sondenr nur per entwicklungsumgebung) ist mir auch noch nicht klar

              1. Hi,

                Die Skriptsprache PHP wird weit überwiegend für kleine Projekte verwendet. Ergo findest Du auch weit überwiegend Beschreibungen, die auf kleine Projekte passen.

                so klein sind php projekte wie facebook auch wieder nicht

                was lässt dich vermuten, dass große Plattformen wie etwa facebook auf PHP basieren? Ich weiß es zwar nicht, halte das aber doch für sehr unwahrscheinlich. Ich teile Jörgs Einschätzung, dass PHP vor allem für kleine und mittlere Projekte (z.B. CMS, Blogs) verwendet wird.

                So long,
                 Martin

                1. http://de.wikipedia.org/wiki/Hack_(Programmiersprache)

                  „die bereits seit einigen Jahren schrittweise ihr ursprünglich in PHP geschriebenes Social Network Facebook auf die neue Sprache Hack umstellt,“

                  1. Hi,

                    http://de.wikipedia.org/wiki/Hack_(Programmiersprache)

                    „die bereits seit einigen Jahren schrittweise ihr ursprünglich in PHP geschriebenes Social Network Facebook auf die neue Sprache Hack umstellt,“

                    okay, das ist eine deutliche Aussage.

                    So long,
                     Martin

                    1. Moin!

                      „die bereits seit einigen Jahren schrittweise ihr ursprünglich in PHP geschriebenes Social Network Facebook auf die neue Sprache Hack umstellt,“

                      okay, das ist eine deutliche Aussage.

                      Und jetzt setzen wir uns tagelang hin und rätseln, WARUM Facebook auf eine selbst geschriebene Sprache umgestellt hatte.

                      Womöglich haben die erkannt, dass PHP für richtig große Projekte und extreme Serverlasten eben doch nicht so super geeignet ist. Aber: He! Das läge ja viel zu nahe! Die Facebooker wollten einfach mal ein wenig Geld ausgeben. Aktionäre lieben es nämlich wenn Aktiengesellschaften deren Geld möglichst sinnlos ausgeben.

                      Jörg Reinholz

                      1. hack scheint eher eine verbesserung von php zu sein?

                        aber wie oben beschrieben habe ich davon keine ahnung, ich bin absoluter php anfänger der den oben geposteten code von fehlern befreien möchte

          2. Tach!

            warum verwendet man logausgaben anstelle von debuggern bei php? nachdem was ich gelesen habe ist php auch bei großen projekten weit verbreitet, aber wie will man bei großen php projekten ohne debugger kleinere flüchtigkeitsfehler finden?

            Man muss dazu den Webserver konfigurieren und dem PHP ein Modul unterschieben. Von Haus aus kommt PHP nicht mit einem Debugger daher. Zudem muss das Modul mit der verwendeten IDE zusammenspielen. Also Zend Studio hab ich schon erwähnt, PHPStorm kann das auch. Das kann man machen, und das machen sicher auch einige Projekte, und das ist dann auch so komfortabel, wie man Debuggen im Visual Studio kennt. Die IDEs kosten üblicherweise Geld, das hiesige Publikum ist aber meist auf dem Kostenlos-Pfad unterwegs. Deswegen spielt sich Debugging hier meist mit var_dump() ab.

            eigentlich müsste das debuggen in php extrem leicht sein, da php oft verwendet wird und debuggen eine sache ist, die man eigentlich immer machen muss....

            Na, die Erkenntnis hat sich bei vielen noch nicht durchgesetzt, dass beim Programmieren das Debugging einen wesentlichen Stellenwert einnimmt. Solange Fummeln bis es klappt, führt doch auch zum Ziel …

            dedlfix.

      2. Moin!

        danke, ich kenne mich mit php entwicklung noch nicht aus.

        ich muss folgende sachen machen:

        1. debuggen, d.h. ich brauche einen vernünftigen debugger für php,

        http://www.zend.com/en/products/studio

        du hast mehr php erfahrung als ich, kannst du mir eine entwicklungs umgebung empfehlen mit der ich das hinbekomme? ich benutze windows.

        Tja. Wenn es nicht zend-studio sein soll:

        Ein guter Editor, der auch Dateien via (s)ftp(s), ssh öffnen kann auf einem OS welches das auch unterstützt (ich nehm kate auf Linux), ein Webserver (weil sich php als Modul in vielen Fällen anders verhält als in einem Terminal oder als cgi), der Blick aufs Error-Log (tail -f /var/log/apache2/error.log), var_debug()/print_(), oder eben die Möglichkeit mit error_log('$var = '.$var ) sich was loggen zu lassen.

        idealerweise so dass ich meine einzelnen funktionen direkt mit passenden eingaben starten kann

        Naja. Das mache ich manuell.

        und kannst du meinen php code kurz überfliegen und mir paar tipps geben, was ich wie verbessern könnte? das ist mein erster php code, ich vermute dass ich viele anfängerfehler gemacht habe. (notationen, variablen, eventuell schlechtangelegte klasse etc.)

        Hm.

        fastix@trainer:/tmp$ php test.php
        PHP Deprecated:  Assigning the return value of new by reference is deprecated in /tmp/lib/nusoap.php on line 6496
        
        Deprecated: Assigning the return value of new by reference is deprecated in /tmp/lib/nusoap.php on line 6496
        PHP Fatal error:  Cannot redeclare class soapclient in /tmp/lib/nusoap.php on line 7240
        
        Fatal error: Cannot redeclare class soapclient in /tmp/lib/nusoap.php on line 7240
        

        "Mal kurz" geht anders. Ich finde nämlich keinen Mehrfachaufruf von lib/nusoap.php. Warum eigentlich soap? C# und PHP können nativ JSON und das soap/wdsl/xml-Zeug ist damit nicht gerade geringfügig im Nachteil - schon weil man sich nicht solchen merkwürdigen libs rumschlagen muss.

        Jörg Reinholz

        1. ich arbeite mit soap, weil dass die erste sache war die ich richtig anwenden könnte in diesem gebiet. keine ahnung ob ich die json sache so schnell verstehe.

          ich versuch erstmal die fehler in meinem code wegzudebuggen, dann schau ich weiter

          1. was ist den in eclipse bei php projekten beim debuggen die startmethode?

            1. Moin!

              was ist den in eclipse bei php projekten beim debuggen die startmethode?

              Keine Ahnung. Ich habe die Finger von Eclipse gelassen. Eine derart universelle IDE kann nach meiner Ansicht zwar viel aber deshalb zwingend davon "nichts" richtig. Mit Java soll das Zeug gut können ...

              debuggen, startmethode

              und diese nette Sache mit den Kommentarblöcken, die sich mit einem Zeichen ein- und ausschalten lassen:

              ## Test blubber ...
              #/* 
              Kein Kommentar
              Zeile 2#*/
              
              ## Test blubber ...
              /*
              Kommentar
              Zeile 2
              …
              #*/
              

              Jörg Reinholz

              1. ## filename: [/LIB-DIR/]ftx_cleartel.php if ( -1 < strpos($_SERVER['PHP_SELF'],'ftx_cleartel.php')) { ftx_cleartel_test(); }

                kanst du mir sagen was dieser codestreifen macht? reicht der codestreifen zum ausführen einer php datei?

                1. Moin!

                  1. ## filename: [/LIB-DIR/]ftx_cleartel.php
                  2. if ( -1 < strpos($_SERVER['PHP_SELF'],'ftx_cleartel.php')) {
                  3. ftx_cleartel_test();
                    
                  4. }

                  kanst du mir sagen was dieser codestreifen macht? reicht der codestreifen zum ausführen einer php datei?

                  1. ist ein Kommentar.
                  2. Wenn im Dateiname der aktuellen Skriptes ftx_cleartel.php auftaucht (strpos NICHT -1 liefert): dann
                  3. … führe die test-funktion aus
                  4. ende wenn

                  Anders ausgedrückt: Wenn ich das Skript direkt aufrufe statt es zu inkludieren, dann wird der "unittest" ausgeführt.

                  Ausführen würde ich es hier mit in der Konsole mit

                  ~> php ftx_cleartel.php
                  

                  Jörg Reinholz

              2. Hi,

                Ich habe die Finger von Eclipse gelassen. Eine derart universelle IDE kann nach meiner Ansicht zwar viel aber deshalb zwingend davon "nichts" richtig.

                also ungefähr so wie Outlook: Es ist ein bisschen Mailclient, ein bisschen Notizblock, ein bisschen Terminkalender, ein bisschen Groupware, aber nichts davon richtig gut. ;-)

                Mit Java soll das Zeug gut können ...

                Aus der Ecke kommt Eclipse ja AFAIK auch her.

                So long,
                 Martin

                1. könnt ihr mir einen tipps fürs debuggen meines oben geposteten codes geben?

                  ich möchte nur den php code debuggen, die soap sache möchte ich erstmal rauslassen, dass heißt es reicht wenn ich jede funktion einzeln teste.

                  ich habe leider keine ahnung wie ich die funktionen einzeln aufrufen kann, da mir obda eine startmethode fehlt. brauch ich da einen html code?

                  1. Moin!

                    ich habe leider keine ahnung wie ich die funktionen einzeln aufrufen kann, da mir obda eine startmethode fehlt. brauch ich da einen html code?

                    EINFACH, EINFACH, EINFACH!

                    1. Du rufst die Funktion auf und übergibst der die Werte, mit denen Du testen willst - was denn sonst? Natürlich musst die Funktion ggf. isolieren, also ggf. einen main()-Teil (den es in PHP so nicht gibt, abschalten. Z.B. durch Kommentare.
                    2. Und dann führst Du das Skript einfach aus.

                    brauch ich da einen html code?

                    Wozu denn?

                    Jörg Reinholz

                      1. Du rufst die Funktion auf und übergibst der die Werte, mit denen Du testen willst - was denn sonst? Natürlich musst die Funktion ggf. isolieren, also ggf. einen main()-Teil (den es in PHP so nicht gibt, abschalten. Z.B. durch Kommentare.
                      2. Und dann führst Du das Skript einfach aus.

                      ja, leider check ich gerade nicht, wie ich den code anpassen muss um eine funktion aufzurufen.

                      function add($a,$b){

                      return $a+$b; }

                      wie krieg ich den jetzt die funktion nur in php aufgerufen? kannst du mir für diese add funktion kurz aufschreiben wie der php aufruf aussieht und wie ich das dann starten kann? (ich find im internet gerad nur hello world beispiele bzw. finde da gerade keinen grünen zweig)

                      1. Moin!

                        wie krieg ich den jetzt die funktion nur in php aufgerufen? kannst du mir für diese add funktion kurz aufschreiben wie der php aufruf aussieht und wie ich das dann starten kann? (ich find im internet gerad nur hello world beispiele bzw. finde da gerade keinen grünen zweig)

                        ach ja... Irgendwie komme ich mir aber schon verklappst vor. Trollst Du gerade ein wenig?

                        <?php
                        echo add( 1, 3 ), "\n";
                        
                        function add( $a, $b ) {
                          return $a + $b;
                        }
                        
                        

                        Ausführen und Ergebnis:

                        fastix@trainer:/tmp$ php test_add.php
                        4
                        

                        Jörg Reinholz

                        1. danke, paar sachen kann ich paar sachen versteh ich nicht. ich kann eine php funktion per c# aufrufen und per html, aber ich weiß nicht wie dass ganze nur per php geht. (ich kann bisschen was in java entwickeln und weiß daher wie man klassen etc schreibt, aber alles andere rund um php kann ich nicht)

                          folgende frage:

                          fastix@trainer:/tmp$ php test_add.php 4

                          wo gebe ich das ding ein?

                          ich hab jetzt das skript in ein php file in eclipse getan, klicke ich auf ausführen bekomme ich einen "seite kann nicht angezeigt werden". leider wird dieser punkt in allen anleitungen weggelassen die ich bisher gefunden habe.

                          außerdem habe ich den code in ein test.php file getan und dieses file in meinen browser gezogen, dort sehe ich aber leider nur den code aus dem file.....

                          1. Moin!

                            folgende frage:

                            fastix@trainer:/tmp$ php test_add.php
                            4
                            
                            

                            wo gebe ich das ding ein?

                            Ich glaube immer noch, dass Du mich verarschst.

                            Was für ein Betriebssystem hast Du?

                            • Windows? Start -> ausführen -> cmd. Dann im Terminalfenster: /pfad/zur/php.exe /pad/zum/skript.php eintippen.
                            • Linux oder *BSD: Terminal oder Konsole aufrufen. Dann: php /pad/zum/skript.php eintippen.
                            • Mac: Terminal aufrufen. Dann: php /pad/zum/skript.php eintippen.

                            Jörg Reinholz

                            1. ich habe die test.php datei auf meinem destop und ich habe windows

                              ich bin mit meiner konsole ins destop verzeichnis gewandert und habe dort /tmp$ php test.php eingegeben -> tmp$ kennt er nicht

                              ich habe php test.php versucht -> geht erst recht nicht

                              1. Moin!

                                ich habe php test.php versucht -> geht erst recht nicht

                                Was glaubst Du, was es heisst, wenn ich schreibe:

                                Windows? Start -> ausführen -> cmd. Dann im Terminalfenster: /pfad/zur/php.exe /pad/zum/skript.php eintippen.

                                Aber wenn Du DAS nicht weisst, dann hast Du irgendwelche anderen Talente. Lass einfach die Finger vom Programmieren oder dem Computer überhaupt und versuch's mit Ackerbau, Viehzucht oder als Komiker.

                                Deine Nachfragen passen nicht zu Deinen Ansprüchen. Wie kann man fragen, wie man eine Funktion aufruft, wenn man das im angeblich selbst geschrieben Code schon ein paar Mal getan hat?

                                Deshalb gibt's jetzt einen Fisch:

                                Fisch:

                                Jörg Reinholz

                                1. Aloha ;)

                                  Aber wenn Du DAS nicht weisst, dann hast Du irgendwelche anderen Talente. Lass einfach die Finger vom Programmieren oder dem Computer überhaupt und versuch's mit Ackerbau, Viehzucht oder als Komiker.

                                  Deine Nachfragen passen nicht zu Deinen Ansprüchen. Wie kann man fragen, wie man eine Funktion aufruft, wenn man das im angeblich selbst geschrieben Code schon ein paar Mal getan hat?

                                  Hart, aber wahr. Zumindest fehlt afais die Bereitschaft, sich mit den Grundlagen zu beschäftigen (gewöhnlich sollte man wissen, wie man ein Skript aufruft, bevor man es schreibt).

                                  Deshalb gibt's jetzt einen Fisch:

                                  Fisch:

                                  Au, das ist aber ein schöner! Den würde ich nicht so einfach hergeben ;)

                                  Grüße,

                                  RIDER

                                  --
                                  Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
                                  1. Moin!

                                    Fisch:

                                    Au, das ist aber ein schöner! Den würde ich nicht so einfach hergeben ;)

                                    Das Foto ist geschönt. (Alle Fliegen im Umkreis von 10km mit der chemischen Keule... und dann ganz, ganz schnell gemacht!) Und es gibt nicht den Geruch wieder …

                                    Jörg Reinholz

                                    1. Hi,

                                      Fisch:

                                      Das Foto ist geschönt. [...] Und es gibt nicht den Geruch wieder ...

                                      oh ja ... wahrscheinlich würde ich deutlich mehr Fisch essen, wenn der charakteristische, intensive Geruch nicht wäre. Beim Grillen, Räuchern oder Braten verschwindet der zwar weitgehend, aber der rohe Fisch stinkt während der Zubereitung heftig. Bei gekochten oder gedünsteten Zubereitungen wird er gar noch intensiver. Auch die vor akkem bei Kindern beliebten Fischstäbchen stinken bei der Zubereitung bestialisch nach Fisch.

                                      Und da Masthähnchen oft mit Fischmehl gefüttert werden, kann es sogar vorkommen, dass man zum Feierabend heimkommt, kurz schnüffelt und dann mit leichtem Widerwillen fragt: Gab's bei euch heute Fisch? - Nein, nur Hühnchen. Das genügt oft schon.

                                      Ich ärgere mich manchmal beim Einkaufen, wenn die Entlüftung über der Frischfisch-Theke des örtlichen Supermarkts mal nicht einwandfrei funktioniert. Dann stinkt die ganze Fleisch- und Wurstabteilung nach Fisch.

                                      Ciao,
                                       Martin

                                      1. Moin!

                                        Fisch:

                                        Das Foto ist geschönt. [...] Und es gibt nicht den Geruch wieder ...

                                        oh ja ... wahrscheinlich würde ich deutlich mehr Fisch essen, wenn der charakteristische, intensive Geruch nicht wäre.

                                        Frischer Fisch (nicht: Karpfen) riecht jedenfalls für mich "sehr essbar". Dieser Geruch war aber nicht gemeint...

                                        Jörg Reinholz

                                        1. Hi,

                                          oh ja ... wahrscheinlich würde ich deutlich mehr Fisch essen, wenn der charakteristische, intensive Geruch nicht wäre.

                                          Frischer Fisch (nicht: Karpfen) riecht jedenfalls für mich "sehr essbar".

                                          da unterschieden wir uns wohl. Für mich riechen fast alle Fischarten (und andere Meeresfrüchte wie Muscheln, Krebse und ähnliches Getier) sogar schon fangfrisch sehr "discouraging". Erst bei sehr spezifischen Zubereitungsarten (wie erwähnt: Räuchern, Grillen, evtl. auch sauer einlegen) verschwindet dieser für mich unangenehme Geruch weitgehend.

                                          Inwiefern Karpfen da eine Sonderstellung einnimmt, entzieht sich meiner Kenntnis. Für mich riecht auch Forelle blau oder Schollenfilet ekelhaft.

                                          So long,
                                           Martin

                          2. Tach!

                            danke, paar sachen kann ich paar sachen versteh ich nicht.

                            An deine Stelle würde ich mal alles weglegen, was du von anderen Sprachen her kennst und ein PHP-Tutorial heranziehen und da wenigstens die ersten paar Kapitel durcharbeiten. Auch die offizielle PHP-Dokumentation hat einen kleinen Einsteigerteil.

                            ich kann eine php funktion per c# aufrufen und per html, aber ich weiß nicht wie dass ganze nur per php geht.

                            Kannst du nicht. C# macht einen Request zu einem Webserver. Der startet ein PHP-Script. Und HTML ist eine Seitenbeschreibungssprache. Man kann damit auch kein PHP aufrufen.

                            (ich kann bisschen was in java entwickeln und weiß daher wie man klassen etc schreibt, aber alles andere rund um php kann ich nicht)

                            Vergiss das, was du in OOP-Systemen gelernt hast fürs erste und lerne PHP und dessen Philosophie. (Das gilt auch für andere Systeme, in die man sich neu einarbeiten möchte. Vorhandenes Wissen stört dabei oftmals, wenn man immer wieder versucht, den Weg der bereits bekannten Sprache(n) in der neuen anzuwenden, dort aber andere Lösungswege vorgesehen sind.)

                            ich hab jetzt das skript in ein php file in eclipse getan, klicke ich auf ausführen bekomme ich einen "seite kann nicht angezeigt werden". leider wird dieser punkt in allen anleitungen weggelassen die ich bisher gefunden habe.

                            PHP ist nicht dafür vorgesehen, einfach so als Programm zu laufen, sondern es ist quasi ein Template-System, das in HTML eingebettet wird.

                            außerdem habe ich den code in ein test.php file getan und dieses file in meinen browser gezogen, dort sehe ich aber leider nur den code aus dem file.....

                            Ein Browser ist kein PHP-Interpreter. PHP läuft auf dem Webserver und erstellt (meistens) ein HTML-Dokument, nachdem der Browser einen Request zu diesem Webserver geschickt hat.

                            Versuch erst einmal, die grundlegendsten Grundlagen zu lernen, bevor du mit einem Projekt auf ein dir unbekanntes System losgehst!

                            dedlfix.

                            1. Moin!

                              PHP ist nicht dafür vorgesehen, einfach so als Programm zu laufen, sondern es ist quasi ein Template-System, das in HTML eingebettet wird.

                              Naja. So war das mal gedacht. Inzwischen ist es aber durchaus eine "Universalsprache".

                              Jörg Reinholz

                              1. Tach!

                                PHP ist nicht dafür vorgesehen, einfach so als Programm zu laufen, sondern es ist quasi ein Template-System, das in HTML eingebettet wird.

                                Naja. So war das mal gedacht. Inzwischen ist es aber durchaus eine "Universalsprache".

                                Ja, es ist dahingehend erweitert. Das ändert aber nichts an der Eigenschaft, dass es auch für Kommandozeilenzwecke und auch wenn es für GUI Anwendung findet, in einem Template eingebettet sein muss - selbst wenn dieses nichts weiter enthält als die PHP-Einleitung <?php

                                dedlfix.

                                1. Moin!

                                  Das ändert aber nichts an der Eigenschaft, dass es auch für Kommandozeilenzwecke und auch wenn es für GUI Anwendung findet, in einem Template eingebettet sein muss - selbst wenn dieses nichts weiter enthält als die PHP-Einleitung <?php

                                  Mit dem "muss" ist das so eine Sache.

                                  ~$ php -r '$foo = get_defined_constants(); var_dump($foo);'
                                  
                                  array(1891) {
                                    ["E_ERROR"]=>
                                    int(1)
                                    ["E_RECOVERABLE_ERROR"]=>
                                    int(4096)
                                    ["E_WARNING"]=>
                                    int(2)
                                    ["E_PARSE"]=>
                                    int(4)
                                    ["E_NOTICE"]=>
                                    int(8)
                                    ["E_STRICT"]=>
                                    int(2048)

                                  Aber klar: Dazu muss das Skript in eine Zeile, was dann wieder (regelmäßig) an der Shell scheitert (Skripte in Dateien können nicht ausgeführt werden). In dem Zustand kaum brauchbar - aber: He! Es geht ohne die PHP-Einleitung <?php

                                  Jörg Reinholz

                                  1. Moin!

                                    Oder doch?

                                    ## file test
                                    echo 5+8, "\n";
                                    function addTwo($n) {
                                      return $n + 2;
                                    }
                                    echo addtwo(2), "\n";
                                    
                                    php -a < test
                                    Interactive mode enabled
                                    
                                    13
                                    4
                                    

                                    Na bitte. Geht doch ohne <?php!

                                    Jörg Reinholz

                                    1. hi,

                                      hier der derzeitige stand des codes:

                                      <?php
                                      
                                      
                                      function _checkID($name, $pw){
                                      //TODO
                                      
                                      return 1;
                                      }
                                      
                                      
                                      
                                      function testmethode($name, $pw, $anzahlSimulationen, $timeline, $prognoseHorizont){
                                      
                                      	if(doubleval($anzahlSimulationen) != 10000 || doubleval($prognoseHorizont) != 40){//abfrage ob parameter veraendert wurden
                                      		return "ErrorParams";
                                      	}
                                      	else if(_checkID($name,$pw)==1){
                                      	
                                      		$a_line = explode(";",$timeline);
                                      		$lastValue = $a_line[count($a_line)-1];
                                      		$logDiff = _logDiff($a_line);
                                      		$a_line = null;
                                      		
                                      		return _generateZV($anzahlSimulationen, $logDiff, 20); //testaufruf
                                      		
                                      		$arrayWithChains = _generateZV($anzahlSimulationen, $logDiff, 20); //berechnet 20 log wachstumsraten
                                      		//error_log("generate zv ". implode(",",$arrayWithChains));
                                      		//testaufruf
                                      		//return implode(",",$arrayWithChains);
                                      		//testaufruf end
                                      		
                                      		$output = ""; // string mit - getrennt, die wiederum die einzelnen werte der simulationen enthalten die mit ; getrennt sind
                                      		
                                      		for($d=1; $d<=100; $d++){//100 durchlaeufe, bzw simulationen
                                      		
                                      			if($d !=1){
                                      				$output[$d] += "-";
                                      			}
                                      		
                                      			$wert = $lastValue;
                                      			for($h=1; $h<=intval($prognoseHorizont);$h++){//durchlaufe horizont
                                      				$rand_keys = array_rand($anzahlSimulationen, 1);
                                      				$wert = $wert * exp($anzahlSimulationen[$rand_keys[0]]);
                                      				
                                      				$output += strval($wert);
                                      				if($h<intval($prognoseHorizont)){
                                      					$output += ";";
                                      				}
                                      			}
                                      		}
                                      		
                                      		return output;
                                      	}	
                                      	else {
                                      		return "null";
                                      	}
                                      }
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      //----------HILFSFUNKTIONEN--------//
                                      function _logDiff($timeline){
                                      
                                      	$logDiff = array();
                                      	
                                      	for($i=0; $i<=count($timeline)-2;$i++){
                                      		$logDiff[$i] = log(doubleval($timeline[$i+1])) - log(doubleval($timeline[$i]));
                                      	}
                                      	
                                      	return $logDiff;
                                      }
                                      
                                      
                                      
                                      function _metropolisHastings($startvalue, $iterations, $x, $horizont){
                                      	
                                      	$spline = _gaussDichte($x);
                                      	$chain = array();
                                      	$chain[0] = $startvalue;
                                      
                                      	$ew = _mean($x);
                                      	
                                      	$s = 0;
                                      	for($i=0; $i<=count($x)-1;$i++){
                                      		$s += pow($x[$i]-$ew ,2);
                                      	}
                                      	$s = sqrt($s/(count($x)-1));
                                      
                                      	$horizont = intval($horizont);
                                      	$iterations = intval($iterations) - 1;
                                      	for($i=0; $i<=$iterations ; $i++){
                                      		
                                      		$proposal = _generateNormZV($ew, $s)[1];
                                      		/*error_log("------");
                                      		error_log($proposal);
                                      		error_log($spline->value($proposal));
                                      		error_log( _dichteNorm($chain[$i],$ew,$s));
                                      		error_log( $spline->value($chain[$i]));
                                      		error_log(_dichteNorm($proposal,$ew,$s));
                                      		return ($spline->value($proposal) ." ". _dichteNorm($chain[$i],$ew,$s)." ". $spline->value($chain[$i]) ." ". _dichteNorm($proposal,$ew,$s));*/
                                      		
                                      		$probab = min(1,($spline->value($proposal) * _dichteNorm($chain[$i],$ew,$s) / ($spline->value($chain[$i]) * _dichteNorm($proposal,$ew,$s))));
                                      		
                                      		//error_log("iteration: ". $i . " ew: ".$ew . " s: ". $s);
                                      		//error_log("proposal: ". $proposal . " ". _generateNormZV($ew, $s)[1]);
                                      		if(_generateNormZV($ew, $s)[1] < $probab)
                                      		{
                                      		  $chain[$i +1] = $proposal;
                                      		}
                                      		else
                                      		{
                                      		  $chain[$i +1] = $chain[$i];
                                      		}
                                      		//error_log("count: " . count($iterations));
                                      	}
                                      	
                                      	
                                        $rand_keys = array_rand($chain, $horizont);
                                        $out = array();  
                                       
                                        for($i=0; $i<=count($rand_keys)-1; $i++){
                                      	$out[$i] = $chain[$rand_keys[$i]];
                                        }
                                        //error_log("end: " . implode(";",$out));
                                        return($out);
                                      }
                                      
                                      
                                      function _generateNormZV($mueh, $sigma) { 
                                      	
                                          do{ 
                                            $y1 = mt_rand()/ mt_getrandmax(); 
                                            $y2 = mt_rand() / mt_getrandmax(); 
                                            $q = pow(2 * $y1 - 1, 2) + pow(2 * $y2 - 1, 2); 
                                          } 
                                          while ($q > 1); 
                                       
                                          $p = sqrt((-2 * log($q)) / $q); 
                                      	
                                          $z1 = (2 * $y1 - 1) * $p; 
                                          $z2 = (2 * $y2 - 1) * $p; 
                                      
                                      	$r = array($sigma * $z1 + $mueh, $sigma * $z2 + $mueh); 
                                      	return $r;
                                        } 
                                        
                                        
                                        
                                      function _dichteNorm($zv, $mueh, $sigma){
                                      
                                      	if($sigma == 0){
                                      		return 0;
                                      	}
                                      	else{
                                      		$b = ($zv - $mueh)/$sigma;
                                      		return (exp(- 1/2 * ($b * $b)) / ($sigma * sqrt(2 * pi())) );
                                      	}
                                      }
                                      
                                      
                                      
                                      function _generateZV($iterationen, $x, $horizont)
                                      {
                                      	$r = _metropolisHastings(_mean($x), $iterationen, $x, $horizont);
                                        
                                      	return $r;
                                      }
                                      
                                      
                                      
                                      function _mean($arr)
                                      {
                                      	$summe = array_sum($arr);
                                      	$anzahl = count($arr);
                                      	$durchschnitt = $summe / $anzahl;
                                      	return $durchschnitt;
                                      }
                                      
                                      
                                      
                                      /**
                                      *	Schaetzt die Kerndichte von n zufallsvariablen x1,...,xn, mit der Gausskernfunktion und einem optimalen Gaussbantbreitenschaetzer.
                                      *	Gibt ein spline objekt zurueck.
                                      */
                                      function _gaussDichte($x){
                                      
                                      	$def = array();
                                      	$bild = array();
                                      	
                                      	$ew = _mean($x);
                                      	
                                      	$s = 0;
                                      	for($i=0; $i<=count($x)-1;$i++){
                                      		$s += pow($x[$i]-$ew ,2);
                                      	}
                                      	$s = sqrt($s/(count($x)-1));
                                      	
                                      	$h = pow((4*pow($s,5))/(3*count($x)) ,1/5);
                                      		
                                      	//berechne bilder der gausskernfunktion
                                      	sort($x);
                                      	if(count($x) > 100){
                                      	
                                      		$rand_keys = array_rand($x, 100);
                                      		for($i=0; $i<=count($rand_keys)-2; $i++){
                                      			$def[$i+1] = $x[$rand_keys[$i]];
                                      		}
                                      		
                                      		sort($def);
                                      		
                                      		$def[0] = $x[0];
                                      		$def[count($def)] = $x[count($x)-1];
                                      	}
                                      	else{
                                      		$def = $x;
                                      	}
                                      	
                                      	for($i=0; $i<=count($def)-1; $i++){
                                      		
                                      		$bild[strval($def[$i])] = 0;
                                      		
                                      		for($k=0; $k<=count($def)-1; $k++){
                                      			$bild[strval($def[$i])] += exp(-1/2 * pow(($def[$i] - $def[$k])/$h, 2)) / sqrt(2 * pi());
                                      		}
                                      		
                                      		$bild[strval($def[$i])] = $bild[strval($def[$i])] / ($h * count($def));		
                                      	}
                                      	
                                      	//berechne splinefunktion
                                      	$spline = new spline();
                                      	$spline -> init($def,$bild);
                                      	
                                      	return $spline;
                                      }
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      //----------HILFSCLASSEN--------//
                                      
                                      
                                      class spline{
                                      
                                      	private $def;
                                      	private $bild;
                                      	private $momente;
                                      	
                                      	/**
                                      	*	Berechnet die Momente.
                                      	*/
                                      	public function init($d1, $b1){
                                      	
                                      		$d1 = array_unique($d1);
                                      		sort($d1);
                                      		
                                      		$this->def = $d1;
                                      		$this->bild = $b1;
                                      		//error_log("GERADE GEBAUT def: " . implode(";",$this->def));
                                      		
                                      		//berechnung der momente per thomas algorithmus fuer tridiagonale gleichungssysteme
                                      		$d_c = array();
                                      		$d_d = array();
                                      		
                                      		$d_c[0] = 0; //c1/b1
                                      		$d_d[0] = 1; //d1/b1
                                      
                                      		for($i=1; $i<=count($d1)-2; $i++){
                                      			
                                      			$ah = $d1[$i] - $d1[$i-1];
                                      			$ch = $d1[$i+1] - $d1[$i];
                                      			$dh = ($this->bild[strval($d1[$i + 1])] - $this->bild[strval($d1[$i])]) / $ch - ($this->bild[strval($d1[$i])] - $this->bild[strval($d1[$i - 1])]) / $ah;
                                      						
                                      			$bh = 2 * ($ah + $ch);
                                      			if($i == count($d1)-1){
                                      				$bh = 1;
                                      			}
                                      			
                                      			$d_c[$i] = $ch / ($bh - $d_c[$i-1] * $ah);
                                      			$d_d[$i] = ($dh - $d_d[$i-1] * $ah) / ($dh - $d_c[$i-1] * $ah);
                                      		}
                                      
                                      		$this->momente = array();
                                      		$this->momente[count($d_d)-1] = $d_d[count($d_d)-1];
                                      		
                                      		for($i=count($d_d)-2; $i>=0; $i--){
                                      			$this->momente[$i] = $d_d[$i] - $d_c[$i] * $this->momente[$i+1];
                                      		}
                                      	}
                                      
                                      	/**
                                      	*	Ermittelt fuer jedes x dass im Definitionsbereich [x1,xn] liegt das Bild f(x).
                                      	*/
                                      	public function value($x){
                                      		
                                      		$index = $this->_index($x);
                                      		
                                      		
                                      		/*error_log("---------------------");
                                      		error_log("index: " . $index);
                                      		error_log("def: " . count($this->def));
                                      		error_log("-> " . $this->def[$index] . " " . $this->def[$index +1]);
                                      		
                                      		error_log("bild: " . count($this->bild));
                                      		error_log("momente: " . count($this->momente));
                                      		error_log("bild[def[index]]: " . $this->bild[strval($this->def[$index ])] . " " . $this->bild[strval($this->def[$index + 1])]);*/
                                      		
                                      		
                                      		$h = $this->def[$index + 1] - $this->def[$index];
                                      		
                                      		
                                      		
                                      		$a = $this->bild[strval($this->def[$index])];
                                      		$b = ($this->bild[strval($this->def[$index + 1])] - $this->bild[strval($this->def[$index])]) / $h - ( $h * ($this->momente[$index + 1] + 2 * $this->momente[$index]) ) / 6;
                                      		$c = $this->momente[$index] / 2;
                                      		//error_log("h ".$h);
                                      		//error_log("index: " . $index . " count ". count($this->momente) . " momente: " . implode(";",$this->momente));
                                      		$d = ($this->momente[$index + 1] - $this->momente[$index]) / (6 * $h);
                                      	//error_log("hier " . ( $a + $b * ($x - $this->def[$index]) + $c * pow($x-$this->def[$index],2) + $d * pow($x-$this->def[$index],3) ));
                                      		//error_log("pow: " . $x . " " . $this->def[$index]);
                                      		//error_log("ergebniss: " . ( $a + $b * ($x - $this->def[$index]) + $c * pow($x-$this->def[$index],2) + $d * pow($x-$this->def[$index],3) ));
                                      		return ( $a + $b * ($x - $this->def[$index]) + $c * pow($x-$this->def[$index],2) + $d * pow($x-$this->def[$index],3) );
                                      	}
                                      
                                      	/**
                                      	*	Berechnet den Index i mit x \in [xi,xi+1].
                                      	*/
                                      	private function _index($x){
                                      					
                                      		for($k=0; $k<=count($this->def)-3; $k++){//muesste -2 sein
                                      		
                                      			if($this->def[$k] <= $x && $x <= $this->def[$k+1]){
                                      				return $k;
                                      			}
                                      		}
                                      	}
                                      	
                                      }
                                      
                                      ?>
                                      

                                      der aufruf erfolgt per testmethode("root", "pw", "10000", "1;2;3;2;1;3", "40")

                                      ich habs soweit korrigiert, dass ich den letzten fehler in $spline->value($chain[$i]) vermute, also in meiner spline klasse.

                                      könnt ihr mir helfen den fehler zu finden?

                                      errorlogs der form: [15-Jun-2015 23:23:21 Europe/Paris] PHP Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\ws\test.php:315) in C:....

                                      versteh ich auch nicht mehr

                                      1. Moin!

                                        errorlogs der form: [15-Jun-2015 23:23:21 Europe/Paris] PHP Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\ws\test.php:315) in C:....

                                        Das stimmt definitiv nicht mit der gezeigten Datei überein.

                                        Jörg Reinholz

                                        1. Moin!

                                          Das stimmt definitiv nicht mit der gezeigten Datei überein.

                                          Hinweis: Fehler wie ggf Leerzeilen vor <?php oder bom habe ich bei der Aussage schon berücksichtigt.

                                          Jörg Reinholz

                                          1. Moin!

                                            Das stimmt definitiv nicht mit der gezeigten Datei überein.

                                            Hinweis: Fehler wie ggf Leerzeilen vor <?php oder bom habe ich bei der Aussage schon berücksichtigt.

                                            Jörg Reinhoulz

                                            Ich habe den soap teil weggelassen der im ersten posting steht.die einzelnen funktionen trenne ich jeweils mit ca 10 leerzeilen. Der Fehler entsteht durch einen undefinierten indexzugriff in der spline klasse bei value denke ich (habs mit auskommentieren getestet).

                                            Wenn die fehlermeldung nicht uebereinstimmt, hab ich ein problem denke ich. Aufjedenfall werden die meine logs in der gleichen datei angezeigt

                                            1. Hm, bei mir im nodepade liegt die value funktion der spline methode rund herum um die zeile 315

                                              1. Moin!

                                                Hm, bei mir im nodepade liegt die value funktion der spline methode rund herum um die zeile 315

                                                [15-Jun-2015 23:23:21 Europe/Paris] PHP Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\ws\test.php:315) in C:....

                                                Die Fehler werden in der Reihenfolge gebraucht und müssen in der auch beseitigt werden, in der diese anfallen. Hier zum Beispiel handelt es sich oft um eine Folgefehler.

                                                Irgendwo wurde was ausgegeben (wahrscheinlich C:\wamp\www\ws\test.php, Zeile 315) und deswegen geht das Senden mindestens einer header-zeilen schief - das zeigst Du schon nicht mehr.)

                                                Damit kann man nichts anfangen als nachschauen, ob es zum gezeigten Code passt und dieses, wie ich es getan habe, womöglich ausschließen.

                                                Damit ist das Ende der Hilfsmöglichkeiten erreicht. Es sei denn, Du lieferst den Code, der nachvollziehbar zu dem Fehler führt. Also ein PHP Skript, dass ich starten kann und das dann den Fehler auch verursacht.

                                                Jörg Reinholz

                                                1. hi,

                                                  hier der code mit aufruf. ich starte dieses skript direkt über meinen wamp server und habe gerade festgestellt dass dabei viel mehr fehler angezeigt werden als beim aufruf über c#

                                                  hier:

                                                  http://pastebin.com/sCJhbFYR

                                                  anscheint habe ich ordentlich viel mist zusammengecodet, der index der in der splinefunktion über _index($x) gesucht wird ist manchmal undefiniert, ein fehler der einer nadel im heuhaufen gleicht....

                                                  1. Moin!

                                                    anscheint habe ich ordentlich viel mist zusammengecodet, der index der in der splinefunktion über _index($x) gesucht wird ist manchmal undefiniert, ein fehler der einer nadel im heuhaufen gleicht....

                                                            private function _index($x){
                                                                    error_log ('count($this->def): '.count($this->def));
                                                                    for($k=0; $k<=count($this->def)-3; $k++){//muesste -2 sein
                                                    
                                                                            if($this->def[$k] <= $x && $x <= $this->def[$k+1]){
                                                    
                                                                                sort($this->def);//testaufruf
                                                                                return $k;
                                                                            }
                                                                    }
                                                                    # hier fehlt ein return!
                                                            }
                                                    

                                                    Kein Wunder. Deine Funktion ist sehr gut dazu geeignet, in manchen Fällen einfach nichts genauer: NULL, also nicht '' oder 0 zurück zu geben. (else-Zweig fehlt bzw. return bei Volldurchlauf.

                                                    Das NULL wird dann in Zeile 313

                                                    $index = $this->_index($x);
                                                    

                                                    einfach kritiklos übernommen und führt in Zeile 326

                                                    $h = $this->def[$index + 1] - $this->def[$index];
                                                    

                                                    zum Fehler, weil der Array $this->def natürlich kein Element NULL hat.

                                                    Jörg Reinholz

                                      2. Tach!

                                        [15-Jun-2015 23:23:21 Europe/Paris] PHP Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\ws\test.php:315) in C:....

                                        Das ist einer der Fehler, für dessen Verständnis man die Philosphie PHPs verstanden haben muss. PHP-Code wird in einem Template notiert (egal was für Spitzfindigkeiten zu dessen Umgehung im Nicht-Web-Umfeld möglich sind). Alles was außerhalb von <?php ?> notiert ist, wird sofort in die Ausgabe gegeben, und der Webserver kann das auch schon auf die Reise schicken. Und dummerweise kann man nicht nachträglich noch HTTP-Header senden, wenn die ersten Teile vom Payload schon auf dem Weg zum Nutzer sind. Genau das sagt die Fehlermeldung aus. Man muss zur Vermeidung des Problems zuerst die zusätzlich gewünschten zu den per Default ausgegebenen HTTP-Header senden (oder HTTP-Header-sendende Funktionen aufrufen) und dazu gegebenenfalls schon erzeugten Payload so lange zurückhalten.

                                        Zu den fiesen Fallstricken zählen da Zeilenumbrüche oder Leerzeichen nach einem abschließenden ?> vor dem Dateiende. Wenn das ?> als letztes steht, sollte man es deswegen gleich ganz weglassen. Das ist auch kein Fehler.

                                        dedlfix.

                                        1. danke, ich versuche mich da einzulesen, so ganz habe ich das noch nicht verstanden

                                        2. Moin!

                                          (egal was für Spitzfindigkeiten zu dessen Umgehung im Nicht-Web-Umfeld möglich sind).

                                          Hehe. Wer hat mich denn durch die Verwendung des Wortes muss provoziert?

                                          (Hilfe vom mal wieder sehr geduldigen Jörg Reinholz gibt es hier)

                                          Jörg Reinholz