博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
十一周三次课(6月4日)
阅读量:6008 次
发布时间:2019-06-20

本文共 38361 字,大约阅读时间需要 127 分钟。

11.32 php扩展模块安装

# /usr/local/php/bin/php -m //查看模块

下面安装一个redis的模块

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、开始编译 make
4、编译后移动到目录 make install
5、修改配置文件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 ,这个就是怎么去添加一个扩展模块

扩展

apache rewrite教程

Apache Rewrite 规则详解

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.com

listen 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=zed
13) PT(pass through to next handler) 传递给下一个处理
例如:
RewriteRule ^/abc(.
) /def$1 [PT] # 将会交给/def规则处理
Alias /def /ghi
14) 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服务器,测试一下,就大功告成了!

apache rewrite 教程

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文件大小非0

rewrite rule的参数:

1RewriteCond指令格式
语法: 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]‘

(强制重定向 redirect) 以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可, 另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠,等等。
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 。 通常,你会希望停止重写操作而立即重定向,则还需要使用’L’标记.

‘forbidden|F’(强制URL为被禁止的 forbidden)

强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。 使用这个标记,可以链接若干RewriteConds以有条件地阻塞某些URL。

‘gone|G’(强制URL为已废弃的 gone)

强制当前URL为已废弃的,即,立即反馈一个HTTP响应代码410(已废弃的)。 使用这个标记,可以标明页面已经被废弃而不存在了.

‘proxy|P’ (强制为代理 proxy)

此标记使替换成分被内部地强制为代理请求,并立即(即, 重写规则处理立即中断)把处理移交给代理模块。 你必须确保此替换串是一个有效的(比如常见的以 。 使用这个标记,可以把某些远程成分映射到本地服务器名称空间, 从而增强了ProxyPass指令的功能。
注意: 要使用这个功能,代理模块必须编译在Apache服务器中。 如果你不能确定,可以检查“httpd -l”的输出中是否有mod_proxy.c。 如果有,则mod_rewrite可以使用这个功能; 如果没有,则必须启用mod_proxy并重新编译“httpd”程序。

‘last|L’ (最后一个规则 last)

立即停止重写操作,并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL(‘/’)为实际存在的URL, 比如, ‘/e/www/’.
‘next|N’ (重新执行 next round)
重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。 它对应于Perl中的next命令或C语言中的continue命令。 此标记可以重新开始重写操作,即, 立即回到循环的头部。
但是要小心,不要制造死循环!

‘chain|C’(与下一个规则相链接 chained)

此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配, 则其后继的链接的规则会被忽略。比如,在执行一个外部重定向时, 对一个目录级规则集,你可能需要删除“.www” (此处不应该出现“.www”的)。

‘type|T=MIME-type’ (强制MIME类型 type)

强制目标文件的MIME类型为MIME-type。 比如,它可以用于模拟mod_alias中的ScriptAlias指令, 以内部地强制被映射目录中的所有文件的MIME类型为“application/x-httpd-cgi”.

‘nosubreq|NS’(仅用于不对内部子请求进行处理 no internal sub-request)

在当前请求是一个内部子请求时,此标记强制重写引擎跳过该重写规则。 比如,在mod_include试图搜索可能的目录默认文件(index.xxx)时, Apache会内部地产生子请求。对子请求,它不一定有用的,而且如果整个规则集都起作用, 它甚至可能会引发错误。所以,可以用这个标记来排除某些规则。根据你的需要遵循以下原则: 如果你使用了有CGI脚本的URL前缀,以强制它们由CGI脚本处理, 而对子请求处理的出错率(或者开销)很高,在这种情况下,可以使用这个标记。

‘nocase|NC’ (忽略大小写 no case)

它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,’A-Z’ 和’a-z’没有区别。

‘qsappend|QSA’ (追加请求串 query string append)

此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。

‘noescape|NE’ (在输出中不对URI作转义 no URI escaping)

此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 一般情况下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十六进制编码。 此标记可以阻止这样的转义,以允许百分号等符号出现在输出中,如:
RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE]
可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’.

‘passthrough|PT’ (移交给下一个处理器 pass through)

此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是一个小修改,使之能对来自其他URI到文件名翻译器的 Alias,ScriptAlias, Redirect 等指令的输出进行后续处理。举一个能说明其含义的例子: 如果要通过mod_rewrite的重写引擎重写/abc为/def, 然后通过mod_alias使/def转变为/ghi,可以这样:

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)

此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=N个规则是else从句. (它和’chain|C’标记是不同的!)

‘env|E=VAR:VAL’ (设置环境变量 environment variable)

此标记使环境变量VAR的值为VAL, VAL可以包含可扩展的反向引用的正则表达式$N和%N。 此标记可以多次使用以设置多个变量。 这些变量可以在其后许多情况下被间接引用,但通常是在XSSI (via <!–#echo var=”VAR”–>) or CGI (如 $ENV{‘VAR’})中, 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。 使用它可以从URL中剥离并记住一些信息。

‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’ (设置cookie)

它在客户端浏览器上设置一个cookie。 cookie的名称是NAME,其值是VAL。 domain字段是该cookie的域,比如’.apache.org’, 可选的lifetime是cookie生命期的分钟数, 可选的path是cookie的路径。
其实apache手册中有

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]

apache rewrite 出现死循环

我的一条规则

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]

这样就不再循环了。

php错误日志级别参考

  • ; E_ALL 所有错误和警告(除E_STRICT外)
  • ; E_ERROR 致命的错误。脚本的执行被暂停。
  • ; E_RECOVERABLE_ERROR 大多数的致命错误。
  • ; E_WARNING 非致命的运行时错误,只是警告,脚本的执行不会停止。
  • ; E_PARSE 编译时解析错误,解析错误应该只由分析器生成。
  • ; E_NOTICE 脚本运行时产生的提醒(往往是我们写的脚本里面的一些bug,比如某个变量没有定义),这个错误不会导致任务中断。
  • ; E_STRICT 脚本运行时产生的提醒信息,会包含一些php抛出的让我们要如何修改的建议信息。
  • ; E_CORE_ERROR 在php启动后发生的致命性错误
  • ; E_CORE_WARNING 在php启动后发生的非致命性错误,也就是警告信息
  • ; E_COMPILE_ERROR php编译时产生的致命性错误
  • ; E_COMPILE_WARNING php编译时产生的警告信息
  • ; E_USER_ERROR 用户生成的错误
  • ; E_USER_WARNING 用户生成的警告
  • ; E_USER_NOTICE 用户生成的提醒
  • & 表示并且
  • ~ 表示非
  • | 表示或者

比如: error_reporting = E_ALL & ~E_NOTICE 表示错误级别为E_ALL 并且除了E_NOTICE

php开启短标签

控制参数:

short_open_tag = On

如果设置为Off,则不能正常解析类似于这样形式的php文件:

而只能解析

这样形式的php文件

所以要想php支持短标签,需要我们把short_open_tag 设置为On.

php.ini详解

这个文件必须命名为''php.ini''并放置在httpd.conf中的PHPIniDir指令指定的目录中。

最新版本的php.ini可以在下面两个位置查看:
语法
该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。
设置指令的格式如下:
directive = value
指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
值(value)可以是:

  1. 用引号界定的字符串(如:"foo")
  2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
  3. 一个PHP常量(如:E_ALL, M_PI)
  4. 一个INI常量(On, Off, none)
  5. 一个表达式(如:E_ALL & ~E_NOTICE)
    INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
    | 位或
    & 位与
    ~ 位非
    ! 逻辑非
    布尔标志用 On 表示打开,用 Off 表示关闭。
    一个空字符串可以用在等号后不写任何东西表示,或者用 none 关键字:
    foo =     ; 将foo设为空字符串
    foo = none  ; 将foo设为空字符串
    foo = "none" ; 将foo设为字符串''none''
    如果你在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,那么你只能在加载这些动态扩展的指令行之后使用这些常量。
    httpd.conf ;;
    还可以在httpd.conf中覆盖php.ini的值,以进行更灵活的配置:
    php_value name value ;设置非bool型的指令,将value设为none则清除先前的设定
    php_flag name on|off ;仅用于设置bool型的指令
    PHP常量(如E_ALL)仅能在php.ini中使用,在httpd.conf中必须使用相应的掩码值。
    带"SYS"标志的指令只能在httpd.conf中的全局配置部分使用,
    带"ini"标志的指令不能在httpd.conf中使用,它们仅能用于php.ini中。
    ====================配置指令详解=======================================
    以下每个指令的设定值都与 PHP-5.2.0 内建的默认值相同。
    也就是说,如果''php.ini''不存在,或者你删掉了某些行,默认值与之相同。
    ;;;;;;;;;;;;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

你可能感兴趣的文章
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
申请Let’s Encrypt免费证书,给自己网站增加https访问
查看>>
javascript+html 实现隐藏 显示
查看>>
BZOJ 2120 数颜色
查看>>
正则表达式学习笔记——基础知识
查看>>
织梦如何实现二级栏目导航的仿制
查看>>
网上购物系统(Task010)——FormView编辑更新商品详细信息
查看>>
Struts2 技术全总结 (正在更新)
查看>>
PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
《编程之美》——寻找发帖“水王”学习与扩展 转surymj博客
查看>>
Linux 虚拟机VMware安装失败,提示没有选择磁盘
查看>>
LeetCode-Permutations
查看>>
C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
tomcat 配置首页
查看>>
算术运算表达式正则及分析
查看>>