问题描述
|
我最初在LAMP服务器上建立了一个网站,但是我的雇主需要将其转移到WISP(Windows / iis / sql服务器/ PHP ..我认为这不是一个真正的术语?)服务器,我已经这样做了。 。我使用的是IIS v 6,我读到没有
SetEnv
等效项可以在其中设置_SERVER
变量。我依靠这些变量来进行某些配置,例如DB用户/密码和用于哈希的站点密钥。出于安全原因,我强烈希望将这些内容排除在PHP代码之外。
我能想到的唯一解决方案是使用PHP.ini设置此类变量。我相信您可以设置默认的数据库连接,但是我还是不希望这样做。 PHP.ini是否具有SetEnv
等效项?
如果不是,这是否可能与IIS有关?
例如,我希望能够使用自定义_SERVER[db_user]
或_SERVER[site_key]
。在我当前的.htaccess中,我有
SetEnv db_user tandu
SetEnv site_key blocked_for_your_protection
解决方法
您可以在
php.ini
文件中设置服务器变量。检查此文件在服务器上的“ 7”命令的输出。
查看有关php.ini设置的文档。
要编辑_SERVER
设置,您必须直接在服务器中进行设置:
Apache:与htaccess和SetEnv
一起使用
IIS:* .php文件或配置中的http://www.php.net/manual/zh/function.putenv.php:
<serverVariables>
<set name=\"db_user\" value=\"abc\" />
<set name=\"site_key\" value=\"abc\" />
</serverVariables>
参见http://forums.iis.net/t/1171675.aspx
您可以在phpinfo页面上检查结果。变量必须在那里出现!
, 您总是可以用Start > Control Panel > System > Environment
设置一个真实的环境变量并读取该变量。然后,设置对机器上运行的所有软件都是可见的。
, 在PHP脚本(通常为index.php)中,我使用-
// Define application environment
defined(\'APPLICATION_ENV\') || define(\'APPLICATION_ENV\',(getenv(\'APPLICATION_ENV\') ? getenv(\'APPLICATION_ENV\') : \'production\'));
这将检查可能存储值的位置的层次结构,并在上述三元条件下默认为\'production \'。
在本地(运行Apache)上,此值从SetEnv APPLICATION_ENV \“ development \”获取值
在../Apache2/conf/extra/httpd-vhosts.conf中
<VirtualHost *:80>
ServerName foo.local
DocumentRoot \"C:\\wwwroot\\foo\"
<Directory \"C:\\wwwroot\\foo\">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SetEnv APPLICATION_ENV \"development\"
ErrorLog \"logs/foo.local-error.log\"
CustomLog \"logs/foo.local-access.log\" common
</VirtualHost>
SetEnv APPLICATION_ENV \“ development \”也可以放在.htaccess中,并且我认为.htaccess具有优先权。
当我将产品部署到生产服务器时,常量APPLICATION_ENV从具有相同名称的IIS根服务器名称“应用程序设置”获取(此服务器上的所有站点都从根继承,但您可以为其指定本地环境变量)。
可以创建的环境变量似乎是“计算机”->“属性”->“高级系统设置”-“系统变量”。 IIS根目录。然后是单个站点。