Назад | Перейти на главную страницу

Директива APACHE SetEnv (из .htaccess) не отправляется в процесс CGI

Я не понимаю механизм Apache2 в этом сценарии:

1 / В этом месте: var / www / cgi-bin / (права группы пользователя: www-data) у меня есть CGI-скрипт (php-cgi), который будет выполнять приложение PHP + версия среды VAR:

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

В этом скрипте есть: chmod a+x выполняется во время выполнения пользователем www-data (сервер Apache)

Все версии PHP находятся в:

/usr/bin/php-cgi5.6

/usr/bin/php-cgi7.0

/usr/bin/php-cgi7.1

/usr/bin/php-cgi7.2

Все версии работают нормально.

2 / В файле .conf сервера Apache я использую:

<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

При перезапуске Apache2 я вижу в http: версию PHP 7.1 загружен (отлично работает).

3 / Если в файле .htaccess я помещаю другую переменную PHP_VERSION, она не отправляется ??

Файл: /var/www/html/.htaccess

SetEnv PHP_VERSION 5.6

В этом случае файл .htaccess вообще ничего не делает. В http я вижу: PHP версии 7.1

Вопрос: почему SetEnv PHP_VERSION X.X во время выполнения работает (когда я запускаю Apache2).

И почему я не могу установить новую переменную (SetEnv PHP_VERSION X.X) из файла .htaccess? Я думаю, что Apache не будет отправлять переменную $ PHP_VERSION в среду оболочки (Ubuntu Server 16.04).

Если кто-нибудь может мне помочь ... Большое спасибо.

Источник : https://www.codejam.info/2014/08/apache-get-php-version-from-environment.html

Я выполнил шаги, описанные в предоставленной вами исходной ссылке, и смог заставить его работать с некоторыми небольшими изменениями. Для начала убедитесь, что каталог, в который вы помещаете, .htaccess файл в настроен так, чтобы AllowOverride позволяет ему работать, иначе он просто потерпит неудачу.

Во-вторых, поскольку вы используете PHP как CGI, если бы вы отбросили страницу phpinfo и проверили, какие переменные установлены, вы бы увидели свою проблему. Предполагая, что ваша переменная успешно установлена ​​вашим .htaccess файл, он будет передан в измененном виде:

_SERVER["REDIRECT_PHP_VERSION"] 

Если вы просто измените свой /var/www/cgi-bin/cgi-php файл, чтобы найти REDIRECT_PHP_VERSION переменная (как exec "/usr/bin/php-cgi$REDIRECT_PHP_VERSION"), то это, скорее всего, сработает. Альтернативно (согласно этот источник), если вы используете fastcgi, вам не нужно беспокоиться об изменении имени переменной. Если ничего из этого не работает, я бы начал со страницы phpinfo и посмотрел, какие переменные передаются (если вообще), и буду работать оттуда.

редактировать: просто отмечу, что моя тестовая среда, в которой это работало, была на новой установке httpd на сервере CentOS 7 и с использованием SCL-версий PHP и с соответствующим изменением путей.