OB 都是 操作缓冲区的函数
php ini :262 默认开启; buffer写满 才会写入硬盘
获取php缓冲区中的数据 ob_get_contents();
代码中开启buffer: ob_start();
php buffer
动->静 是通过nginx 配置实现(伪静态)
如果目录或文件存在,优先调用现有目录或文件。
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}% {REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}% {REQUEST_FILENAME} !-f
RerwriteRule ^/detail/([0-9]*).html$ /detail.php?id=$1
ob_start();
file_put_contents('index.shtml',ob_get_clean());
动态页面是根据用户的请求,从服务器数据库获取相应的数据,返回至页面
静态页面是 纯html+css页面,访问不会访问数据库。
伪静态,顾名思义,假的静态,实为动态,只是把的动态的pathinfo转换成访问静态文件的格式,再通过自己内部设定相应的正则表达式匹配到符合的假理由,将其转换成自己设定好的真正的接口路由,
方法有 在单文件中设置,匹配到就转动态
还有在服务器中设置,appach和ngix差不多,都是vhost中,虚拟域名设定的地方,开启重写拓展后,通过设定正则规则自动完成伪静态,还可以设置,有文件匹配就匹配文件或者 优先匹配伪静态的路由。
没什么难的,理解下原理就行,真正用到的,框架里应该都有此功能吧
触发系统生成纯静态化页面之 页面添加缓存时间
filemtime() 获得文件修改时间
触发系统生成纯静态化页面
模板引擎渲染php数据,生成纯静态化的方法:
1.连接数据库,从数据库数据相应数据
2.把获取到的数据填充到模板文件
3.把动态页面转化为静态页面,生成静态化文件
ob_staty()
file_put_content('index.html', ob_get_clean())
访问index.html文件
PHP如何实现页面纯静态化:
1,file_put_contents()函数
2.使用PHP内置缓存机制实现也米娜静态化 -- output_buffering
如何实现php页面纯静态化
php脚本输出内容到浏览器显示的流程:
先将输出的内容写入到php buffer中,然后通过tcp协议输出显示到终端。
php buffer 在php.ini文件中有output_buffering选项的配置,
设置为on时,php中输出内容后,使用ob_get_contents()可以获取到缓存区的数据,使用echo等方式可以打印输出该内容
如果没有开启该配置,想要使用的话,可以在代码中通过使用ob_start() 开启
php静态化分类
优化页面响应时间:
动态页面静态化
优化数据库
使用负载均衡
使用缓存
nginx下rewrite配置
找到/etc/nginx/conf.d目录下的ngnix配置文件,打开后,找到server进行规则写入。
serer{
listen 80;
server_name static.com;
index index.shtml index.html index.htm index.php;
root /data/static;
location /{
if(!-e $request_filename){
rewrite ^/detail/([0-9]*).html$ /detail.php?id=$1 last;#规则
break;
}
}
}
重启nginx服务:sudo service nginx restart
注:伪静态配置根据业务需求来定 并非配置越多越好。太多影响服务器性能。
apache下rewrite配置
虚拟域名配置
1)找到httpd.conf 查找LoadModule rewrite_module modules/mod_rewrite.so 将其开启。通过php内置函数phpinfo()查看apache是否开启了此模块。查找mod_rewrite 若存在则代表开启。
2)找到Include conf/extra/httpd-vhosts.conf并将其开启。
3)配置httpd-vhosts.conf文件:
<VirtualHost 127.0.0.19:8080>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "e:/sing/state"
ServerName state.com
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error.log"
CustomLog "logs/dummy-host.example.com-access.log" common
#RewriteEngine on
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
#RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-f
#RewriteRule ^/detail/([0-9]*).html$/detail.php?id=$1
</Virtualhost>
httpd_vhosts.conf配置文件配置相关信息
其中rewritecond中的document_root表示网站域名 request_filename表示url中域名后的请求内容。!-d表示目录 !-f表示文件。这两个rewritecond的意思是,当访问网站时,若遇到url中存在对应目录对应文件时,则直接访问对应的目录文件,而不需遵守rewriterule中的匹配规则。
而rewriterule则代表,当访问网站url时,会将url按照这条写好的规则进行匹配,若匹配成功,则访问规则中定义的文件。
配置windows中的drivers里的hosts文件,将127.0.0.19 state.com写入文件中。
apache伪静态url地址rewrite方式配置完成。
利用$_SERVER获取PATH_INFO变量 然后通过获取到的地址 用php的正则判断 将符合判断的内容取出,并进行下一步处理。
其中,正则匹配运用到了php的一个内置函数为:preg_match($reg,$str,$newstr),其中第一个参数为:正则匹配的规则;第二个参数为:要进行匹配的字符串;第三个参数为:匹配成功后生成的新的字符串。
PS:其中,关于$_SERVER中的PATH_INFO变量,在Apache服务器中,是默认开启的。但是在Nginx中,默认是不开启的,所以如果是使用了Nginx服务器且运用到了PATH_INFO功能,请先检查是否开启,若没有开启,则对Nginx服务器进行配置。
php.ini 文件内存在output_buffering设置。为on时开启缓存区功能
ob_start() 开启一个新的缓存区
filemtime 获取文件最新一次更改时间。
ob_get_clean() 获取缓存区内容输出到文件内并清空缓存区
ob_get_contents() 获取缓存区内容输出到文件内 不清空缓存区
页面静态化函数
apache伪静态配置示例
页面静态化流程
OB函数 4个关键
pPHP页面纯静态化
crontab -e 编辑crontab
*/5****
1.五个*分别代表:分、时、日、月、周。
2.*/5表示:每5分钟。
查看 crontab 日志文件 tail -f /var/log/cron.log
静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页。并且静态页面不能自主管理发布更新的页面。
动态页面是通过执行asp,php,jsp,.net等程序生成客户端网页代码的网页。 动态页面通常可以通过网站后台管理系统对网站的内容进行更新管理。