Umgebungsvariablen in fastCGI Anwendung erfragen

Spankmaster79

Grünschnabel
Hallo,

ich will eigentlich nur ganz simple die Umgebungsvariablen meines .fcgi Scripts bekommen. Das echo.cpp von fastcgi.com hab ich ja auch zum laufen bekommen. Nun würde ich das ganze nur gerne in einer Klasse kapseln.

Hier mein Vorschlag der aber leider nicht funktioniert....hab mich vielleicht verpointert...

Hier die main:
Code:
/**
* Sebastian Beyer, 10.11.2005
* nun doch fastCGI.....komm mal in die Puschen....
*/
#include <cstdlib> //for getenv
#include <iostream.h>
#include <string>

#include "Fcgi_wrapper.h" /* fcgi Environment output */
#include "fcgi_stdio.h" /* fcgi library; put it first*/



int count;
char* hostname;


void initialize(void)
{
	hostname = getenv("OS");
	count=0;
		

}

void main(void)
{
/* Initialization. */  
	initialize();	
	FCGX_Request request; 
	
	Fcgi_wrapper fcgi(&request);

/* Response loop. */
  while (FCGI_Accept() >= 0)   {
    printf("Content-type: text/html\r\n"
           "\r\n"
           "<title>FastCGI Hello! (C, fcgi_stdio library)</title>"
           "<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>"
           "Request number %d running on host <i>%s</i>\n",
            ++count, (hostname ? hostname:"OS not set"));
	printf(fcgi.get_server_name() ? fcgi.get_server_name():"fcgi request not working");
  }
}

Hier die .h meiner Klasse:

Code:
#include <string>
#include "fcgio.h"

class Fcgi_wrapper  
{
public:
	//****Kosnt&Destrukt****
	Fcgi_wrapper(FCGX_Request*);
	virtual ~Fcgi_wrapper();

	//****Functions****

	char* getenv(const std::string& name, FCGX_ParamArray envp);
	char* get_server_name(); 
private:
	FCGX_Request* m_request;
};

Hier die .cpp meiner Klasse

Code:
#include "Fcgi_wrapper.h"

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////



Fcgi_wrapper::Fcgi_wrapper(FCGX_Request* request)
{
	
	m_request=request;
}

Fcgi_wrapper::~Fcgi_wrapper()
{

}

char* Fcgi_wrapper::getenv(const std::string& name, FCGX_ParamArray envp)
{
	char * result;
	char * t;

	t = FCGX_GetParam( name.c_str(), envp );

	//if result==NULL, check the environ
	if ( t )
		result = t;

	return ( result );

}


char* Fcgi_wrapper::get_server_name() 
{
	return (getenv("SERVER_NAME", m_request->envp));

}

Kann mir hier dabei jemand helfen Die Support Email Liste ist nicht gerade sehr hilfreich

Gruß
Spanky
 
Ist zwar schon etwas lange her aber ich stehe im Moment vor genau demselben Problem:

Apache 2.0 / mod_fastcgi => Mein Programm behauptet, nur die Umgebungsvariablen
_FCGI_SHUTDOWN_EVENT_=2392
_FCGI_MUTEX_=2388
... damit kann man ja nicht wirklich viel anfangen (Ja, toll, ich kann statische Seiten in C++ programmieren ;-) )

Zunächst dachte, dass es daran liegen könnte, dass mein Programm ein .NET Assembly ist (C++/CLI) aber bei meinen .NET-CGI Programmen hab ich brav alle Umgebungsvariablen auslesen können.

Vielleicht liegts auch an dem, doch schon ziemlich angestaubten mod_fastcgi... hab gehört es soll da bessere Alternativen geben...
 
Wow, 7 Monate keine Antwort und dann endlich jemand mit demselben Problem! Hab meine Anwendung ohne fastCGI vorerst gelöst.

Ich kann dir vorerst nur sagen das die Umgebungsvariablen des Webservers eigentlich auch uninteressant sein sollten da fastCGI ja die Daten vom Client über TCP versendet. Aber wo ist das TCP Päckchen mit den Daten? Klink dich lieber in die Email List bei fastCGI ein da dir sonst keiner helfen kann.

Gruß
Spanky
 
Nein, nein das ist ja der Punkt: libfcgi von FastCGI Home emuliert eine CGI Umgebung. Damit programmierte Anwendungen unterstützen beide Interfaces CGI und FastCGI.

Naja... ich werde jetzt ebenfalls einen anderen Weg gehen: das .NET Framework bietet mit dem HttpListener Webserver Funktionalitäten. Gepaart mit mod_rewrite und dem [P] Flag kann man auch ohne Fast- oder SCGI separate Anwendungsserver umsetzen... :)
 
Zurück