I'm facing an issue where php or apache is unable to load variables from /etc/environment, and only if php code is run trough browser.
I have the php-fpm/www.conf clear_env set to no
clear_env = no
and line added to /etc/sysconfig/php-fpm
EnvironmentFile=/etc/environment
After restart I'm able to see variables when running
php -r "print_r(\$_ENV);"
sudo -u apache env
sudo -u apache php -r "print_r(\$_ENV);"
But if I open test.php in the browser they are not there
<?php
$output = shell_exec('env');
echo '<pre>';
echo $output;
print_r($_ENV);
print_r($_SERVER);
print_r(getenv());
echo '</pre>';
phpinfo();
?>
I cannot for my life figure out why it only fails on browser where clearly apache user can see variables from /etc/environment
UPDATE
I was unable to work out why it would work on one vm and not the other. So decided to go a different way. I now inject environmental variables to /etc/php-fpm.d/env.conf when there is a change in /etc/environment, using below script:
fpm_file="/etc/php-fpm.d/env.conf"
if [[ ! -f "$fpm_file" ]]; then
sudo touch $fpm_file
echo '[www]' | sudo tee -a $fpm_file > /dev/null
fi
i=0;
if [[ -f "$fpm_file" ]]; then
vars=$(sudo grep -v '#' /etc/environment | sed '/^[[:space:]]*$/d' | sed -e 's/^/env[/' | sed 's/=/]=/g')
while read -r line; do
chk=$(grep -F "$line" $fpm_file | wc -l )
if (( "$chk" == 0 )); then
echo "$line" | sudo tee -a $fpm_file > /dev/null
((i++))
fi
done <<< "$vars"
if (( "$i" > 0 )); then
echo "New enviromental variables found, added to php, restarting php-fpn..."
sudo service php-fpm stop
sleep 5
sudo service php-fpm start
echo "All done!"
fi
fi
I run that script via .bashrc on login. That works well and I can maintain env vars in one file instead of multiple. Not adding this as answer as the original issue is still present and unresolved.