PHP und $_SERVER[‚SCRIPT_URI‘] – Beispiel Soap WSDL


Die Variablen im PHP Array $_SERVER sind sehr praktisch für die automatische Zusammenstellung von absoluten URLs.

Eine Variable davon heißt SCRIPT_URI (also anzusprechen unter $_SERVER[‚SCRIPT_URI‘])

Diese beinhaltet die komplette URL (aus der Adresszeile des Browsers) inlusive Protokoll, Port, …

Leider ist sie jedoch nicht immer verfügbar.

Nachprüfen lässt sich das mit einer php Datei mit Inhalt

<?php phpinfo();

Beim Aufruf der Seite bekommt man im Abschnitt Apache Environment alle $_SERVER Variablen zu sehen.

Falls sich hierbei $_SERVER[‚SCRIPT_URI‘] nicht findet fehlt das Apache Modul mod_rewrite bzw. es ist nicht aktiviert.

Dies lässt sich nachholen durch das Laden des entsprechenden Apache Moduls:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

Wenn das Modul geladen ist, muss es noch mit:

RewriteEngine on

aktiviert werden. Dies kann sowohl in der Konfigurationsdatei des Apache Webservers erfolgen als auch in einer .htaccess Datei im jeweiligen Script Verzeichnis.

Ebenfalls Voraussetzung für das Vorhandensein der Variable ist, dass die Webseite in einem Virtuellen Host liegt:

<VirtualHost *:80>
	ServerAdmin webmaster@domain.tld
	DocumentRoot /....
	ServerName www.domain.tld
	...
</VirtualHost>

Dies sollte jedoch bei den meisten Hostern bereits der Fall sein (auch viele Linux Distributionen liefern Ihre Apache Konfiguration bereits standardmäßig mit Virtuellen Hosts aus).

Tipp:

Abgesehen vom Erstellen absoluter Links für beispielsweise Menüeinträge einer Webseite lässt sich $_SERVER[‚SCRIPT_URI‘] auch hervorragend dazu benutzen im Zusammenhang mit SOAP Webservices die SOAP Location der ausgelieferten WSDL Dateien anzupassen.

Auszug aus einer WSDL Datei:

...
<binding name="testBinding" type="tns:testPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="login">
<soap:operation soapAction="%SOAP_LOCATION%?method=login" style="rpc" />
<wsdl:input>
...

Der dazugehörige PHP Code:

...
if( isset($_GET['wsdl']) ) {
    $wsdl = @file_get_contents( $wsdlFile );
    if( !$wsdl ) {
        die( 'invalid wsdl file' );
    }
    $wsdl = str_replace( '%SOAP_LOCATION%', $_SERVER['SCRIPT_URI'], $wsdl );
    header( 'Content-Type: text/xml' );
    echo $wsdl;
}
....

Ähnliche Artikel:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*