2010-01-05 4 views
12

mettre juste dans le contexte de clarifier la question principale:Comment utiliser getenv() en php et SetEnv dans un .htaccess avec un php-cgi compilé sur un hébergement mutualisé

Sur ma machine de développement, est PHP5.3.1 installé sur Apache en tant que module, j'utilise le développement SetEnv APPLICATION_ENVIRONMENT dans le fichier .htaccess racine de mon application. Il est alors facilement récupérable à partir de n'importe quel script php avec getenv ('APPLICATION_ENVIRONMENT').

Sur le serveur de production, sur un sharedhost (dreamhost), je me suis compilé php5.3.1 car il n'était pas directement supporté. Tout fonctionne bien, sauf que getenv ('APPLICATION_ENVIRONMENT') renvoie false.

Dans le .htaccess racine sharedhost pour mon domaine, j'utilise ce fichier .htaccess

Options +ExecCGI 
AddHandler php-cgi .php 
Action php-cgi /cgi-bin/php.cgi 

<FilesMatch "^php5?\.(ini|cgi)$"> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
</FilesMatch> 

Options -indexes 

php5.cgi réside dans/cgi-bin et fonctionne très bien. Bien sûr, dans le dossier racine de mon application j'ai une autre définition .htaccess:

SetEnv APPLICATION_ENVIRONMENT production 

Mais lorsque vous utilisez getenv (« APPLICATION_ENVIRONMENT ») il retourne faux, toute idée comment résoudre ce problème?

+0

Il suffit de deviner: votre hôte ne permet peut-être pas que cette directive soit surchargée dans les fichiers .htaccess? –

Répondre

11

Ok, j'ai enfin compris. Sur dreamhost, il est possible d'utiliser fastcgi et donc de déclarer des variables d'environnement avec lui. Il consiste simplement à ajouter ce script simple

#!/bin/sh 
export PHP_FCGI_CHILDREN=2 
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi 

Où est situé mon PHP5.3.1 compilé. chmod 744 sur ce fichier appelé dispatch.fcgi qui sera autorisé plus de mémoire par watchdog dreamhost.

Après que j'ai ajouté à mon domaine .htaccess les éléments suivants:

Options +ExecCGI 
AddHandler fastcgi-script fcg fcgi fpl 
AddHandler php5-fastcgi .php 
Action php5-fastcgi /dispatch.fcgi 

maintenant à la racine de l'application que j'ai une autre .htaccess avec:

SetEnv APPLICATION_ENVIRONMENT staging 

Dans un script php est peut être récupérée via getenv ('REDIRECT_APPLICATION_ENVIRONMENT');

+0

oh merci !!! Je perdais mes cheveux en essayant de définir une variable d'environnement dans .htaccess. J'ai réussi à le faire en changeant PHP de l'exécution en tant qu'application CGI à FastCGI. –

+5

Pourquoi utilisez-vous getenv ('REDIRECT_APPLICATION_ENVIRONMENT') au lieu de getenv ('APPLICATION_ENVIRONMENT')? –

+0

Pour que cela fonctionne pour moi, j'ai dû laisser de côté la partie "REDIRECT_" de la variable d'environnement. –

9

Pour la directive SetEnv à travailler, votre service d'hébergement doit avoir le module mod_env activé ...

Mais, même si elle est activée, peut-être vous n'avez pas la permission d'utiliser SetEnv. Pour être sûr que le problème n'est pas dans votre code, vous pouvez vérifier la sortie de phpinfo(): au bas de la page, il devrait y avoir une section contenant les variables d'environnement vu de PHP - si la vôtre est pas là-dedans, ce n'est pas bon signe pour vous ...

+0

Oui, vous avez raison, je ne trouve rien sous les variables PHP sous le serveur de production et je le fais sur ma machine de développement. Je contacte leur support pour ceci et essayera de fournir une solution de contournement. –

+0

@Steven: Bonne chance ^^ –

Questions connexes