Welcher Fehler steckt iin folgendem PHP-Programm?

<?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

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“);

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

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.

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

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.

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

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!

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

Hallo Günter,

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

Gruß, Frank

$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

Die Klasse soap_server, die in der Datei 'lib/nusoap.php deklariert ist, hat anscheinend keine Methode namens „setClass“

klasse soap hat keine methode setClass ohne übergabeparameter.

cu
harald
***********************