Я не понимаю механизм 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 и с соответствующим изменением путей.