根据vHost中的子域更改php设置

我有一个VirtualHost的许多子域指向相同的目录。

  • moscow.myapp.com
  • paris.myapp.com

所有这些网站运行在同一个应用程序。 我只需要从一个子域更改为另一个php设置date.timezone。

我无法触摸应用程序代码。 我正在寻找一种方法,直接在vHost中这样做。

可能吗 ? 你会怎么做?

非常感谢你;

我已经尝试并研究了一种基于查找表或环境variables(由SetEnvIf设置)设置php_admin_value并使用php_value设置variables的方法,但没有发现可能适合您的任何内容(在一个VirtualHost具有所有configuration)。

作为最后的手段,我可​​以build议你一个狡猾的计划,隐藏一些代码…

使用phpconfiguration指令auto_prepend_file您可以在实际启动脚本之前执行一些代码。 在那里你可以做一个基于虚拟主机的查询,或者使用由SetEnvIf设置的variables。

Apache VirtualHostconfiguration:

 SetEnvIfNoCase Host "^sandbox.coolhaven.info$" TZ=Europe/Moscow SetEnvIfNoCase Host "^sandbox2.coolhaven.info$" TZ=Europe/Paris php_value auto_prepend_file /var/www/misc/timezone_injector.php 

/var/www/misc/timezone_injector.php

 <?php date_default_timezone_set($_ENV["TZ"]); 

当然, SetEnvIf语句可以被移到你的php代码中的switch语句中。

您的应用程序开发人员可能会怀疑在他们的代码之前发生了一些事情,因为timezone_injector.php将显示在堆栈跟踪中。 但是,如果您有一个混淆或严格的许可PHP应用程序,由于非技术原因您不能触摸,这可能是一个解决scheme。