本文共 38361 字,大约阅读时间需要 127 分钟。
# /usr/local/php/bin/php -m
//查看模块
cd /usr/local/src/wget https://codeload.github.com/phpredis/phpredis/zip/develop mv develop phpredis-develop.zipunzip phpredis-develop.zipcd phpredis-develop/usr/local/php/bin/phpize //生成configure文件./configure --with-php-config=/usr/local/php/bin/php-configmake && make install
# /usr/local/php/bin/php -i |grep extension_dir
//查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
# vim /usr/local/php/etc/php.ini
//增加一行配置(可以放到文件最后一行)extension = redis.so
Last login: Fri Oct 13 20:46:33 2017[root@localhost ~]# cd /usr/local/src/[root@localhost src]# lsapr-1.6.2 httpd-2.4.29 php-5.6.30.tar.gzapr-1.6.2.tar.gz httpd-2.4.29.tar.gz php-7.2.1apr-util-1.6.0 mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz php-7.2.1.tar.bz2apr-util-1.6.0.tar.gz php-5.6.30[root@localhost src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop--2017-10-13 21:20:21-- https://codeload.github.com/phpredis/phpredis/zip/develop正在解析主机 codeload.github.com (codeload.github.com)... 192.30.255.121, 192.30.255.120正在连接 codeload.github.com (codeload.github.com)|192.30.255.121|:443... 已连接。已发出 HTTP 请求,正在等待回应... 200 OK长度:未指定 [application/zip]正在保存至: “develop” [ <=> ] 224,195 116KB/s 用时 1.9s 2017-10-13 21:20:24 (116 KB/s) - “develop” 已保存 [224195][root@localhost src]# du -sh develop 220K develop[root@localhost src]# mv develop phpredis-develop.zip[root@localhost src]# unzip phpredis-develop.zip inflating: phpredis-develop/tests/RedisTest.php inflating: phpredis-develop/tests/TestRedis.php inflating: phpredis-develop/tests/TestSuite.php inflating: phpredis-develop/tests/make-cluster.sh inflating: phpredis-develop/tests/mkring.sh [root@localhost src]#
进入phpredis-develop 目录下
[root@localhost src]# lsapr-1.6.2 httpd-2.4.29.tar.gz php-7.2.1.tar.bz2apr-1.6.2.tar.gz mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz phpredis-developapr-util-1.6.0 php-5.6.30 phpredis-develop.zipapr-util-1.6.0.tar.gz php-5.6.30.tar.gzhttpd-2.4.29 php-7.2.1[root@localhost src]# cd phpredis-develop[root@localhost phpredis-develop]# lsarrays.markdown CREDITS php_redis.h redis_commands.ccluster_library.c debian README.markdown redis_commands.hcluster_library.h debian.control redis_array.c redis_session.ccluster.markdown ISSUE_TEMPLATE.md redis_array.h redis_session.hcommon.h library.c redis_array_impl.c rpmconfig.m4 library.h redis_array_impl.h serialize.listconfig.w32 mkdeb-apache2.sh redis.c testsCOPYING mkdeb.sh redis_cluster.ccrc16.h package.xml redis_cluster.h[root@localhost phpredis-develop]#
用php7 /usr/local/php/bin/phpize //生成configure文件
[root@localhost phpredis-develop]# /usr/local/php/bin/phpizeConfiguring for:PHP Api Version: 20131106Zend Module Api No: 20131226Zend Extension Api No: 220131226Cannot find autoconf. Please check your autoconf installation and the$PHP_AUTOCONF environment variable. Then, rerun this script.[root@localhost phpredis-develop]#
显示没有生成 少一个包autoconf ,再继续生成./configure,
[root@localhost phpredis-develop]# yum install -y autoconf已安装: autoconf.noarch 0:2.69-11.el7 作为依赖被安装: m4.x86_64 0:1.4.16-10.el7 完毕![root@localhost phpredis-develop]# [root@localhost phpredis-develop]# /usr/local/php/bin/phpizeConfiguring for:PHP Api Version: 20131106Zend Module Api No: 20131226Zend Extension Api No: 220131226[root@localhost phpredis-develop]# [root@localhost phpredis-develop]# lsacinclude.m4 config.h.in debian.control mkinstalldirs redis_cluster.haclocal.m4 config.m4 install-sh package.xml redis_commands.carrays.markdown config.sub ISSUE_TEMPLATE.md php_redis.h redis_commands.hautom4te.cache configure library.c README.markdown redis_session.cbuild configure.in library.h redis_array.c redis_session.hcluster_library.c config.w32 ltmain.sh redis_array.h rpmcluster_library.h COPYING Makefile.global redis_array_impl.c run-tests.phpcluster.markdown crc16.h missing redis_array_impl.h serialize.listcommon.h CREDITS mkdeb-apache2.sh redis.c testsconfig.guess debian mkdeb.sh redis_cluster.c[root@localhost phpredis-develop]#
./configure
[root@localhost phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-configchecking for grep that handles long lines and -e... /usr/bin/grepchecking for egrep... /usr/bin/grep -Echecking for a sed that does not truncate output... /usr/bin/sedchecking for cc... ccchecking whether the C compiler works... yeschecking for C compiler default
make make install
[root@localhost phpredis-develop]# makeSee any operating system documentation about shared libraries formore information, such as the ld(1) and ld.so(8) manual pages.----------------------------------------------------------------------Build complete.Don't forget to run 'make test'.[root@localhost phpredis-develop]# [root@localhost phpredis-develop]# make installInstalling shared extensions: /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/[root@localhost phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.so redis.so[root@localhost phpredis-develop]#
生成了一个redis.so 这个文件就是我们要的扩展模块
现在php还不支持它,没有模块文件,现在还是不支持redis 的
[root@localhost phpredis-develop]# /usr/local/php7/bin/php -m[PHP Modules]bz2CorectypedatedomexiffileinfofiltergdhashiconvjsonlibxmlmbstringmcryptmysqliopensslpcrePDOpdo_mysqlpdo_sqlitePharposixReflectionsessionSimpleXMLsoapsocketsSPLsqlite3standardtokenizerxmlxmlreaderxmlwriterzlib[Zend Modules][root@localhost phpredis-develop]# [root@localhost phpredis-develop]# /usr/local/php7/bin/php -m |grep redis[root@localhost phpredis-develop]#
所以你需要把它配置一下,把它加载一下,需要去编辑配置文件
先找一下扩展模块所在的路径在哪里
/usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径[root@localhost phpredis-develop]# /usr/local/php7/bin/php -i |grep -i extension_dirextension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303sqlite3.extension_dir => no value => no value[root@localhost phpredis-develop]#
实际上就是我们刚刚看的目录,这个extension_dir 也可以定义的
[root@localhost phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303opcache.so redis.so[root@localhost phpredis-develop]#
之后需要编辑下vi /usr/local/php7/etc/php.ini ,搜索extension, 在后面加上extension=redis.so
[root@localhost phpredis-develop]# vi /usr/local/php7/etc/php.ini[PHP];;;;;;;;;;;;;;;;;;;; About php.ini ;;extension=php_bz2.dll;extension=php_curl.dll;extension=php_fileinfo.dll;extension=php_ftp.dll;extension=php_gd2.dll;extension=php_gettext.dll;extension=php_gmp.dll;extension=php_intl.dll;extension=php_imap.dll;extension=php_interbase.dll;extension=php_ldap.dll;extension=php_mbstring.dll;extension=php_exif.dll ; Must be after mbstring as it depends on it;extension=php_mysqli.dll;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client;extension=php_openssl.dll;extension=php_pdo_firebird.dll;extension=php_pdo_mysql.dll;extension=php_pdo_oci.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dll;extension=php_pdo_sqlite.dll;extension=php_pgsql.dll;extension=php_shmop.dllextension=redis.so; The MIBS data available in the PHP distribution must be installed.:wq
dll后缀名结尾的,都是Windows使用的模块
添加好配置以后查询模块是否存在已经加载了 redis[root@localhost phpredis-develop]# vi /usr/local/php7/etc/php.ini[root@localhost phpredis-develop]# /usr/local/php7/bin/php -m |grep redisredis[root@localhost phpredis-develop]#
如果你想编译一个模块,而且他自带的源码包目录/usr/local/src/php-5.6.30/ext 下有,那么只需要进行以下一些步骤,就可以完成扩展模块新增
1、在你需要增加的拓展模块的目录下执行 /usr/local/php/bin/phpize ,生成一个configure 文件2、执行 ./configure --with-php-config=/usr/local/php/bin/php-config 配置php-config文件3、开始编译 make4、编译后移动到目录 make install5、修改配置文件vim /usr/local/php/etc/php.ini ,新增所需extension=xxxx.so 拓展模块这就是php的扩展模块安装
当然还要一种方法 redis 和 是属于第三方的 ,它在php源码包里面本身是没有的
[root@localhost phpredis-develop]# cd[root@localhost ~]# cd /usr/local/src/[root@localhost src]# cd php-7.2.1[root@localhost php-7.2.1]# lsacinclude.m4 LICENSE README.namespacesaclocal.m4 ltmain.sh README.NEW-OUTPUT-APIappveyor main README.PARAMETER_PARSING_APIbuild makedist README.REDIST.BINSbuildconf Makefile README.RELEASE_PROCESSbuildconf.bat Makefile.frag README.SELF-CONTAINED-EXTENSIONSCODING_STANDARDS Makefile.fragments README.STREAMSconfig.guess Makefile.gcov README.SUBMITTING_PATCHconfig.log Makefile.global README.TESTINGconfig.nice Makefile.objects README.TESTING2config.status makerpm README.UNIX-BUILD-SYSTEMconfig.sub meta_ccld README.WIN32-BUILD-SYSTEMconfigure missing run-tests.phpconfigure.in mkinstalldirs sapiCONTRIBUTING.md modules scriptsCREDITS netware server-tests-config.phpext NEWS server-tests.phpEXTENSIONS pear snapshotfooter php7.spec stamp-h.ingenerated_lists php7.spec.in stub.cgenfiles php.gif testsheader php.ini-development travisinclude php.ini-production TSRMINSTALL README.EXT_SKEL UPGRADINGinstall-sh README.GIT-RULES UPGRADING.INTERNALSlibphp7.la README.input_filter vcscleanlibs README.MAILINGLIST_RULES win32libtool README.md Zend[root@localhost php-7.2.1]#
实际上在php源码包里面 有个 ext的目录,这个下面有很多的 这种 所谓的模块
[root@localhost php-7.2.1]# cd ext/[root@localhost ext]# lsbcmath ext_skel interbase opcache pdo_sqlite skeleton tokenizerbz2 ext_skel_win32.php intl openssl pgsql snmp wddxcalendar fileinfo json pcntl phar soap xmlcom_dotnet filter ldap pcre posix sockets xmlreaderctype ftp libxml pdo pspell spl xmlrpccurl gd mbstring pdo_dblib readline sqlite3 xmlwriterdate gettext mcrypt pdo_firebird recode standard xsldba gmp mysqli pdo_mysql reflection sysvmsg zipdom hash mysqlnd pdo_oci session sysvsem zlibenchant iconv oci8 pdo_odbc shmop sysvshmexif imap odbc pdo_pgsql simplexml tidy[root@localhost ext]# [root@localhost ext]# /usr/local/php7/bin/php -m |grep zip[root@localhost ext]#
比如说现在没有zip ,假如说没有zip
那我现在需要编译一个zip,先进入到zip目录下来,然后直接执行 /usr/local/php7/bin/phpize[root@localhost ext]# /usr/local/php7/bin/php -m |grep zip[root@localhost ext]# cd zip/[root@localhost zip]# lsconfig.m4 CREDITS lib php_zip.c tests zip_stream.cconfig.w32 examples LICENSE_libzip php_zip.h TODO[root@localhost zip]# /usr/local/php7/bin/phpizeConfiguring for:PHP Api Version: 20160303Zend Module Api No: 20160303Zend Extension Api No: 320160303[root@localhost zip]#
也就是说你想编译一个扩展模块的时候,如果它 自带的源码包里面 ext 目录下有这个目录 ,那你就可以直接在这去编译它 不用去下载了
/usr/local/php7/bin/phpize 完成之后呢,./configure[root@localhost zip]# ./configure --with-php-config=/usr/local/php7/bin/php-configcreating libtoolappending configuration tag "CXX" to libtoolconfigure: creating ./config.statusconfig.status: creating config.h[root@localhost zip]#
make ,make install
[root@localhost zip]# makeBuild complete.Don't forget to run 'make test'.[root@localhost zip]# make installInstalling shared extensions: /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/[root@localhost zip]# [root@localhost zip]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.so redis.so zip.so[root@localhost zip]#
里面多了一个zip.so ,这个就是怎么去添加一个扩展模块
1、Rewrite规则简介:
Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接 安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下 直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
2、举例说明:
下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.colorme.com和203.81.23.202都跳转到 主机前缀为http://www.colorme.com.cn,避免当用户在地址栏写入http://colorme.com.cn时不能以会员方式登 录网站。
NameVirtualHost 192.168.100.8:80ServerAdmin webmaster@colorme.com.cnDocumentRoot “/web/webapp”ServerName www.colorme.com.cnServerName colorme.com.cnRewriteEngine on #打开rewirte功能RewriteCond %{HTTP_HOST} !^www.colorme.com.cn [NC] #声明Client请求的主机中前缀不是www.colorme.com.cn,[NC]的意思是忽略大小写RewriteCond %{HTTP_HOST} !^203.81.23.202 [NC] #声明Client请求的主机中前缀不是203.81.23.202,[NC]的意思是忽略大小写RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空,[NC]的意思是忽略大小写RewriteRule ^/(.*) http://www.colorme.com.cn/ [L]
#含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.colorme.com.cn/,[L]意味着立即停 止重写操作,并不再应用其他重写规则。这里的.是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是 引用前面里的(.)字符。
例二.将输入 folio.test.com 的域名时跳转到profile.test.comlisten 8080NameVirtualHost 10.122.89.106:8080ServerAdmin webmaster@colorme.com.cnDocumentRoot “/usr/local/www/apache22/data1/”ServerName profile.test.comRewriteEngine onRewriteCond %{HTTP_HOST} ^folio.test.com [NC]RewriteRule ^/(.*) http://profile.test.com/ [L]
3.Apache mod_rewrite规则重写的标志一览
1) R[=code](force redirect) 强制外部重定向
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。4) P(force proxy) 强制使用代理转发。5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。6) N(next round) 重新从第一条规则开始运行重写过程。7) C(chained with next rule) 与下一条规则关联如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
8) T=MIME-type(force MIME type) 强制MIME类型9) NS (used only if no internal sub-request) 只用于不是内部子请求10) NC(no case) 不区分大小写11) QSA(query string append) 追加请求字符串12) NE(no URI escaping of output) 不在输出转义特殊字符例如:RewriteRule /foo/(.) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed13) PT(pass through to next handler) 传递给下一个处理例如:RewriteRule ^/abc(.) /def$1 [PT] # 将会交给/def规则处理Alias /def /ghi14) S=num(skip next rule(s)) 跳过num条规则15) E=VAR:VAL(set environment variable) 设置环境变量4.Apache rewrite例子集合
在 httpd 中将一个域名转发到另一个域名虚拟主机世界近期更换了域名,新域名为 www.wbhw.com, 更加简短好记。这时需要将原来的域名webhosting-world.com, 以及论坛所在地址 webhosting-world.com/forums/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的http://www.webhosting-world.com/forums/-f60.html, 让它在新的域名下继续有效,点击后转发到http://bbs.wbhw.com/-f60.html, 这就需要用 apache 的 Mod_rewrite 功能来实现。
在中添加下面的重定向规则:
RewriteEngine On# Redirect webhosting-world.com/forums to bbs.wbhw.comRewriteCond %{REQUEST_URI} ^/forums/RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]# Redirect webhosting-world.com to wbhw.comRewriteCond %{REQUEST_URI} !^/forums/RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]
添加了上面的规则以后, 里的全部内容如下:
ServerAlias webhosting-world.comServerAdmin admin@webhosting-world.comDocumentRoot /path/to/webhosting-world/rootServerName www.webhosting-world.comRewriteEngine On# Redirect webhosting-world.com/forums to bbs.wbhw.comRewriteCond %{REQUEST_URI} ^/forums/RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]# Redirect webhosting-world.com to wbhw.comRewriteCond %{REQUEST_URI} !^/forums/RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]
URL重定向
例子一:
1.;
2.; 的功能RewriteEngine OnRewriteCond %{HTTP_HOST} ^www.zzz.comRewriteCond %{REQUEST_URI} !^user\.php$RewriteCond %{REQUEST_URI} \.php$RewriteRule (.*)\.php$ http://www.zzz.com/$1/ [R]RewriteCond %{HTTP_HOST} !^www.zzz.comRewriteRule ^(.+) %{HTTP_HOST} [C]RewriteRule ^([^\.]+)\.zzz\.com http://www.zzz.com/user.php?username=$1
例子二:
/type.php?typeid=* –> /type*.html/type.php?typeid=*&page=* –> /type*page*.htmlRewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]
5.使用Apache的URL Rewrite配置多用户虚拟服务器
要实现这个功能,首先要在DNS服务器上打开域名的泛域名解析(自己做或者找域名服务商做)。比如,我就把 .semcase.com和 .semcase.cn全部解析到了我的这台Linux Server上。
然后,看一下我的Apache中关于*.semcase.com的虚拟主机的设定。
#*.com,*.osall.netServerAdmin webmaster@semcase.comDocumentRoot /home/www/www.semcase.comServerName dns.semcase.comServerAlias dns.semcase.com semcase.com semcase.net *.semcase.com *.semcase.netCustomLog /var/log/httpd/osa/access_log.log” common ErrorLog /var/log/httpd/osa/error_log.log”AllowOverride NoneOrder deny,allow#AddDefaultCharset GB2312 RewriteEngine on RewriteCond %{HTTP_HOST} ^[^.]+\.osall\.(com|net)$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.osall\.(com|net)(.*)$/home/www/www.semcase.com/sylvan$3?un=$1&%{QUERY_STRING} [L]
在这段设定中,我把.semcase.net和.semcase.com 的Document Root都设定到了 /home/www/www.semcase.com
但是,继续看下去,看到…配置了吗?在这里我就配置了URL Rewrite规则。
RewriteEngine on #打开URL Rewrite功能RewriteCond %{HTTP_HOST} ^[^.]+.osall.(com|net)$ #匹配条件,如果用户输入的URL中主机名是类似 xxxx.semcase.com 或者 xxxx.semcase.cn 就执行下面一句RewriteRule ^(.+) %{HTTP_HOST}$1 [C] #把用户输入完整的地址(GET方式的参数除外)作为参数传给下一个规则,[C]是Chain串联下一个规则的意思RewriteRule ^([^.]+).osall.(com|net)(.*)$ /home/www/dev.semcase.com/sylvan$3?un=$1&%{QUERY_STRING} [L]
#最关键的是这一句,使用证则表达式解析用户输入的URL地址,把主机名中的用户名信息作为名为un的参数传给/home/www /dev.semcase.com目录下的脚本,并在后面跟上用户输入的GET方式的传入参数。并指明这是最后一条规则([L]规则)。注意,在这一句中 指明的重写后的地址用的是服务器上的绝对路径,这是内部跳转。如果使用http://xxxx这样的URL格式,则被称为外部跳转。使用外部跳转的话,浏 览着的浏览器中的URL地址会改变成新的地址,而使用内部跳转则浏览器中的地址不发生改变,看上去更像实际的二级域名虚拟服务器。
这样设置后,重启Apache服务器,测试一下,就大功告成了!
rewrite engine会对每条rewrite规则进行解析,每条rewrite规则可以带或不带rewrite condition, 带的话写在该条rewrite规则之前。如果rewrite规则符合,会进一步检查rewrite condition.具体处理如下:
首先匹配rewrite的patern,若不匹配则进入下一条rewrite rule。如果匹配,则mod_rewrite检查rewrite condition, 如果没有condition,则新的string将替换url,然后进入下一条rewrite rule.如果rewrite condition存在,则按顺序检查conditions。 Condition的 匹配并不是对url的,而是针对扩展变量等。conditons之间默认是AND的关系,也就是说conditon只要有一条不匹配,则退出匹配;当一条 条件被匹配后,则检查下一条,直到不匹配为止,如果所有条件匹配,替换就会进行。测试条件:
-f文件存在;-d目录存在;-l是链接文件(symbol link);-s文件大小非0rewrite rule
的参数:
RewriteCond
指令格式语法: RewriteCond TestString CondPattern
例如“RewriteCond %{HTTP_HOST} ^www.example.net [NC]” 1) TestString是一个纯文本的字符串,但是可以包含可扩展的成分
2) CondPattern是条件pattern, 即一个应用于当前实例TestString的正则表达式, 即TestString将会被计算然后与CondPattern匹配.3) 另外,还可以为CondPattern追加特殊的标记[flags] 作为RewriteCond指令的第三个参数。Flags是一个以逗号分隔的以下标记的列表:‘nocase|NC’ 它使测试忽略大小写, 即TestString和CondPattern无大小写检查‘ornext|OR’ 它以OR方式组合若干规则的条件,而不是隐含的AND。2 RewriteRule 指令
语法:RewriteRule Pattern Substitution
例如:RewriteRule ^(.*)$ http://www.9med.net/$1 [R=permanent,L]
1) Pattern是一个作用于当前URL的兼容perl的正则表达式. 这里的“当前”是指该规则生效时的URL的值。
2) Substitution是,当原始URL与Pattern相匹配时,用以替代(或替换)的字符串。3) 此外,Substitution还可以追加特殊标记[flags] 作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的下列标记的列表:‘redirect|R [=code]‘
‘forbidden|F’
(强制URL为被禁止的 forbidden)
‘gone|G’
(强制URL为已废弃的 gone)
‘proxy|P’
(强制为代理 proxy)
‘last|L’
(最后一个规则 last)
‘chain|C’
(与下一个规则相链接 chained)
‘type|T=MIME-type’
(强制MIME类型 type)
‘nosubreq|NS’
(仅用于不对内部子请求进行处理 no internal sub-request)
‘nocase|NC’
(忽略大小写 no case)
‘qsappend|QSA’
(追加请求串 query string append)
‘noescape|NE’
(在输出中不对URI作转义 no URI escaping)
RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE]
可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’. ‘passthrough|PT’
(移交给下一个处理器 pass through)
RewriteRule ^/abc(.*) /def$1 [PT]Alias /def /ghi
如果省略了PT标记,虽然mod_rewrite运作正常, 即, 作为一个使用API的URI到文件名翻译器, 它可以重写uri=/abc/…为filename=/def/…, 但是,后续的mod_alias在试图作URI到文件名的翻译时,则会失效。
注意: 如果需要混合使用不同的包含URI到文件名翻译器的模块时, 就必须使用这个标记。。 混合使用mod_alias和mod_rewrite就是个典型的例子。‘skip|S=num’
(跳过后继的规则 skip)
‘env|E=VAR:VAL’
(设置环境变量 environment variable)
‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’
(设置cookie)
apache的官方rewrite guide 举例,以下是wordpress的rewrite的.htaccess:
# BEGIN WordPressRewriteEngine OnRewriteBase /#把learndiary.com的网址全部重定向到www.learndiary.com下RewriteCond %{HTTP_HOST} ^learndiary.com [NC]RewriteRule ^(.*)$ http://www.learndiary.com/$1 [L,R=301]#除开*.do形式的URL(必须)RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_URI} !.+.doRewriteRule . /index.php [L]
我的一条规则
RewriteRule ^(.*) /111/$1 [R,L]
使用curl测试,没有问题,但是使用浏览器访问时,出现了无限循环。
本来访问的是 www.111.com 结果变成了 www.111.com/111/111/111/..... 虽然在最后加了 [L] 依然不管用,可能apache还是不够智能,一直满足条件就一直去匹配,一直去跳转。最后没招了只能再加一个条件。RewriteCond %{REQUEST_URI} !^/111RewriteRule ^(.*) /111/$1 [R,L]
这样就不再循环了。
比如: error_reporting = E_ALL & ~E_NOTICE 表示错误级别为E_ALL 并且除了E_NOTICE
控制参数:
short_open_tag = On
如果设置为Off,则不能正常解析类似于这样形式的php文件:
而只能解析
这样形式的php文件
所以要想php支持短标签,需要我们把short_open_tag 设置为On.这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中。
最新版本的php.ini可以在下面两个位置查看:语法该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。设置指令的格式如下:directive = value
指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。值(value)可以是: ;;;;;;;;;;;;Apache ;;;;;;;;;;;;;;[Apache] 仅在将PHP作为Apache模块时才有效。engine = On 是否启用PHP解析引擎。可以在httpd.conf中基于目录或者虚拟主机来打开或者关闭PHP解析引擎。last_modified = Off是否在Last-Modified应答头中放置该PHP脚本的最后修改时间。xbithack = Off 是否不管文件结尾是什么,都作为PHP可执行位组来解析。child_terminate = Off PHP脚本在请求结束后是否允许使用apache_child_terminate()函数终止子进程。该指令仅在UNIX平台上将PHP安装为Apache1.3的模块时可用。其他情况下皆不存在。
;;;;;;;;;;;;;PHP核心 ;;;;;;;;;;;;;;;[PHP-Core-DateTime] 前四个配置选项目前仅用于date_sunrise()和date_sunset()函数。date.default_latitude = 31.7667 默认纬度date.default_longitude = 35.2333默认经度date.sunrise_zenith = 90.583333默认日出天顶date.sunset_zenith = 90.583333默认日落天顶date.timezone = 未设定TZ环境变量时用于所有日期和时间函数的默认时区。中国大陆应当使用"PRC"应用时区的优先顺序为:1 用date_default_timezone_set()函数设定的时区(如果设定了的话)2 TZ 环境变量(如果非空的话)3 该指令的值(如果设定了的话)4 PHP自己推测(如果操作系统支持)5 如果以上都不成功,则使用 UTC
[PHP-Core-Assert] assert.active = On 是否启用assert()断言评估assert.bail = Off 是否在发生失败断言时中止脚本的执行 assert.callback = 发生失败断言时执行的回调函数assert.quiet_eval = Off 是否使用安静评估(不显示任何错误信息,相当于error_reporting=0)。若关闭则在评估断言表达式的时候使用当前的error_reporting指令值。assert.warning = On是否对每个失败断言都发出警告
[PHP-Core-SafeMode] 安全模式是为了解决共享服务器的安全问题而设立的。但试图在PHP层解决这个问题在结构上是不合理的,正确的做法应当是修改web服务器层和操作系统层。因此在PHP6中废除了安全模式,并打算使用open_basedir指令取代之。safe_mode = Off是否启用安全模式。打开时,PHP将检查当前脚本的拥有者是否和被操作的文件的拥有者相同,相同则允许操作,不同则拒绝操作。safe_mode_gid = Off在安全模式下,默认在访问文件时会做UID比较检查。但有些情况下严格的UID检查反而是不适合的,宽松的GID检查已经足够。如果你想将其放宽到仅做GID比较,可以打开这个参数。safe_mode_allowed_env_vars = "PHP_"在安全模式下,用户仅可以更改的环境变量的前缀列表(逗号分隔)。允许用户设置某些环境变量,可能会导致潜在的安全漏洞。注意: 如果这一参数值为空,PHP将允许用户更改任意环境变量!safe_mode_protected_env_vars = "LD_LIBRARY_PATH"在安全模式下,用户不能更改的环境变量列表(逗号分隔)。这些变量即使在safe_mode_allowed_env_vars指令设置为允许的情况下也会得到保护。safe_mode_exec_dir = "/usr/local/php/bin"在安全模式下,只有该目录下的可执行程序才允许被执行系统程序的函数执行。这些函数是:system, escapeshellarg, escapeshellcmd, exec, passthru,proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_execsafe_mode_include_dir =在安全模式下,该组目录和其子目录下的文件被包含时,将跳过UID/GID检查。换句话说,如果此处的值为空,任何UID/GID不符合的文件都不允许被包含。这里设置的目录必须已经存在于include_path指令中或者用完整路径来包含。多个目录之间用冒号(Win下为分号)隔开。指定的限制实际上是一个前缀,而非一个目录名,也就是说"/dir/incl"将允许访问"/dir/include"和"/dir/incls"如果您希望将访问控制在一个指定的目录,那么请在结尾加上斜线。sql.safe_mode = Off是否使用SQL安全模式。如果打开,指定默认值的数据库连接函数将会使用这些默认值代替支持的参数。对于每个不同数据库的连接函数,其默认值请参考相应的手册页面。
[PHP-Core-Safe]allow_url_fopen = On是否允许打开远程文件allow_url_include = Off是否允许include/require远程文件。disable_classes =该指令接受一个用逗号分隔的类名列表,以禁用特定的类。disable_functions =该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。enable_dl = On是否允许使用dl()函数。dl()函数仅在将PHP作为apache模块安装时才有效。禁用dl()函数主要是出于安全考虑,因为它可以绕过open_basedir指令的限制。在安全模式下始终禁用dl()函数,而不管此处如何设置。expose_php = On是否暴露PHP被安装在服务器上的事实(在http头中加上其签名)。它不会有安全上的直接威胁,但它使得客户端知道服务器上安装了PHP。open_basedir =将PHP允许操作的所有文件(包括文件自身)都限制在此组目录列表下。当一个脚本试图打开一个指定目录树之外的文件时,将遭到拒绝。所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。特殊值''.''指定了存放该脚本的目录将被当做基准目录。但这有些危险,因为脚本的工作目录可以轻易被chdir()改变。对于共享服务器,在httpd.conf中灵活设置该指令将变得非常有用。在Windows中用分号分隔目录,UNIX系统中用冒号分隔目录。作为Apache模块时,父目录中的open_basedir路径将自动被继承。指定的限制实际上是一个前缀,而非一个目录名,也就是说"/dir/incl"将允许访问"/dir/include"和"/dir/incls",如果您希望将访问控制在一个指定的目录,那么请在结尾加上一个斜线。默认是允许打开所有文件。
[PHP-Core-Error]error_reporting = E_ALL & ~E_NOTICE错误报告级别是位字段的叠加,推荐使用 E_ALL | E_STRICT1 E_ERROR 致命的运行时错误2 E_WARNING 运行时警告(非致命性错误)4 E_PARSE 编译时解析错误8 E_NOTICE 运行时提醒(经常是bug,也可能是有意的)16 E_CORE_ERROR PHP启动时初始化过程中的致命错误32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)64 E_COMPILE_ERROR 编译时致命性错128 E_COMPILE_WARNING 编译时警告(非致命性错)256 E_USER_ERROR 用户自定义的致命错误512 E_USER_WARNING 用户自定义的警告(非致命性错误)1024 E_USER_NOTICE 用户自定义的提醒(经常是bug,也可能是有意的)2048 E_STRICT 编码标准化警告(建议如何修改以向前兼容)4096 E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同E_ERROR6143 E_ALL 除E_STRICT外的所有错误(PHP6中为8191,即包含所有)track_errors = Off是否在变量$php_errormsg中保存最近一个错误或警告消息。display_errors = On是否将错误信息作为输出的一部分显示。在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替(参看下面)。在最终发布的web站点打开这个特性可能暴露一些安全信息,例如你的web服务上的文件路径、数据库规划或别的信息。display_startup_errors = Off 是否显示PHP启动时的错误。即使display_errors指令被打开,关闭此参数也将不显示PHP启动时的错误。建议你关掉这个特性,除非你必须要用于调试中。report_memleaks = On 是否报告内存泄漏。这个参数只在以调试方式编译的PHP中起作用,并且必须在error_reporting指令中包含 E_WARNING report_zend_debug = On尚无说明文档html_errors = On 是否在出错信息中使用HTML标记。注意: 不要在发布的站点上使用这个特性!docref_root = ;"http://localhost/phpmanual/"docref_ext = ;".html" 如果打开了html_errors指令,PHP将会在出错信息上显示超连接,直接链接到一个说明这个错误或者导致这个错误的函数的页面。你可以从http://www.php.net/docs.php下载php手册,并将docref_root指令指向你本地的手册所在的URL目录。你还必须设置docref_ext指令来指定文件的扩展名(必须含有''.'')。注意: 不要在发布的站点上使用这个特性。error_prepend_string = ;"" 用于错误信息前输出的字符串error_append_string = ;"" 用于错误信息后输出的字符串xmlrpc_errors = Offxmlrpc_error_number = 0尚无文档
[PHP-Core-Logging]define_syslog_variables = Off 是否定义各种系统日志变量,如:$LOG_PID, $LOG_CRON 等等。关掉它以提高效率的好主意。你可以在运行时调用define_syslog_variables()函数来定义这些变量。error_log =将错误日志记录到哪个文件中。该文件必须对Web服务器用户可写。syslog 表示记录到系统日志中(NT下的事件日志, Unix下的syslog(3))如果此处未设置任何值,则错误将被记录到Web服务器的错误日志中。 log_errors = Off 是否在日志文件里记录错误,具体在哪里记录取决于error_log指令。强烈建议你在最终发布的web站点时使用日志记录错误而不是直接输出,这样可以让你既知道那里出了问题,又不会暴露敏感信息。log_errors_max_len = 1024 设置错误日志中附加的与错误信息相关联的错误源的最大长度。这里设置的值对显示的和记录的错误以及$php_errormsg都有效。设为 0 可以允许无限长度。ignore_repeated_errors = Off 记录错误日志时是否忽略重复的错误信息。错误信息必须出现在同一文件的同一行才被被视为重复。ignore_repeated_source = Off是否在忽略重复的错误信息时忽略重复的错误源。[PHP-Core-Mail] 要使邮件函数可用,PHP必须在编译时能够访问sendmail程序。如果使用其它的邮件程序,如qmail或postfix,确保使用了相应的sendmail包装。PHP首先会在系统的PATH环境变量中搜索 sendmail,接着按以下顺序搜索:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib强烈建议在PATH中能够找到sendmail。另外,编译PHP的用户必须能够访问sendmail程序。SMTP = "localhost" mail()函数中用来发送邮件的SMTP服务器的主机名称或者IP地址。仅用于win32。smtp_port = 25 SMTP服务器的端口号。仅用于win32。sendmail_from =发送邮件时使用的"From:"头中的邮件地址。仅用于win32该选项还同时设置了"Return-Path:"头。sendmail_path = "-t -i"仅用于unix,也可支持参数(默认的是''sendmail -t -i'')sendmail程序的路径,通常为"/usr/sbin/sendmail或/usr/lib/sendmail"。configure脚本会尝试找到该程序并设定为默认值,但是如果失败的话,可以在这里设定。不使用sendmail的系统应将此指令设定为sendmail替代程序(如果有的话)。例如,Qmail用户通常可以设为"/var/qmail/bin/sendmail"或"/var/qmail/bin/qmail-inject"。qmail-inject 不需要任何选项就能正确处理邮件。mail.force_extra_parameters =作为额外的参数传递给sendmail库的强制指定的参数附加值。这些参数总是会替换掉mail()的第5个参数,即使在安全模式下也是如此。
[PHP-Core-ResourceLimit]default_socket_timeout = 60默认socket超时(秒)max_execution_time = 30每个脚本最大允许执行时间(秒),0 表示没有限制。这个参数有助于阻止劣质脚本无休止的占用服务器资源。该指令仅影响脚本本身的运行时间,任何其它花费在脚本运行之外的时间,如用system()/sleep()函数的使用、数据库查询、文件上传等,都不包括在内。在安全模式下,你不能用ini_set()在运行时改变这个设置。 memory_limit = 16M一个脚本所能够申请到的最大内存字节数(可以使用K和M作为单位)。这有助于防止劣质脚本消耗完服务器上的所有内存。要能够使用该指令必须在编译时使用"--enable-memory-limit"配置选项。如果要取消内存限制,则必须将其设为 -1 。设置了该指令后,memory_get_usage()函数将变为可用。max_input_time = -1每个脚本解析输入数据(POST, GET, upload)的最大允许时间(秒)。-1 表示不限制。post_max_size = 8M允许的POST数据最大字节长度。此设定也影响到文件上传。如果POST数据超出限制,那么$_POST和$_FILES将会为空。要上传大文件,该值必须大于upload_max_filesize指令的值。如果启用了内存限制,那么该值应当小于memory_limit指令的值。realpath_cache_size = 16K指定PHP使用的realpath(规范化的绝对路径名)缓冲区大小。在PHP打开大量文件的系统上应当增大该值以提高性能。realpath_cache_ttl = 120realpath缓冲区中信息的有效期(秒)。对文件很少变动的系统,可以增大该值以提高性能。
[PHP-Core-FileUpLoad] file_uploads = On是否允许HTTP文件上传。参见upload_max_filesize, upload_tmp_dir, post_max_size指令upload_max_filesize = 2M 允许上传的文件的最大尺寸。upload_tmp_dir =文件上传时存放文件的临时目录(必须是PHP进程用户可写的目录)。如果未指定则PHP使用系统默认的临时目录。
[PHP-Core-MagicQuotes] PHP6将取消魔术引号,相当于下列指令全部为 Offmagic_quotes_gpc = On 是否对输入的GET/POST/Cookie数据使用自动字符串转义( '' " NULL )。这里的设置将自动影响 $_GEST $_POST $_COOKIE 数组的值。若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号('')转义为(''''),其它特殊字符将不被转义,即( " NULL )将保持原样!!建议关闭此特性,并使用自定义的过滤函数。 magic_quotes_runtime = Off是否对运行时从外部资源产生的数据使用自动字符串转义( '' " NULL )。若打开本指令,则大多数函数从外部资源(数据库,文本文件等)返回数据都将被转义。例如:用SQL查询得到的数据,用exec()函数得到的数据,等等---www.bianceng.cn若将本指令与magic_quotes_sybase指令同时打开,则仅将单引号('')转义为(''''),其它特殊字符将不被转义,即( " NULL )将保持原样!!建议关闭此特性,并视具体情况使用自定义的过滤函数。magic_quotes_sybase = Off 是否采用Sybase形式的自动字符串转义(用 '''' 表示 '')[PHP-Core-HighLight]highlight.bg = "#FFFFFF"highlight.comment = "#FF8000"highlight.default = "#0000BB"highlight.html = "#000000"highlight.keyword = "#007700"highlight.string = "#DD0000" 语法高亮模式的色彩(通常用于显示 .phps 文件)。只要能被接受的东西就能正常工作。
[PHP-Core-Langue] short_open_tag = On 是否允许使用" "短标识。否则必须使用" "长标识。除非你的php程序仅在受控环境下运行,且只供自己使用,否则请不要使用短标记。如果要和XML结合使用PHP,可以选择关闭此选项以方便直接嵌入" ",不然你必须用PHP来输出: 本指令也会影响到缩写形式" ",这也会影响到缩写形式"<%="。PHP6中将删除此指令arg_separator.output = "&"PHP所产生的URL中用来分隔参数的分隔符。另外还可以用"&"或","等等。arg_separator.input = "&" PHP解析URL中的变量时使用的分隔符列表。字符串中的每一个字符都会被当作分割符。另外还可以用",&"等等。allow_call_time_pass_reference = On 是否强迫在函数调用时按引用传递参数(每次使用此特性都会收到一条警告)。php反对这种做法,并在将来的版本里不再支持,因为它影响到了代码的整洁。鼓励的方法是在函数声明里明确指定哪些参数按引用传递。我们鼓励你关闭这一选项,以保证你的脚本在将来版本的语言里仍能正常工作。 auto_globals_jit = On 是否仅在使用到$_SERVER和$_ENV变量时才创建(而不是在脚本一启动时就自动创建)。如果并未在脚本中使用这两个数组,打开该指令将会获得性能上的提升。要想该指令生效,必须关闭register_globals和register_long_arrays指令。auto_prepend_file =auto_append_file =指定在主文件之前/后自动解析的文件名。为空表示禁用该特性。该文件就像调用了include()函数被包含进来一样,因此会使用include_path指令的值。注意:如果脚本通过exit()终止,那么自动后缀将不会发生。---www.bianceng.cnvariables_order = "EGPCS" PHP注册 Environment, GET, POST, Cookie, Server 变量的顺序。分别用 E, G, P, C, S 表示,按从左到右注册,新值覆盖旧值。举例说,设为"GP"将会导致用POST变量覆盖同名的GET变量,并完全忽略 Environment, Cookie, Server 变量。推荐使用"GPC"或"GPCS",并使用getenv()函数访问环境变量。register_globals = Off是否将 E, G, P, C, S 变量注册为全局变量。打开该指令可能会导致严重的安全问题,除非你的脚本经过非常仔细的检查。推荐使用预定义的超全局变量:$_ENV, $_GET, $_POST, $_COOKIE, $_SERVER该指令受variables_order指令的影响。PHP6中已经删除此指令。register_argc_argv = On是否声明$argv和$argc全局变量(包含用GET方法的信息)。建议不要使用这两个变量,并关掉该指令以提高性能。register_long_arrays = On是否启用旧式的长式数组(HTTP_*_VARS)。鼓励使用短式的预定义超全局数组,并关闭该特性以获得更好的性能。PHP6中已经删除此指令。always_populate_raw_post_data = Off是否总是生成$HTTP_RAW_POST_DATA变量(原始POST数据)。否则,此变量仅在遇到不能识别的MIME类型的数据时才产生。不过,访问原始POST数据的更好方法是 php://input 。$HTTP_RAW_POST_DATA对于enctype="multipart/form-data"的表单数据不可用。unserialize_callback_func = 如果解序列化处理器需要实例化一个未定义的类,这里指定的回调函数将以该未定义类的名字作为参数被unserialize()调用,以免得到不完整的"__PHP_Incomplete_Class"对象。如果这里没有指定函数,或指定的函数不包含(或实现)那个未定义的类,将会显示警告信息。所以仅在确实需要实现这样的回调函数时才设置该指令。若要禁止这个特性,只需置空即可。y2k_compliance = On 是否强制打开2000年适应(可能在非Y2K适应的浏览器中导致问题)。zend.ze1_compatibility_mode = Off是否使用兼容Zend引擎I(PHP 4.x)的模式。这将影响对象的复制、构造(无属性的对象会产生FALSE或0)、比较。兼容模式下,对象将按值传递,而不是默认的按引用传递。precision = 14浮点型数据显示的有效位数。serialize_precision = 100 将浮点型和双精度型数据序列化存储时的精度(有效位数)。默认值能够确保浮点型数据被解序列化程序解码时不会丢失数据。
[PHP-Core-OutputControl] 输出控制函数很有用,特别是在已经输出了信息之后再发送HTTP头的情况下。输出控制函数不会作用于header()或setcookie()等函数发送的HTTP头,而只会影响类似于echo()函数输出的信息和嵌入在PHP代码之间的信息。implicit_flush = Off 是否要求PHP输出层在每个输出块之后自动刷新数据。这等效于在每个 print()、echo()、HTML块 之后自动调用flush()函数。打开这个选项对程序执行的性能有严重的影响,通常只推荐在调试时使用。在CLI SAPI的执行模式下,该指令默认为 On 。output_buffering = 0 输出缓冲区大小(字节)。建议值为4096~8192。输出缓冲允许你甚至在输出正文内容之后再发送HTTP头(包括cookies)。其代价是输出层减慢一点点速度。设置输出缓冲可以减少写入,有时还能减少网络数据包的发送。这个参数的实际收益很大程度上取决于你使用的是什么Web服务器以及什么样的脚本。output_handler = 将所有脚本的输出重定向到一个输出处理函数。比如,重定向到mb_output_handler()函数时,字符编码将被透明地转换为指定的编码。一旦你在这里指定了输出处理程序,输出缓冲将被自动打开(output_buffering=4096)。注意0: 此处仅能使用PHP内置的函数,自定义函数应在脚本中使用ob_start()指定。注意1: 可移植脚本不能依赖该指令,而应使用ob_start()函数明确指定输出处理函数。使用这个指令可能会导致某些你不熟悉的脚本出错。注意2: 你不能同时使用"mb_output_handler"和"ob_iconv_handler"两个输出处理函数。你也不能同时使用"ob_gzhandler"输出处理函数和zlib.output_compression指令。注意3: 如果使用zlib.output_handler指令开启zlib输出压缩,该指令必须为空。
[PHP-Core-Directory]doc_root =PHP的"根目录"。仅在非空时有效。如果safe_mode=On,则此目录之外的文件一概被拒绝。如果编译PHP时没有指定FORCE_REDIRECT,并且在非IIS服务器上以CGI方式运行,则必须设置此指令(参见手册中的安全部分)。替代方案是使用的cgi.force_redirect指令。include_path = ".:/path/to/php/pear" 指定一组目录用于require(), include(), fopen_with_path()函数寻找文件。格式和系统的PATH环境变量类似(UNIX下用冒号分隔,Windows下用分号分隔):UNIX: "/path1:/path2"Windows: "path1;path2"在包含路径中使用''.''可以允许相对路径,它代表当前目录。user_dir =告诉php在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效。也就是在用户目录之下使用PHP文件的基本目录名,例如:"public_html"extension_dir = "/path/to/php"存放扩展库(模块)的目录,也就是PHP用来寻找动态扩展模块的目录。Windows下默认为"C:/php5"[PHP-Core-HTTP]default_mimetype = "text/html"default_charset = ;"gb2312" PHP默认会自动输出"Content-Type: text/html" HTTP头。如果将default_charset指令设为"gb2312",那么将会自动输出"Content-Type: text/html; charset=gb2312"。[PHP-Core-Unicode] detect_unicode = On 尚无文档[PHP-Core-Misc] auto_detect_line_endings = Off 是否让PHP自动侦测行结束符(EOL)。如果的你脚本必须处理Macintosh文件,或者你运行在Macintosh上,同时又要处理unix或win32文件,打开这个指令可以让PHP自动侦测EOL,以便fgets()和file()函数可以正常工作。但同时也会导致在Unix系统下使用回车符(CR)作为项目分隔符的人遭遇不兼容行为。 cgi.rfc2616_headers = 0 指定PHP在发送HTTP响应代码时使用何种报头。0 表示发送一个"Status: "报头,Apache和其它web服务器都支持。若设为1,则PHP使用RFC2616标准的头。除非你知道自己在做什么,否则保持其默认值 0cgi.nph = Off在CGI模式下是否强制对所有请求都发送"Status: 200"状态码。fastcgi.impersonate = OffIIS中的FastCGI支持模仿客户端安全令牌的能力。这使得IIS能够定义运行时所基于的请求的安全上下文。Apache中的mod_fastcgi不支持此特性(03/17/2002)如果在IIS中运行则设为On,默认为Off。 fastcgi.logging = On是否记录通过FastCGI进行的连接。[PHP-Core-Weirdy] 这些选项仅存在于文档中,却不存在于phpinfo()函数的输出中async_send = Off 是否异步发送。from = ;"john@doe.com" 定义匿名ftp的密码(一个email地址)近核心模块 ;;[Pcre] Perl兼容正则表达式模块pcre.backtrack_limit = 100000 PCRE的最大回溯(backtracking)步数。pcre.recursion_limit = 100000PCRE的最大递归(recursion)深度。如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃。[Session] 除非使用session_register()或$_SESSION注册了一个变量。否则不管是否使用了session_start(),都不会自动添加任何session记录。包括resource变量或有循环引用的对象包含指向自身的引用的对象,不能保存在会话中。register_globals指令会影响到会话变量的存储和恢复。session.save_handler = "files" 存储和检索与会话关联的数据的处理器名字。默认为文件("files")。如果想要使用自定义的处理器(如基于数据库的处理器),可用"user"。有一个使用PostgreSQL的处理器:http://sourceforge.net/projects/phpform-ext/session.save_path = "/tmp"传递给存储处理器的参数。对于files处理器,此值是创建会话数据文件的路径。Windows下默认为临时文件夹路径。你可以使用"N;[MODE;]/path"这样模式定义该路径(N是一个整数)。N表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。[MODE;]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。这是一个提高大量会话性能的好主意。
转载于:https://blog.51cto.com/235571/2120668