2012-01-11 4 views
1

J'ai un serveur web apache 2 fonctionnant avec mod_fcgid. Les scripts CGI sont exécutées, en passant des variables d'environnement et exec'ing puis un programme Perl, par exemple:Passer des variables d'environnement à fcgi (perl)

index.cgi: 
#!/bin/sh 
export TEST_VAR=test 
exec test.pl 

test.pl: 
#!/usr/bin/perl 
use CGI::Fast; 
while ($q = new CGI::Fast) { 
    print "Content-type: text/html\r\n\r\n"; 
    print "$ENV{TEST_VAR}"; 
} 

Cela fonctionne bien lors de l'exécution sans fcgi, mais quand ce qui lui permet (par exemple, via « SetHandler fcgid-script » dans .htaccess), le TEST_VAR n'est pas passé (pas même lors de la première exécution). En dehors de cela, fcgi semble fonctionner.

Des idées, ou des approches suggérées pour cela? Je préférerais définir l'environnement en externe comme indiqué ci-dessus pour diverses raisons de configuration, mais ce n'est pas obligatoire.

Merci!

+0

L'utilisation d'un fichier de configuration serait-elle une alternative possible? Je trouve que cela tend à rendre les choses beaucoup plus claires (et plus cohérentes en réalité) que de s'appuyer sur des variables environnementales. – Ilion

Répondre

0

Je suppose que vous devez vérifier/mettre à jour votre configuration apache.

1) D'abord, je vérifie l'environnement défini par apache. Depuis le site Web FastCGI:

Pour passer l'environnement par demande des variables aux applications FastCGI, jetez un oeil à: mod_env (SetEnv, PassEnv, UnsetEnv) ...

du manuel FCGI:

Utilisez FcgidInitialEnv pour définir les variables d'environnement pour passer à l'application FastCGI ...

Peut-être qu'il est un peu fonctionnalité de sécurité bizarre du système d'exploitation/sandbox/machine virtuelle/chroot qui modifie les vars de votre environnement avant qu'ils ne se retrouvent dans% ENV?

2) L'extension de fichier pour les scripts FastCGI est normalement .fcgi, pas .cgi ou .pl. Apache reconnaît-il l'un de vos scripts en tant que FastCGI/FCGI? Et qu'avez-vous défini dans la configuration d'Apache pour AddType/AddHandler/SetHandler/FastCgiServer?

Aussi: Je ne suis pas sûr que votre script perl reste en mémoire. L'exec du script shell génère un nouveau sous-processus perl "standard" qui devrait se terminer après l'exécution du script, ou non?