Mike Mike - 1 year ago 131
PHP Question

How to get system environment variables into PHP while running CLI & Apache2Handler?

My system is Ubuntu and I have set my environment variables in


If I'm running PHP script using CLI - environment variables from
are recognized.

But, if I go to execute PHP script thru
(that is apache2handler) exactly the same script prints out NULL, meaning environment variables from
are not loaded.

The fix I did was adding variables in
and that solved the problem.

But that is two different files, which then have to be kept in sync.

How can I make PHP / Apache load and recognize environment variables from

EDIT: To clarify things, when I say 'not loaded into PHP' it means variables from
are not set in
and do not exists in
. In other words 'are not loaded into PHP'.

Answer Source

I had exactly the same problem. To solve it, I just sourced /etc/environment inside /etc/apache2/envvars.

The content of /etc/environment:

export MY_PROJECT_PATH=/var/www/my-project
export MY_PROJECT_ENV=production
export MY_PROJECT_MAIL=support@my-project.com

The content of /etc/apache2/envvars:

# Load all the system environment variables.
. /etc/environment

Now, I'm able to use these variables in the Apache Virtual Host config files and in PHP.

Here's an example of an Apache virtual host:

<VirtualHost *:80>
  ServerName my-project.com
  ServerAlias www.my-project.com
  ServerAdmin ${MY_PROJECT_MAIL}
  UseCanonicalName On

  DocumentRoot ${MY_PROJECT_PATH}/www

  # Error log.
  ErrorLog ${APACHE_LOG_DIR}/my-project.com_error.log
  LogLevel warn

  # Access log.
  <IfModule log_config_module>
    LogFormat "%h %l %u %t \"%m %>U%q\" %>s %b %D" clean_url_log_format
    CustomLog ${APACHE_LOG_DIR}/my-project.com_access.log clean_url_log_format

  # DocumentRoot directory
  <Directory ${MY_PROJECT_PATH}/www>
    # Disable .htaccess rules completely, for better performance.
    AllowOverride None
    Options FollowSymLinks Includes
    Order deny,allow
    Allow from All

    Include ${MY_PROJECT_PATH}/config/apache/inc.mime-types.conf
    Include ${MY_PROJECT_PATH}/config/apache/inc.cache-control.conf

    # Rewrite rules.
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteBase /

      # Include all the common rewrite rules (for http and https).
      Include ${MY_PROJECT_PATH}/config/apache/inc.rewriterules-shared.conf

And this is an example of how to access them with PHP:

header('Content-Type: text/plain; charset=utf-8');
print getenv('MY_PROJECT_PATH') . "\n" .
      getenv('MY_PROJECT_ENV') . "\n" .
      getenv('MY_PROJECT_MAIL') . "\n";
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download