[OpenLayers-Users] Problems with setting up a proxy.php

Gabriele Seitz ml-seitz at web.de
Wed Sep 14 07:22:19 EDT 2011


Hi,

I have got problems, getting a proxy-server for using WFS running on my
linux-server. Geoserver is ok and serving WMS. 
I gave up on getting to run proxy.cgi, as described in
"http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost",
but in this forum found a hint on a proxy.php

This is what I did (using firefox 6.0.2):
I copied the proxy.php to a location on the server where I can call ist by
typing "http://sub.domain.com/proxy.php?url="

Firefox shows:
XML-Verarbeitungsfehler: Kein Element gefunden
Adresse: http://sub.domain.com/proxy.php?url=
Zeile Nr. 2, Spalte 1:

(which is something like "XML-computing error. no element found, adress
http... line 2, column 1")

In my script, that defines the WFS, I am using 'OpenLayers.ProxyHost=
"http://sub.domain.com/proxy.php?url=";' before defining a WFS-layer

Definition of WFS like this:

		var pointlayer =new OpenLayers.Layer.Vector("WFS", {
			strategies: [new OpenLayers.Strategy.BBOX()],
			protocol: new OpenLayers.Protocol.WFS({
			    url:  "http://sub.domain.com/geoserver/MMPbasic/wfs",	   
			    featureType: "gis_elemente",
			    featureNS: "http://sub.domain.com/geoserver/MMPbasic"
			}),
			styleMap: new OpenLayers.StyleMap({
			    strokeWidth: 3,
			    strokeColor: "#333333"
			}),
		    });

Firebug shows:
XML-Verarbeitungsfehler: Kein Element gefunden Adresse:
moz-nullprincipal:{ff05177f-b54a-42f3-a833-4eb51f10ca69} Zeile Nr. 1, Spalte
1:
which is basicly the same as above, except that it doesn't show the adress
but some mozilla-stuff.

In DOM I find the layer, but no features in it.

Definition of WMS from the same source is okay and shows correctly
		var flaglayer = new OpenLayers.Layer.WMS("WMS",
			"http://sub.domain.com/geoserver/MMPbasic/wms",
			{    
				layers: 'MMPbasic:gis_elemente',
				transparent:true
			}
		);
CetCapabilities-Request
http://sub.domain.com/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities
seems okay to me. I can see the requested featuretype.

Is there something wrong with my code or with the Proxy. I give you the code
of proxy.php at the end.

Thanks for helping.

Gabriele

the proxy.php:

<?php
 	
 	// Taken from Community Mapbuilder svn trunk
 	//
http://svn.codehaus.org/mapbuilder/trunk/mapbuilder/server/php/proxy.php
 	// on 10 September 2008
 	
 	/*
 	License: LGPL as per: http://www.gnu.org/copyleft/lesser.html
 	$Id: proxy.php,v 1.2 2008-09-10 14:21:44 tkralidi Exp $
	$Name:  $
 	*/
	

////////////////////////////////////////////////////////////////////////////////
	// Description:
 	// Script to redirect the request http://host/proxy.php?url=http://someUrl
 	// to http://someUrl .
 	//
	// This script can be used to circumvent javascript's security requirements
	// which prevent a URL from an external web site being called.
 	//
 	// Author: Nedjo Rogers
 
////////////////////////////////////////////////////////////////////////////////
 	
 	// read in the variables
 	
 	if(array_key_exists('HTTP_SERVERURL', $_SERVER)){
 	  $onlineresource=$_SERVER['HTTP_SERVERURL'];
	}else{
 	  $onlineresource=$_REQUEST['url'];
 	}
 	$parsed = parse_url($onlineresource);
 	$host = @$parsed["host"];
 	$path = @$parsed["path"] . "?" . @$parsed["query"];
 	if(empty($host)) {
 	  $host = "localhost";
 	}
 	$port = @$parsed['port'];
 	if(empty($port)){
 	  $port="80";
 	}
 	$contenttype = @$_REQUEST['contenttype'];
 	if(empty($contenttype)) {
 	  $contenttype = "text/xml";
 	}
 	$data = @$GLOBALS["HTTP_RAW_POST_DATA"];
 	// define content type
 	header("Content-type: " . $contenttype);
 	
 	if(empty($data)) {
 	  $result = send_request();
 	}
 	else {
 	  // post XML
 	  $posting = new HTTP_Client($host, $port, $data);
 	  $posting->set_path($path);
 	  $result = $posting->send_request();
 	}

 	// strip leading text from result and output result
 	$len=strlen($result);
 	$pos = strpos($result, "<");
	if($pos > 1) {
 	  $result = substr($result, $pos, $len);
 	}
 	//$result = str_replace("xlink:","",$result);
 	echo $result;
 	
 	// define class with functions to open socket and post XML
 	// from http://www.phpbuilder.com/annotate/message.php3?id=1013274 by
Richard Hundt
 	
 	class HTTP_Client {
 	  var $host;
 	  var $path;
 	  var $port;
 	  var $data;
 	  var $socket;
 	  var $errno;
 	  var $errstr;
 	  var $timeout;
 	  var $buf;
 	  var $result;
 	  var $agent_name = "MyAgent";
 	  //Constructor, timeout 30s
 	  function HTTP_Client($host, $port, $data, $timeout = 30) {
 	    $this->host = $host;
 	    $this->port = $port;
 	    $this->data = $data;
 	    $this->timeout = $timeout;
 	  }
 	 
 	  //Opens a connection
 	  function connect() {
 	    $this->socket = fsockopen($this->host,
 	      $this->port,
	      $this->errno,
 	      $this->errstr,
 	      $this->timeout
 	      );
 	    if(!$this->socket)
 	      return false;
 	    else
 	      return true;
 	  }
 	 
 	  //Set the path
 	  function set_path($path) {
 	    $this->path = $path;
 	  }
 	 
 	  //Send request and clean up
 	  function send_request() {
 	    if(!$this->connect()) {
 	      return false;
 	    }
 	    else {
 	      $this->result = $this->request($this->data);
 	      return $this->result;
 	    }
 	  }
 	 
 	  function request($data) {
 	    $this->buf = "";
 	    fwrite($this->socket,
 	      "POST $this->path HTTP/1.0\r\n".
 	      "Host:$this->host\r\n".
	      "User-Agent: $this->agent_name\r\n".
 	      "Content-Type: application/xml\r\n".
	      "Content-Length: ".strlen($data).
	      "\r\n".
	      "\r\n".$data.
 	      "\r\n"
 	    );
	 
 	    while(!feof($this->socket))
	      $this->buf .= fgets($this->socket, 2048);
 	      $this->close();
 	      return $this->buf;
 	  }
 	 
 	 
 	  function close() {
 	    fclose($this->socket);
 	  }
	}
 	
	
 	
 	function send_request() {
 	  global $onlineresource;
	  $ch = curl_init();
 	  $timeout = 5; // set to zero for no timeout
	
	  // fix to allow HTTPS connections with incorrect certificates
 	  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
 	
 	  curl_setopt ($ch, CURLOPT_URL,$onlineresource);
 	  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
 	  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 	  curl_setopt ($ch, CURLOPT_ENCODING , "gzip, deflate");
 	
	  $file_contents = curl_exec($ch);
 	  curl_close($ch);
	  $lines = array();
 	  $lines = explode("\n", $file_contents);
 	  if(!($response = $lines)) {
 	    echo "Unable to retrieve file '$service_request'";
 	  }
 	  $response = implode("",$response);
 	  return $response;
 	}

 	?> 


--
View this message in context: http://osgeo-org.1803224.n2.nabble.com/Problems-with-setting-up-a-proxy-php-tp6792124p6792124.html
Sent from the OpenLayers Users mailing list archive at Nabble.com.


More information about the Users mailing list