php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.10.2011, 12:55  
Neuer Benutzer
 
Registriert seit: 25.10.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Nofoxx befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] failed to load external entity 'url'/SOAP-ERROR:Parsing WSDL:Couldn't load

Hi,

ich hänge jetzt schon eine Weile an einem Problem fest und finde den Fehler einfach nicht.

Zur Situation:
Ich will mithilfe eines PHP-Scripts per WebServices die Kontakte von unserem Exchange Synchronisieren.
Das Script ist soweit fertig und funktioniert auch(!), sofern ich es im Browser über xampp aufrufe. Da das Script aber als CronJob über die Konsole laufen soll, reicht das nicht.

Zum Fehler:
Sobald ich das Script auf Kommandozeilenebene an die php.exe übergebe und ausführe bekomme ich folgenden Fehler:

Code:
PHP Warning:  SoapClient::SoapClient(): I/O warning : failed to load external entity "Services.wsdl" in D:\*Path*\functions.php on line 11
PHP Stack trace:
PHP   1. {main}() D:\*Path*\index.php:0
PHP   2. contact_sync() D:\*Path*\index.php:8
PHP   3. SoapClient->SoapClient() D:\*Path*\functions.php:11

Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity "Services.wsdl" in D:\*Path*\functions.php on line 11

Call Stack:
    0.0008     339544   1. {main}() D:\*Path*\index.php:0
    0.0821     980472   2. contact_sync() D:\*Path*\index.php:8
    0.0822     981432   3. SoapClient->SoapClient() D:\*Path*\functions.php:11

PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'Services.wsdl' : failed to load external entity "Services.wsdl" in D:\*Path*\functions.php on line 11
PHP Stack trace:
PHP   1. {main}() D:\*Path*\index.php:0
PHP   2. contact_sync() D:\*Path*\index.php:8
PHP   3. SoapClient->SoapClient() D:\*Path*\functions.php:11

Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'Services.wsdl' :failed to load external entity "Services.wsdl" in D:\*Path*\functions.php on line 11
Was mich am meisten irritiert ist, dass ein fast Identisches Script (eine Termin Synchronisation) mit der selben Klasse, gleicher "Services.wsdl" und fast Identischem Anfangscode bereits stündlich ohne Fehler läuft.

Hier der Code:

index.php
PHP-Code:
<?php
ini_set
("display_errors""On");
error_reporting(E_ALL);

include 
"class.php";
include 
"functions.php";

contact_sync("name@domain.de");
?>
functions.php
PHP-Code:
<?php
function contact_sync($mail){

stream_wrapper_unregister('https');
stream_wrapper_register('https''ExchangeNTLMStream') or die("Failed to register protocol");

$ErrorHandler[0] = "Success";
$ErrorHandler[1] = "NoError";
$ErrorHandler[2] = "-";
$wsdl     "Services.wsdl";
$client    = new ExchangeNTLMSoapClient($wsdl); # < Zeile 11

$FindFolder->Traversal "Shallow";
$FindFolder->FolderShape->BaseShape "AllProperties";
$FindFolder->ParentFolderIds->DistinguishedFolderId->Id "contacts";
$FindFolder->ParentFolderIds->DistinguishedFolderId->Mailbox->EmailAddress $mail;
$result $client->FindFolder($FindFolder);

...
}
?>
class.php
PHP-Code:
<?php
class NTLMSoapClient extends SoapClient {
        function 
__doRequest($request$location$action$version) {
            
$headers = array(
                
'Method: POST',
                
'Connection: Keep-Alive',
                
'User-Agent: PHP-SOAP-CURL',
                
'Content-Type: text/xml; charset=utf-8',
                
'SOAPAction: "'.$action.'"',
            );  
            
$this->__last_request_headers $headers;
            
$ch curl_init($location);
            
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
curl_setopt($chCURLOPT_HTTPHEADER$headers);
            
curl_setopt($chCURLOPT_POSTtrue );
            
curl_setopt($chCURLOPT_POSTFIELDS$request);
            
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
            
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_NTLM);
            
curl_setopt($chCURLOPT_USERPWD$this->user.':'.$this->password);
            
            
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
            
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
            
            
$response curl_exec($ch);
            
            return 
$response;
        }   
        function 
__getLastRequestHeaders() {
            return 
implode("n"$this->__last_request_headers)."n";
        }   
    }

class 
ExchangeNTLMSoapClient extends NTLMSoapClient {
        protected 
$user '*user*';
        protected 
$password '*pw*';
    }

class 
NTLMStream {
        private 
$path;
        private 
$mode;
        private 
$options;
        private 
$opened_path;
        private 
$buffer;
        private 
$pos;

        public function 
stream_open($path$mode$options$opened_path) {
            echo 
"[NTLMStream::stream_open] $path , mode=$mode n";
            
$this->path $path;
            
$this->mode $mode;
            
$this->options $options;
            
$this->opened_path $opened_path;
            
$this->createBuffer($path);
            return 
true;
        }

        public function 
stream_close() {
            echo 
"[NTLMStream::stream_close] n";
            
curl_close($this->ch);
        }

        public function 
stream_read($count) {
            echo 
"[NTLMStream::stream_read] $count n";
            if(
strlen($this->buffer) == 0) {
                return 
false;
            }
            
$read substr($this->buffer,$this->pos$count);
            
$this->pos += $count;
            return 
$read;
        }

        public function 
stream_write($data) {
            echo 
"[NTLMStream::stream_write] n";
            if(
strlen($this->buffer) == 0) {
                return 
false;
            }
            return 
true;
        }

        public function 
stream_eof() {
            echo 
"[NTLMStream::stream_eof] ";
            if(
$this->pos strlen($this->buffer)) {
                echo 
"true n";
                return 
true;
            }
            echo 
"false n";
            return 
false;
        }

        
/* return the position of the current read pointer */
        
public function stream_tell() {
            echo 
"[NTLMStream::stream_tell] n";
            return 
$this->pos;
        }

        public function 
stream_flush() {
            echo 
"[NTLMStream::stream_flush] n";
            
$this->buffer null;
            
$this->pos null;
        }

        public function 
stream_stat() {
            echo 
"[NTLMStream::stream_stat] n";
            
$this->createBuffer($this->path);
            
$stat = array(
                
'size' => strlen($this->buffer),
            );
            return 
$stat;
        }

        public function 
url_stat($path$flags) {
            echo 
"[NTLMStream::url_stat] n";
            
$this->createBuffer($path);
            
$stat = array(
                
'size' => strlen($this->buffer),
            );
            return 
$stat;
        }

        
/* Create the buffer by requesting the url through cURL */
        
private function createBuffer($path) {
            if(
$this->buffer) {
                return;
            }
            echo 
"[NTLMStream::createBuffer] create buffer from : $pathn";
            
$this->ch curl_init($path);
            
curl_setopt($this->chCURLOPT_RETURNTRANSFERtrue);
            
curl_setopt($this->chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
            
curl_setopt($this->chCURLOPT_HTTPAUTHCURLAUTH_NTLM);
            
curl_setopt($this->chCURLOPT_USERPWD$this->user.':'.$this->password);
            echo 
$this->buffer curl_exec($this->ch);
            echo 
"[NTLMStream::createBuffer] buffer size : ".strlen($this->buffer)."bytesn";
            
$this->pos 0;
        }
    }
    
class 
ExchangeNTLMStream extends NTLMStream {
        protected 
$user '*user*';
        protected 
$password '*pw*';
    }
?>
*Quelle der Klasse

Alle Dateien liegen in ein und demselben Ordner.
Ausgeführt wird das Script auf einem Windows XP Prof. Betriebssystem.
PHP-Version: PHP 5.3.1

Ich habe schon darüber nachgedacht ob es sich hierbei vielleicht um ein Rechtethema handeln könnte, aber der Cron wird als Admin ausgeführt und es dürfte keine Einschränkungen geben.

Ich wäre euch echt dankbar wenn Ihr mir weiterhelfen könntet, falls Ihr eine Idee habt.

Vielen Dank schon mal im Voraus
Nofoxx
Nofoxx ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.10.2011, 14:29  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Ob es ein Rechteproblem ist, kannst du doch relativ leicht prüfen, indem du in einem zweiten Script einfach mal die WSDL einliest und wieder ausgibt. Wie schauen die Include-Paths aus? Die WSDL schon mal absolut angegeben statt relativ?
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 25.10.2011, 16:13  
Neuer Benutzer
 
Registriert seit: 25.10.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Nofoxx befindet sich auf einem aufstrebenden Ast
Standard

Ich habe die "Services.wsdl" jetzt mal absolut angegeben und muss zugeben ich komme mir ziemlich dumm vor es nicht vorher mal versucht zu haben.
Das Script lief einwandfrei ab.

Wobei ich es nicht ganz nachvollziehen kann, da in dem anderen Script welches ich erwähnt hatte, die "Services.wsdl" auch relativ angegeben ist und er dort nicht meckert.

Vielen Dank für Hilfe
Nofoxx ist offline   Mit Zitat antworten
Alt 26.10.2011, 13:15  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das Problem könnte mit dem Arbeitspfad zusammenhängen - je nachdem ob dein Script über Webserver läuft oder direkt per Konsole , gelten unterschiedliche Einstellungen - unter anderem zum Arbeitspfad - denn ohne Webserver gibts ja kein htdocs oder so als document-root
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 26.10.2011, 14:07  
Neuer Benutzer
 
Registriert seit: 25.10.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Nofoxx befindet sich auf einem aufstrebenden Ast
Standard

Das Stimmt, nur werden beide Scripte von der gleichen Ebene ausgeführt und beide Scripte werden über die Konsole an die selbe php.exe übergeben und ausgeführt.

Der Befehl sieht dann für jedes Script ungefähr so aus:
Code:
CMD
D:\Cron\Script1> D:\xampp\php\php.exe D:\Cron\Script1\index.php
Code:
CMD
D:\Cron\Script2> D:\xampp\php\php.exe D:\Cron\Script2\index.php
In beiden Scripten werden die php includes relativ angegeben, und es funktioniert. Einzig und allein bei dem laden der "Services.wsdl" kann Script2 nicht mit einem relativen Pfad umgehen und braucht eine absolute Angabe.

Ich hoffe ich habe jetzt nichts falsch verstanden aber ich kann es mir nicht erklären.


Die CronJobs laufen momentan auch erstmal alle einwandfrei und auch wenn ich es nicht so schön finde dort eine absolute Angabe zu haben, stellt es für die Zukunft kein Problem da.

Falls Du aber eine Idee hast, würde es mich trotzdem Interessieren.
Nofoxx ist offline   Mit Zitat antworten
Alt 26.10.2011, 14:55  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.631
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

PHP-Code:
echo getcwd(); 
am Scriptanfang. Dann "siehst" du das Arbeitsverzeichnis des Scriptes und vermutest nicht nur das es stimmt.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 26.10.2011, 15:09  
Neuer Benutzer
 
Registriert seit: 25.10.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Nofoxx befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mir das mal ausgeben lassen und habe folgende Arbeitsverzeichnisse für das jeweilige Script ausgegeben bekommen:

D:\Cron\Script1
D:\Cron\Script2

Hätte mich jetzt aber auch überrascht wäre mir etwas anderes ausgegeben worden, da ich der Konsole ja sage wo das Script ausgeführt werden soll.
Nofoxx ist offline   Mit Zitat antworten
Alt 26.10.2011, 23:09  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
$FileForWSDL realpath('my/fucking/path/to/the/wsdl_data.wsdl');

if ( 
$FileForWSDL ) {
   
$wsdlC = new SoapClient($FileForWSDL, array( /* ... */ ));
} else {
   die(
'Destionation-URI for WSDL-File unreachable, try again later or check configuration.');

Welche Rechte hat dein Cron-Benutzerkonto denn in dem Verzeichnis ? Erbt der User von eine Gruppe ? Wie stehts um die spezifischen Rechte für die Datei ? Bedenke das auch Windows lesbarkeit und ausführbarkeit an Besitzer der Dateien binden kann.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 27.10.2011, 09:47  
Neuer Benutzer
 
Registriert seit: 25.10.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Nofoxx befindet sich auf einem aufstrebenden Ast
Standard

Ich habe noch ein wenig rumprobiert und es lag wohl am Ausführungspfad.
Da ich den CronJob für das Script kopiert habe muss er irgendwo noch falsche Einstellungen übernommen haben.
Wo genau kann ich leider nicht genau sagen, da ich alles überprüft hatte und nichts finden konnte was den Fehler hätte hervorrufen können. Vor allem die Tatsache, dass er bei den includes keine Probleme hatte, sondern erst beim Lesen der Services.wsdl ergibt sich mir nicht oder ist das durchaus logisch? Vielleicht habe ich, was das angeht auch noch ein kleines Verständnisproblem.

Ich habe den CronJob jedenfalls einmal komplett neu erstellt und jetzt läuft es, auch mit relativer Pfadangabe.

Ich möchte mich nochmals bei euch für die Hilfe bedanken,
Vielen Dank
Nofoxx ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP Script funktioniert nicht mehr. PhvK PHP Einsteiger 33 30.08.2011 08:59
HTML-String auslesen bit4fox PHP Einsteiger 10 08.01.2011 16:33
[Erledigt] SOAP-ERROR: failed to load external entity pysio PHP Tipps 2010 1 26.07.2010 15:40
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
failed to load external entity, failed to load external entity php soap, fatal error: soap-error: parsing wsdl: couldn\'t load from, soap failed to load external entity, soap-error parsing wsdl couldn\'t load from failed to load external entity, soap-error: parsing wsdl: couldn\'t load from, failed to load external entity soap, php soap failed to load external entity, php soap parsing wsdl: couldn\'t load from, soapclient::soapclient failed to load external, php fatal error: soap-error: parsing wsdl: couldn\'t load from, soap-error: parsing wsdl: couldn\'t load from failed to load external entity, i/o warning : failed to load external entity, load script failed, [wsdl] soap-error: parsing wsdl: couldn\'t load from \', soap error failed to load external entity, wsdl ajax parser error, \i/o warning : failed to load external entity\ php, php i/o warning failed to load external entity, soap-error: parsing wsdl: couldn\'t load from stack trace

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum