2005-07-18

改变不同目录/虚拟主机下php的配置

问题:
在Apache下,如果要使某个特定目录不支持php脚本,怎么做?

解答:
当以 Apache 的模块方式运行 PHP 时,也可以通过 Apache 的配置文件(例如 httpd.conf)和 .htaccess 文件中的指令来修改 PHP 的配置选项(需要“AllowOverride Options”或“AllowOverride All”权限)。

在httpd.conf文件里有关在该目录的设定里加上
"php_admin_flag engine off" (〉PHP4)


例:






<Directory /srv/www/htdocs/path>
php_admin_flag engine off
</Directory>



由这个问题想起了在同一台主机上设置多个虚拟主机时,通过设定相关的php变量来改变不同虚拟主机的php设置的方法。这一点在urts12这台服务器已经得到应用。两个站点都架在这台机器上,但是两者的php设置不一样就是通过在vitualHosts一节的设置实现的。http://studip.uni-trier.de
<VirtualHost 136.199.199.55:80>
DocumentRoot /home/barthc/www/htdocs/studip
Options None
ServerName studip.uni-trier.de
ServerAlias studipserv.uni-trier.de
ServerAlias studipserv
ServerAlias studip
DirectoryIndex index.php index.html index.htm
ErrorLog /var/log/apa/logfiles/studip.error.log
CustomLog /var/log/apa/logfiles/studip.access.log combined
php_admin_value auto_prepend_file /home/barthc/php/prepend.php
php_admin_value include_path .:/home/barthc/php
php_admin_value upload_max_filesize 7m
php_value auto_prepend_file prepend.php
php_value include_path .:/home/barthc/php
php_value memory_limit 8M
php_value max_execution_time 300
php_value mysql.default_socket /tmp/mysql.sock.urts12
</VirtualHost>

http://ilias3.uni-trier.de
<VirtualHost 136.199.199.55:80>
DocumentRoot /home/barthc/www/htdocs/ilias3
Options None
ServerName ilias3.uni-trier.de
ServerAlias ilias3
DirectoryIndex index.php index.html index.htm
ErrorLog /var/log/apa/logfiles/ilias3.error.log
CustomLog /var/log/apa/logfiles/ilias3.access.log combined
php_value mysql.default_socket /tmp/mysql.sock.urts12
php_value upload_max_filesize 35M
php_value include_path .:/home/barthc/www/htdocs/ilias3/include:/usr/local/lib/php
</VirtualHost>


值得注意的是,有些变量可以在httpd.conf和.htaccess里出现,而有的变量则只能出现在httpd.conf里。翻阅PHP的帮助文档得到下面的文字:

注: 在 PHP 3.0 中,也有和 php3.ini 中选项相对应的 Apache
指令,只不过加上前缀“php3_”。
php_value name
value

设定指定指令的值。仅能用于 PHP_INI_ALLPHP_INI_PERDIR 类型的指令。要清除上一个设定的值,将值设为 none






php_value auto_prepend_file none



php_flag name
on|off

用于设定布尔值类型的配置指令。仅能用于 PHP_INI_ALLPHP_INI_PERDIR 类型的指令。


php_admin_value name value

设定指定指令的值。不能在 .htaccess 文件中使用。任何在 php_admin_value 中设定的值不能被 .htaccess 或者 virtualhost 中的指令覆盖。要清除上一个设定的值,将值设为 none






php_admin_value open_basedir none



php_admin_flag name
on|off

用于设定布尔值类型的配置指令。不能在 .htaccess 文件中使用。任何在 php_admin_flag 中设定的值不能被 .htaccess 或者 virtualhost 中的指令覆盖。



Apache 配置例子






<IfModule mod_php4.c>
php_value include_path ".:/usr/local/lib/php"
php_admin_flag safe_mode on
</IfModule>
<IfModule mod_php3.c>
php3_include_path ".:/usr/local/lib/php"
php3_safe_mode on
</IfModule>



顺便提一下PHP的帮助文件,个人觉得,做的比较好的一点是大部分的讲解都有例子,这让初学者上手很快,阅读者花很少的时间就能解决问题;TCL的帮助文件就不那么有好了:(。

1 条评论: