2008-10-10 85 views
1

我们将PHP 5.2.6部署到c:\ php,并在该文件夹中有php.ini文件。在Windows上,网站可以覆盖这些设置,类似于apache具有.htaccess的方式吗?例如可以通过使用PHP + IIS6的网站覆盖php.ini设置吗?

DirectoryIndex index.php index.html 
<IfModule mod_php5.c> 
php_flag magic_quotes_gpc off 
    php_flag register_globals off 
</IfModule> 
<IfModule mod_php4.c> 
    php_flag magic_quotes_gpc off 
php_flag register_globals off 
</IfModule> 

更新:

我知道的ini_set(),但不知道是否有在网站上,而不是在脚本做到这一点在配置文件中声明的形式。

回答

3

我会建议您尽可能地避免将r egister_globals改为开启,因为这是一个重大的安全漏洞。

但是,您可以尝试使用init_set()来更改PHP代码中的设置,但是一旦PHP开始运行,某些设置就无法更改。 (这些是有些服务器依赖的,我相信。)

+0

我知道所有关于register_globals :),并在php.ini中关闭。这个例子仅仅是为了争辩。 – Kev 2008-10-10 16:21:15

+0

iniset()是否适合你正在尝试做的事情? – 2008-10-10 17:22:01

1

ini_set应该做你以后 -

$option = 'magic_quotes_gpc'; 
echo "Value of $option => ", ini_get($option); 
ini_set($option,0); 
echo "New value of $option => ", ini_get($option); 

这里的警告是,仅仅因为你可以设置在运行时的值并不意味着它会按预期工作,例如在运行时设置register_globals将没有多大用处,因为该设置在脚本启动时已经完成了它的工作。

3

您可以用几种方法覆盖php.ini文件中的指令,但并非所有指令都可以通过每种方法进行更改。请参阅手册中的php.ini directives页面,以获取指令列表以及每个指令的工作方法。

表中的最后一列列出了可用于该特定方法的方法。在访问的提高水平:

  • PHP_INI_USER - 可以在用户 脚本设定ini_set()(或任何更高的方法)
  • PHP_INI_PERDIR - 可以使用 的.htacess文件字符串值设置为与php_valuephp_flag为 二进制值(或任何更高的方法)
  • PHP_INI_SYSTEM - 可以使用 的php.ini或httpd.conf中 只能设置(都需要访问服务器的合作nfiguration文件)
  • PHP_INI_ALL - 可以使用任何 的上述方法
0

对于CGI环境进行设置,有一个叫htscanner模块。它基本上伪造.htaccess行为,并允许每个目录配置。不幸的是,我在Windows上没有这方面的经验,更不用说IIS6了。

1

http://us.php.net/configuration.changes

通过Windows注册表

修改PHP配置在Windows下运行PHP,配置值可以使用Windows注册表以目录为单位来修改。配置值存储在注册表项HKLM \ SOFTWARE \ PHP \ Per Directory Values中,与路径名相对应的子键中。例如,目录c:\ inetpub \ wwwroot的配置值将存储在密钥HKLM \ SOFTWARE \ PHP \ Per Directory Values \ c \ inetpub \ wwwroot中。该目录的设置对于从该目录或其任何子目录运行的任何脚本都是有效的。该键下的值应该具有PHP配置指令的名称和字符串值。值中的PHP常量不被解析。但是,只能通过这种方式设置PHP_INI_USER中可更改的配置值,而PHP_INI_PERDIR值则不能。

...还没有真正尝试过,所以你的里程可能会有所不同。

1

我刚刚发现了一个新的做法。 首先,我使用phpinfo()来查找我的主机提供商使用的PHP.ini。

此后,我上传包含以下代码的文件到我的主机空间:

$fsrc = fopen($pathToIni,'r'); 
    $fdest = fopen($myHostingDir,'w+'); 
    $len = stream_copy_to_stream($fsrc,$fdest); 
    fclose($fsrc); 
    fclose($fdest); 
    echo $len; 

这有效地复制的php.ini到我的虚拟主机空间。此后,我下载了php.ini,将register_globals更改为关闭(为此我完成了所有操作),并将其上载到我的主机空间的根目录。宾果,你去吧。

我依赖于IIS使用完整的php.ini(如果在目录中可用)的事实。您不能仅覆盖Apache上使用.htaccess的特定设置。

相关问题