Environment variables and PHP

前端 未结 4 988
抹茶落季
抹茶落季 2020-12-09 04:34

I have an ubuntu server with a handful of custom environment variables set in /etc/environment as per the ubuntu community recommendation

When I use php from the com

相关标签:
4条回答
  • 2020-12-09 04:47

    The problem is when you run the php-fpm. The process not load the environment.
    You can load it in the startup script.
    My php-fpm is install by apt-get.
    So modify the

    /etc/init.d/php5-fpm

    and add (beware the space between the dot and the slash)

    . /etc/profile

    and modify the /etc/profile to add

    . /home/user/env.sh

    In the env.sh. You can export the environment whatever you need.

    Then modify

    php-fpm.conf

    add env[MY_ENV_VAR_1] = 'value1' under the [www] section.
    Last. restart the php-fpm. You'll get the environment load by the fpm.

    0 讨论(0)
  • 2020-12-09 04:48

    Adding on to the answers above, I was running php-fpm7 and nginx in an alpine:3.8 docker container. The problem that I faced was the env variables of USER myuser was not getting copied into the USER root

    My entrypoint for docker was

    sudo nginx  # Runs nginx as daemon
    sudo php-fpm7 -F -O  # Runs php-fpm7 in foreground
    

    The solution for this was

    sudo -E nginx
    sudo -E php-fpm7 -F -O
    

    -E option of sudo copies all env variables of current user to the root

    Of course, your php-fpm.d/www.conf file should have clear_env=no

    And FYI, if you're using a daemon service like supervisord they have their own settings to copy the env. For example, supervisord has setting called copy_env=True

    0 讨论(0)
  • 2020-12-09 04:51

    1. Setting environment variables automatically in php-fpm.conf

    clear_env = no
    


    2. Setting environment variables manually in php-fpm.conf

    env[MY_ENV_VAR_1] = 'value1'
    env[MY_ENV_VAR_2] = 'value2'
    


    ! Both methods are described in php-fpm.conf:

    Clear environment in FPM workers Prevents arbitrary environment variables from reaching FPM worker processes by clearing the environment in workers before env vars specified in this pool configuration are added. Setting to "no" will make all environment variables available to PHP code via getenv(), $_ENV and $_SERVER. Default Value: yes

    clear_env = no
    


    Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from the current environment. Default Value: clean env

    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp
    


    I found solution in this github discussion .

    0 讨论(0)
  • 2020-12-09 04:59

    It turns out that you have to explicitly set the ENV vars in the php-fpm.conf

    Here's an example:

    [global]
    pid = /var/run/php5-fpm.pid
    error_log = /var/log/php5-fpm.log
    
    [www]
    user = www-data
    group = www-data
    listen = /var/run/php5-fpm.sock
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    chdir = /
    env[MY_ENV_VAR_1] = 'value1'
    env[MY_ENV_VAR_2] = 'value2'
    
    0 讨论(0)
提交回复
热议问题