1

我们将 PHP 5.2.6 部署到 c:\php 并且在该文件夹中有 php.ini 文件。在 Windows 上,网站可以像 apache 的 .htaccess 那样覆盖这些设置吗?例如

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() 但想知道是否有一种声明方式可以在网站的配置文件中而不是在脚本中执行此操作。

4

6 回答 6

3

我建议尽你所能避免将 r 更改egister_globals为 on,因为它是一个主要的安全漏洞。

但是您可以尝试使用init_set()来更改 PHP 代码中的设置,尽管有些设置在 PHP 开始运行后无法更改。(我相信这些在某种程度上取决于服务器。)

于 2008-10-10T16:16:17.750 回答
3

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

表中的最后一列列出了适用于该特定方法的方法。在增加访问级别:

  • PHP_INI_USER- 可以使用ini_set()(或任何更高的方法)在用户脚本中设置
  • PHP_INI_PERDIR- 可以使用带有php_value 字符串值或php_flag二进制值(或任何更高方法)的 .htacess 文件进行设置
  • PHP_INI_SYSTEM- 只能使用 php.ini 或 httpd.conf 设置(都需要访问服务器的配置文件)
  • PHP_INI_ALL- 可以使用上述任何一种方法进行设置
于 2008-10-10T17:48:09.780 回答
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在运行时设置将几乎没有用处,因为该设置在您的脚本启动时已经完成了它的工作。

于 2008-10-10T17:26:20.417 回答
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 值不能。

...实际上还没有尝试过,因此您的里程可能会有所不同。

于 2008-11-03T21:18:18.553 回答
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。

于 2009-06-24T10:46:36.970 回答
0

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

于 2008-10-13T09:44:53.310 回答