views:

37

answers:

2

Hi,
for our project we need to set several PHP values depending on the environment (development/production), most notably session save path and some tracing and profiling settings.

We do not want to set them in the PHP script because due to some horrible legacy code which would require a lot of changes and we don't want to have to change the .htaccess every time before commiting it to git (but we require the .htaccess to be in source control).

Is there any way to do something like this in the .htaccess:

if (hostname == "dev.example.com") {
  php_value session.save_path /tmp
  [...]
}
+1  A: 

At a previous job we used used the following:

<IfDefine SERVER1>
  php_value session.save_path /tmp1
</IfDefine>

<IfDefine SERVER2>
  php_value session.save_path /tmp2
</IfDefine>

You'd then starup apache with the additional switch:

-D SERVER1 SERVER2

EDIT:

EDIT

Maybe something like the following could be a middle-ground?

if (!file_exists('.htaccess')) {

  copy('.htaccess.default', '.htaccess');

  $handle = fopen('.htaccess', 'a');

  switch ($_SERVER['HTTP_HOST']) {

    case 'dev.site':
        fwrite($handle, 'php_value .....' . "\n");
        fwrite($handle, 'php_value .....' . "\n");
    break;

    case 'live.site':
        fwrite($handle, 'php_value .....' . "\n");
        fwrite($handle, 'php_value .....' . "\n");
    break;  

  }

  fclose($handle);

}
Kieran Allen
This is one step in the right direction but the admins would definatly block this. I will try to negotiate with them but i still hope for something limited to the .htaccess
dbemerlin
This doesn't really pose any security risks however, i'm pretty sure thats as versatile as .htaccess is going to get. How about a PHP script which writes to .htaccess silently?
Kieran Allen
+5  A: 

You can define rules in Apache's virtualhost config (one step above .htaccess, you'll have to ask an administrator to edit this):

<VirtualHost *:80>                                                              
    ServerName piskvor.example.com
    ServerAlias *.host2.example.com
    php_value session.save_path /home/piskvor/tmp
</VirtualHost>
<VirtualHost *:80>                                                              
    ServerName someotherhost.example.org
    php_value session.save_path /tmp
</VirtualHost>

This gives you the possibility to configure each host differently (by hostname or a hostname wildcard). Most newer Apache setups support this.

Piskvor