1 votes

La directive APACHE SetEnv (de .htaccess) n'est pas envoyée au processus CGI

Je ne comprends pas le mécanisme d'Apache2 dans ce scénario :

1/ Dans cet emplacement : var/www/cgi-bin/ (droits du groupe de l'utilisateur : www-data ) J'ai un CGI script (php-cgi) qui va exécuter l'application PHP + la version de l'environnement VAR :

#!/bin/bash
# file : var/www/cgi-bin/cgi-php
exec "/usr/bin/php-cgi$PHP_VERSION"

Ce script a : chmod a+x exécuté au moment de l'exécution par l'utilisateur www-data (serveur Apache)

Toutes les versions de PHP sont situées dans le répertoire :

/usr/bin/php-cgi5.6

/usr/bin/php-cgi7.0

/usr/bin/php-cgi7.1

/usr/bin/php-cgi7.2

Toutes les versions fonctionnent bien.

2/ Dans le fichier .conf du serveur Apache, j'utilise :

<Directory "/var/www/cgi-bin">
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require all granted
    AllowOverride All
</Directory>

SetEnv PHP_VERSION 7.1
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/
Action php-cgi /cgi-bin-php/php-cgi
AddHandler php-cgi .php

Quand Apache2 redémarre, je peux voir dans http : Version PHP 7.1 chargé (fonctionne bien).

3/ Si dans le fichier .htaccess je mets une autre variable PHP_VERSION, celle-ci n'est pas envoyée ?

Fichier : /var/www/html/.htaccess

SetEnv PHP_VERSION 5.6

Dans ce cas, le fichier .htaccess ne fait rien du tout. Dans http je peux voir : PHP Version 7.1

Question : Pourquoi SetEnv PHP_VERSION X.X au moment de l'exécution fonctionne (lorsque je lance Apache2).

Et pourquoi je ne peux pas définir une nouvelle variable ( SetEnv PHP_VERSION X.X ) à partir du fichier .htaccess ? Je pense qu'Apache n'envoie pas la variable $PHP_VERSION à l'environnement Shell (Ubuntu Server 16.04).

Si quelqu'un peut m'aider... Merci beaucoup.

Source : https://www.codejam.info/2014/08/apache-get-php-version-from-environment.html

1voto

Adam V Points 178

J'ai suivi les étapes décrites dans le lien source que vous avez fourni et j'ai réussi à le faire fonctionner avec quelques légères modifications. Pour commencer, vous devez vous assurer que le répertoire dans lequel vous placez le fichier .htaccess dans est configuré de manière à ce que AllowOverride le laisse fonctionner, sinon il échouera silencieusement.

Deuxièmement, puisque vous exécutez PHP en tant que CGI, si vous deviez ouvrir une page phpinfo et vérifier les variables définies, vous verriez votre problème. En supposant que votre variable est correctement définie par votre script .htaccess il va être transmis de manière modifiée :

_SERVER["REDIRECT_PHP_VERSION"] 

Si vous modifiez simplement votre /var/www/cgi-bin/cgi-php pour rechercher l'élément REDIRECT_PHP_VERSION (comme exec "/usr/bin/php-cgi$REDIRECT_PHP_VERSION" ), alors cela fonctionnera probablement. Autre possibilité (selon cette source ), si vous utilisez fastcgi, vous n'avez pas à vous soucier du changement de nom de la variable. Si rien de tout cela ne fonctionne, je commencerais par une page phpinfo pour voir quelles variables sont passées (si elles le sont) et je travaillerais à partir de là.

Editar Je tiens à préciser que mon environnement de test dans lequel cela a fonctionné était une nouvelle installation de httpd sur un serveur CentOS 7, avec des versions SCL de PHP, et que j'ai simplement modifié les chemins en conséquence.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X