我们将PHP 5.2.6部署到c:\ php,在该文件夹中有php.ini文件。在Windows上,网站是否可以覆盖这些设置,类似于apache拥有.htaccess的方式? e.g。
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()但是想知道是否有一种声明性方法可以在网站的配置文件中而不是脚本中执行此操作。
答案 0 :(得分:3)
我建议尽你所能避免将r egister_globals
更改为on,因为它是一个主要的安全漏洞。
但您可以尝试使用init_set()
来更改PHP代码中的设置,尽管一旦PHP开始运行,某些设置无法更改。 (我相信这些服务器依赖于服务器。)
答案 1 :(得分:3)
您可以通过多种方式覆盖php.ini文件中的指令,但并非每种方法都可以更改所有指令。请参阅手册中的php.ini directives页面,以获取适用于每个指令的指令和方法的列表。
表中的最后一列列出了适用于该特定方法的方法。在提高访问级别:
PHP_INI_USER
- 可以在用户中设置
ini_set()
(或任何更高的方法)PHP_INI_PERDIR
- 可以使用设置
带有php_value
的.htacess文件
对于字符串值或php_flag
为
二进制值(或任何更高的方法)PHP_INI_SYSTEM
- 可以
使用php.ini或httpd.conf设置
仅(两者都需要访问服务器的配置文件)PHP_INI_ALL
- 可以使用设置
任何上述方法答案 2 :(得分: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 :(得分: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值不能。
......还没有真正试过这个,所以你的里程可能会有所不同。
答案 4 :(得分: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更改为off(为此我做了所有这些),并将其上传到我的Hosting空间的根目录。宾果,你去。
我依赖于IIS使用完整的php.ini(如果在目录中可用)。您不能仅覆盖在Apache上使用.htaccess的特定设置。
答案 5 :(得分:0)
对于cgi环境,有一个名为htscanner的模块。它基本上伪造.htaccess行为并允许每个目录配置。不幸的是,我在Windows上没有这方面的经验,更不用说IIS6了。