PHP
Von: Güntеr Βаrtlіng, 13.1.2012 13:15 Uhr
<?php
/** Vispanet5_wrapper
* version 2011
* access public
*/
class Vispanet5_wrapper {
function __construct() {
}
function general($data) {
$SessionToken = $data->SessionToken;
$SessionToken = $data->SessionToken;
$startTime = strtotime($data->STARTTIME);
$endTime = strtotime($data->ENDTIMe);
$swenetData = new DOMDocumet();
$myfile = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/datint.txt";
// $th = fopen($myfile,'a');
// $s1 = substr($startTime,0,10);
$s1 = "2011-11-27";
$s2 = " ";
// $s3 = substr($endTime,0,10);
$s3 = "2011-11-29";
$s4 = "_";
$stime = $s1.$s2.$s3;
$stime2 = $s4.$s1.$s4.$s3;
$th = fopen($myfile,'a');
fwrite ($th,"\r\n".$stime);
fclose($th);
zyk: ; $graph1="C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/GCRflowdirOutEclipPlane".$sTime2.".xml";
if (file_exists($graph1)) {
densityGCRs($stime2);
interplanCMEanisotropy($stime2);
EarthinCMEGCRBidirectstream($stime2);
GCRflowDirEclipPlane($sTime2);
GCRflowDirOutEclipPlane($sTime2);
return;
}
goto zyk;
}
function densityGCRs($sTime2) {
$file = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/densityGCRs".$sTime2.".xml";
$th=fopen($file,'r');
while (!feof($file)) {
$tabledata=fread($th,10240);
}
fclose($file);
return $tabledata;
}
function interplanCMEanisotropy($sTime2) {
$file = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/interplanCMEanisotropy".$sTime2.".xml";
$th=fopen($file,'r');
while (!feof($file)) {
$tabledata=fread($th,10240);
}
fclose($file);
return $tabledata;
}
function EarthinCMEGCRBidirectstream($sTime2) {
$file = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/EarthinCMEGCRBidirectstream".$sTime2.".xml";
$th=fopen($file,'r');
while (!feof($file)) {
$tabledata=fread($th,10240);
}
fclose($file);
return $tabledata;
}

function GCRflowDirEclipPlane($sTime2) {
$file = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/GCRflowDirEclipPlane".$sTime2.".xml";
$th=fopen($file,'r');
while (!feof($file)) {
$tabledata=fread($th,10240);
}
fclose($file);
return $tabledata;
}
function GCRflowDirOutEclipPlane($sTime2) {
$file = "C:/DLRBremen/MuSTAnG/MuSTAnG_Software/sky/VOTable/GCRflowDirOutEclipPlane".$sTime2.".xml";
$th=fopen($file,'r');
while (!feof($file)) {
$tabledata=fread($th,10240);
}
fclose($file);
return $tabledata;
}
}
require_once('lib/nusoap.php');
ini_set("soap.wsdl_cache_enabled","0");
//$server = new soap_server("wsdl/Vispanet5_wrapper.wsdl");
$server = new soap_server();
$server->setClass("Vispanet5_wrapper");
$server->handle();
?>


Der Fehler auf der Webseite

Fatal error: Call to undefined method soap_server:: setClass() in C:....on line ....

Kann mir jemand helfen?

Günter Bartling



  1. Antwort von Μuddеr 0
    Re: Welcher Fehler steckt iin folgendem PHP-Programm?
    Also bei der jetzigen Variante muss ein Fehler entstehen weil eine WSDL-Datei als Variable in soap_server() übergeben werden muss (siehe Zeile darüber).
    Mach da einfach mal ein var_dump($server) dann siehst du genau was für ein Rückgabewert dir die Funktion gab, doch da setClass() nicht bekannt ist wird es sicher kein SOAPServer-Objekt sein.

    Was funktionierte denn bei deiner auskommentierten Zeile nicht? //$server = new soap_server("wsdl/Vispanet5_wrapper.wsdl");
    • Antwort von Еlѕоrеgrо 0
      Re: Welcher Fehler steckt iin folgendem PHP-Programm?
      Hallo Herr Bartling,

      nach kurzem Überfliegen des Quellcodes würde ich sagen, das nusoap.php nicht includet wird.

      Zeile:
      require_once('lib/nusoap.php');

      Da ich Ihre Umgebung (Betriebssystem [schaut nach Windows aus], Webserver, Einstellungen) nicht kenne, kann ich keine konkrete Lösung nennen. Sie sollten eventuell den kompletten Pfad zu der Datei nusoap.php angeben bzw. schauen ob das Verzeichnis /lib mit dieser Datei überhaupt existiert.

      Mit freundlichen Grüßen
      Elsoregro
      • Antwort von Lаrѕ Rісһtеr 0
        Re: Welcher Fehler steckt iin folgendem PHP-Programm?
        Hallo Günther

        Du hast sicher require_once('class.soap_server.php');
        in nusoap.php aktiviert
        $server = new soap_server();
        Jetzt hast du die Methode setClass aufgerufen.
        Die ist aber als Methode dort nicht vorhanden
        Diese Methode ist allerdings im PHP Modul SOAP
        vom Objekt SoapServer verhanden. Da aber auf dieses Modul verzichtet wird, bzw das Objekt soap_server bzw nunsoap_base die Methoden von SoapServer nicht geerbt hat, wird diese Methode nicht erkannt.
        Soweit meine Schnellanalyse.
        Lass doch mal über PHP Info anzeigen, ob das Modul SOAP überhaupt eingebunden ist.

        Gruß Lars


        PS: Die Pfadangaben mit C: ist ja ganz unglücklich gewählt, wesentlich besser
        wäre für absolute Angaben die Variable:
        $_SERVER['DOCUMENT_ROOT']zu verwenden.
        • Antwort von Ѕеldоn 0
          Re: Welcher Fehler steckt iin folgendem PHP-Programm?
          Die besagte Funktion setClass() gibt es erst seit der PHP-Version 5.0.1. Bei einem eigenen Server solltest du die PHP-Version aktualisieren; bei Shared-Hostern schaue in der Hilfe deines Anbieters nach, ob er PHP in der Version 5.0.1 oder höher anbietet.

          http://de2.php.net/manual/de/soapserver.setclass.php

          Alternativ bietet soap_server laut der Dokumentation noch die Möglichkeit, WDSL-Typen direkt auf Klassen zu mappen. Leider habe ich mich mit soap_server noch nie beschäftigt, kann dir in dieser Hinsicht also nur die Dokumentation nennen:

          http://de2.php.net/manual/de/soapserver.soapserver.php
          • Antwort von Vоlkеr1 (abgemeldet) 0
            Re: Welcher Fehler steckt iin folgendem PHP-Programm?
            Hallo
            nun so geanu kann ich Dir da nich weiterhelfen.
            Aber die Fehlermeldung deutet ja darauf hin, das die Methode undefiniert ist. Das musst Du ernst nehmen.
            Möglicherweise stimmt hier ein Pfad nicht.
            • Antwort von tһеdаfеlіx 0
              Re: Welcher Fehler steckt iin folgendem PHP-Programm?
              Hallo Günter Bartling,

              ich habe selbst noch nie mit nusoap, geschweige denn mit SOAP und PHP gearbeitet aber der Fehler ist ja recht genau darauf zurückzuführen das es die Funktion "setClass" einfach nicht gibt. Auch in nusoap.php ist sie nirgends zu finden (habe nach ihr gesucht), keine der in nusoap.php definierten Klassen hat eine Methode setClass.

              Ich habe jedoch nur kurz nach php setClass gegoogled und die Methode setClass vom SoapServer Modul/Klasse von PHP selbst gefunden.

              Vielleicht kann dir diese weiterhelfen
              http://php.net/manual/de/soapserver.setclass.php

              Gruß Felix Scheinost
              • Antwort von Ηеrr Grünе 0
                Re: Welcher Fehler steckt iin folgendem PHP-Programm?
                Hallo Günter / Herr Bartling!

                Die Fehlermeldung sagt ja klar aus, dass die Klasse soap_server keine public Methode namens setClass(.) hat. Vielleicht müssen sie den Klassennamen beim erzeugen des Objektes mit an den Constructor geben?

                Ich kann aber nur mutmaßen, weil ich selbst noch nie mit nusoap zu tun hatte. Alternativ könnte man den in PHP eingebauten SoapClient benutzen:
                http://de.php.net/manual/en/class.soapclient.php

                Viel Erfolg!
                • Antwort von Ѕtеfаn Κ. 0
                  Re: Welcher Fehler steckt iin folgendem PHP-Programm?
                  Hallo Günther,

                  der Fehler tritt ersteinmal bei folgendem Aufruf auf:

                  $server = new soap_server();
                  $server->setClass("Vispanet5_wrapper");

                  Die Meldung bedeutet, dass er die Methode "setClass" des Objekts vom Typ soap_server nicht kennen würde.

                  Ich vermute, dass das Objekt "$server" nicht richtig angelegt werden konnte. Der Konstruktor hat als Pflicht-Parameter die Referenz auf das "WSDL"-Dokument. Das WSDL (Web Service Description Language [oder so ähnlich]) ist ein XML welches beschreibt, wie ein Webservice aufzurufen ist und welche Datentypen, Aufrufmethoden usw. zur Verfügung stehen. Das WSDL bekommt man bei manchen WebServices (meist werden dafür Java-Frameworks benutzt, die das erledigen) wenn man den Service-Endpunkt normal mit HTTP-GET aufruft.

                  Du hast da eine auskommentierte Zeile drüber:
                  //$server = new soap_server("wsdl/Vispanet5_wrapper.wsdl");

                  Hier wäre der Aufruf richtig. Allerdings ist wohl richtiger:

                  $server = new SoapServer("wsdl/Vispanet5_wrapper.wsdl");

                  Die Schreibweise der Klasse ist also anders... zumindest laut PHP-Handbuch:
                  http://www.php.net/manual/de/soapserver.soapserver.php

                  Der zweite Grund, den ich mir da vorstellen könnte, wäre, dass die PHP-Version des Servers zu alt ist.

                  Ganz oben sieht man: "(PHP 5 >= 5.0.1)", also: "mindestens PHP 5 der Version 5.0.1"

                  Sollte auf dem Server z.B. nur PHP4 installiert sein, sollte das der Grund sein.

                  Ich hoffe das hilft Dir weiter.

                  LG
                  Stefan
                  • Antwort von Frаnk Βurgһаrdt 0
                    Re: Welcher Fehler steckt iin folgendem PHP-Programm?
                    Hallo Günter,

                    das ist leider sehr speziell und im Augenblick habe ich nicht die Zeit für eine Analyse.
                    Sorry.

                    Gruß, Frank