标签:sql语句 sample tun tools guard 响应报文 web 命令 cert
一、LAMP概述CGI默认是没有启动的,
client请求httpd服务:
静态:向本地的内核发起系统调用,通过IO请求,加载本地文件,返回即可
动态:httpd进程通过cgi协议,向后端运行cgi程序的环境,提请一个进程,加载到cgi脚本到用户空间,让子进程运行;子进程运行的结果用cgi协议返回给server
静态:client--http-->httpd
动态:client--http-->httpd--->cgi-->libphp5.so()
可以把libphp5.so理解为php引擎
动态资源:client--[http]-->httpd--->libphp5.so()--[mysql]--->mysql server
//php自己是不会和mysql交互的,但是php中的代码可能用到mysql
对于http来说,我返回的都是纯文本数据流,//动态的返回的也是运行后的结果而已
http负责响应client请求以及管理后端的cgi进程
程序=指令+数据
数据模型:分类
1.概念数据模型
现实世界--[抽象]---信息世界---[转换]----计算机世界
2.逻辑数据模型: //对应的数据库称之为关系型数据库,如MySQL,在1的基础上加了各个实体的属性
层次模型:
网状模型:
关系模型:execl行和列,就是一种关系,表和表之间也可能有关系
3.物理数据模型://数据在物理介质上的具体组织结构
关系模型:Oracle,Sybase,Infomix //后两个的定位太具有前瞻性
IBM:DB2,SQL Server[联合sybase做的],MySQL,PostgreSQL,
MySQL-->MariaDB
指令:代码文件
数据:数据存储系统、文件
client======httpd_s=======cgi运行环境=======数据存储系统
http协议 cgi协议 mysql协议
请求流程:
clinet-httpd协议-->httpd[动态]---cgi协议-->application server(program file)---mysql协议--->mysql server
连接Mysql的组件,是mysql驱动
2.php:通用编程语言
PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。
1999.Zend Enginx1.0,PHP4.0诞生
2004.Zend Engine2.0 PHP5.0
编译:opcode[php编译后的中间语言]
执行:opcode拿到引擎上执行
Zend Engine:PHP的解释器,将php代码的处理分成了两段
编译阶段:运行阶段
PHP--Zend Opcode{二进制格式,类似java字节码}存储于内存中--->使用Zend Engine去执行Opcode
Opcode是一种php脚本编译后的中间语言,PHP的脚本代码四个阶段
1.Scanning(Lexing)将php代码装换为语言片段(Tokens)
2.Parsing--将Tokens转换成简单而有意义的表达式
3.Compilation--将表达式编译成Opcode
4.Execution--顺次执行Opcode,每次一条,从而实现PHP脚本的功能
扫描-->分析-->编译--->执行 //scanning-->parsing-->Comilation--->Excution
//生成的Opcode可以复用,实现加速
PHP加速器
基于pHP的特殊扩展机制和opcode缓存扩展也可以将opcode缓存于php共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段直接运行,提高性能。
这些加速器,并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列已达到快速执行的目的
1.APC:Alternative PHP Cache //遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4。项目地:http://pecl.php.net/package/APC。
2.eAcceleator //源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。项目地址, http://eaccelerator.net/。
3.XCache http://xcache. //快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址,http://xcache.lighttpd.net/
4.Zend Optimlzer和Zend Guard Loader //Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址,http://www.zend.com/en/products/guard/runtime-decoders
5.NuSphere PhpExpress //NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,http://www.nusphere.com/products/phpexpress.htm
PHP:脚本编程语言,嵌入到html中的嵌入式web程序开发语言
无需编译,zend以后可以编译了,基于zend编译成opcode(二进制的字节码,重复运行,可省略编译环境)
3.php与http结合的方式
CGI //通过cgi协议,不常见,传统模式,创建子进程完成后销毁,不建议
FastCGI //可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)
modules //模块方式,用的最多,把php编译成httpd的模块,当有人请求动态资源的时候,就不必启动一个php或者cgi进程来单独响应了
//httpd直接利用该模块运行即可
二、安装与配置LAMP
http2.4与php-5.5.28的通信方式。
基于cgi通信:不建议
基于fastcgi 通信:安装配置脚复杂,这需要将PHP独立出来专门执行.php的代码。相较于模块安装响应速度快。 //php-fpm: 启动为服务进程
基于module 的通信:安装配置方便但速度较慢。
prefork模式需要的模块:libphp5.so
worker, event模式需要的模块:libphp5-zts.so
编译安装:如何实现
1)编译安装php-5.5
[root@example.com ~]# tar xf php-5.5.28.tar.gz [root@example.com ~]# cd php-5.5.28 [root@example.com php-5.5.28]# yum groupinstall Development tools Server Platform Development -y [root@example.com php-5.5.28]# yum -y groupinstall Desktop Platform Development [root@example.com php-5.5.28]# yum -y install bzip2-devel libmcrypt-devel libxml2-devel openssl-devel [root@example.com php-5.5.28]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts [root@example.com php-5.5.28]# make && make install
1、为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接别处MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
2)配置httpd
[root@example.com php-5.5.28]# vim /etc/httpd/httpd.conf LoadModule php5_module modules/libphp5.so //查看此模块是否加载 #在文件内添加下面的内容,位置最好在AddType下面的行: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps #在此行中添加index.php DirectoryIndex index.php index.html
3)测试环境
[root@example.com php-5.5.28]# cd /usr/local/apache/htdocs/ [root@example.com htdocs]# vim index.php <?php $link = mysql_connect('192.168.1.8','root','redhat'); if ($link) echo "Success..."; else echo "Failure..."; mysql_close(); ?>
4)mysql授权
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%.%' IDENTIFIED BY 'redhat' ;
Query OK, 0 rows affected (0.20 sec)
浏览器登录查看是否连接成功
yum安装实现:Centos7
yum install php mariadb httpd
systemctl reload httpd
1.测试php:
cd /var/www/html;vim index.php
<?php
phpinfo();
?>
2.测试mariadb和php
CentOS6:httpd,php,mysql-server,php-mysql
CentOS7:httpd,php,mariadb-server,php-mysql
mysql -uroot -h127.0.0.1 -p //初始密码为空
支持SQL语句对数据管理
DDL,DML,DCL
DDL:create,alter,drop,show
DML:instert,delete,select,update
授权能够远程的链接用户
granto all privileges on db_name.table_name to username@host identified by "passwd"
grant all on testdb.* to testuser@'192.168.4.%' identified by 'testuser';
flush privileges
vim /etc/my.cnf
[mysqld]
skip_nameresolve on
//关闭mysql反解,ip为用户名
systemctl restart mariadb
//假如没有ok的话, yum install php-mysql
serivice httpd reload
测试页面
<?php
$conn = mysql_connect('192.168.4.100','testuser','testuser');
if ($conn)
echo "OK";
else
echo "False"
?>
3.安装wordpress
yum install wordpress -y [root@node103 html]# ln -sv /usr/share/wordpress/ wordpress [root@node103 html]# cp /usr/share/wordpress/wp-config-sample.php /etc/wordpress/wp-config.php 预先在数据库中创建一个库给wordpress用。 cp wp-config-sample.conf.php wp-config.php Mariadb:grant all on wordpress.* to wordpp@'127.0.0.1' identified by 'wordpp' vim wp-config.php 修改对应信息
三、深入理解LAMP
服务器自身存储有error_page: /usr/share/httpd/error/
:错误页面可以自定义
静态资源处理模型://如图
静态:
client-->内核空间-->用户空间[httpd进程]-->内核空间-->加载磁盘文件--->[内核空间]--->用户空间[httpd进程封装]->[内核空间]-->发送给用户
Send file机制://用的不多,在内核中直接构建响应。
client--httpd请求-->内核空间-->加载磁盘文件[封装]-->发送给client
prefork或者worker模型:
进程睡眠:不可中断睡眠+可中断睡眠
一次IO:数据从磁盘到用户空间,在此阶段进程处于阻塞状态[睡眠],IO结束,则唤醒进程
一个进程进来后:加载文件的时候,该进程处于阻塞,其他请求是进不来的
在一个进程处理多个请求的http模型的时候
event就是这种机制:
基于callback机制,该进程在等待IO完成的过程中,也可以接受其他请求,内核在资源加载完成后,callback该进程,让进程完成后续操作
:该进程复制内核空间已经加载的请求所需数据,然后复制到用户空间的内存中
水平触发:数据加载完毕,我通知你来复制,没有回应,就再次通知
边缘触发:只通知一次
IO:
阻塞IO和非阻塞IO
同步IO和异步IO
AIO:异步IO //内核加载好数据后,直接复制数据到进程可访问内存中,告诉进程ok了
IO过程分两段:
1.进程向内核发起调用
2.内核从disk加载然后送到进程可访问内存,然后告诉进程ok了
用户发起调用就有了两种模式:
阻塞:我就一直等着,加载完成,再继续下一个流程
非阻塞:基于事件驱动机制,基于epoll()调用实现event driven,
动态资源:
如果php和mysql在同一个主机上,基于unix socket会更快//让mysql监听unix socket上
必须监听在127.0.0.1或者localhost主机名才能基于unix socket
mysql对用户名和主机名(ip)特别敏感://ip和主机名必须对应
php和http结合主要适合modules,cgi用的很少//注:moudle和fcgi不能共存
cgi:http进程接收到一个动态网页请求,于是fork一个子进程,运行php引擎,加载并执行php脚本,最后返回结果给主进程
假如有200个请求,http就需要创建200个子进程,而且cgi不能被复用
每次都需要创建子进程,然后销毁子进程
基于cgi只能在同一个主机上,mysql只能在本地
fastcgi:把php运行为一个服务,监听在一个套接字上,这个服务有主控进程,可以根据需要创建空闲进程,不再需要httpd自己创建
php服务直接处理和响应http请求,以及回复,类似于prefork模型
php=http===>httpd===fastcgi===>php 服务器
监听在套接字,可以跨主机使用
yum install php-fpm
client---[http]--->httpd---[fastcgi]-->php 服务器---[mysql]--->mysqld
http扮演fastcgi的客户端[加载mod_proxy_fcgi],帮忙请求php服务器,
php扮演mysql的客户端,请求mysql_s中的数据 //php中有专门链接mysql的库,调用该库即可
http2.2默认没有fcgi模块,不能使用fcgi
http2.4,mode_proxy_fcgi
CentOS7:
1.[Modules]httpd,php,php-mysql,mariadb-server
2.[FastCGI]httpd,php-fpm,php-mysql,mariadb-server
//这两种不能同时使用
CentOS6:
httpd,php,php-mysql,mysql-server //fast-cgi需要编译安装
PHP:脚本语言解释器
配置文件:/etc/php.ini,/etc/php.d/*.ini
配置文件在php解释器启动时被读取,因此对配置文件的修改如何生效?
Modules:重启httpd服务
FastCGi:重启php-fpm服务
CGI:会自动修改,http单独启动该进程
rpm -ql php-common //提供php.ini配置文件
/etc/php.ini
[foo]:开头
directive = value
注释符号:
# 纯粹的注释信息
; 可启用的directory
php.ini核心配置选项文档:php.net/manual/zh/ini.core.php
php.ini配置选项列表:php.net/manual/zh/ini.list.php
date.timezone = Asia/Shanghai
systemctl start httpd
Mariadb(mysql)
数据模型:层次模型,网状模型,关系模型
关系模型:
二维关系:
表:row,column
索引:index
视图:view //保存的是一个语句
SQL接口:Strunctured Query Language
类似于OS的shell接口;也提供了编程能力
ANSI:SQL标准,SQL-86,SQL-89,SQL-92,SQL-99,SQL-03
例如SQL-86有中级,低级和高级,一般只能达到中级
DDL:data define language
create,alter,drop
DML:date mantapulating language //操作
insert,delete,update,select
DCL:date control language 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句
grant,deny,revoke
编程接口:选择、循环
SQL代码:
存储过程:storge
存储函数:function
触发器:trigger
事件调度器:event scheduler
附件一.fcgi的实现
fastcgi将PHP从httpd中独立出来,httpd用来处理用户的请求,遇到PHP代码就将其转到后方的php-fpm服务器,释放了httpd服务器的压力(专注于处理静态的内容),http作为反向代理,需要安装proxy-fcgi模块。然而生产环境中有专门做方向代理的服务器有HA-proxy和nginx,这两种的处理请求方面的速度远远大于httpd
本实验只是学习下httpd是如何工作于反向代理的模式,httpd-2.2所带的模块没有proxy-fcgi,需要下载proxy-fcgi源码编译安装,而httpd-2.4就直接安装的有此模块,此实验就是基于httpd-2.4的。
实验环境:CentOS7,Mariadb-server,http2.4.6,
yum install mariadb-server php httpd php-mysql php-fpm php-xcache//php -m验证意境加载的模块
=====================================================
1.配置httpd
cat /etc/httpd/conf.modules.d/00-proxy.conf //已经配置 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so LoadModule proxy_scgi_module modules/mod_proxy_scgi.so /etc/httpd/conf.modules.d/00-mpm.conf //修改默认http工作模型 cat 01-cgi.conf // LoadModule cgid_module modules/mod_cgid.so LoadModule cgid_module modules/mod_cgid.so LoadModule cgi_module modules/mod_cgi.so vim httpd.conf #在文件内添加下面的内容,位置最好在AddType下面的行: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
2.配置
[root@node112 httpd]# cp /etc/php-fpm.conf{,.bak}
[root@node112 httpd]# vim /etc/php-fpm.d/www.conf //主配置文件为/etc/php-fpm.conf
#配置fpm的相关选项为你所需要的值
m.max_children = 50 #最大子进程数
pm.start_servers = 5 #开机预启动子进程数
pm.min_spare_servers = 2 #最小空闲子进程数
pm.max_spare_servers = 8 #最大空闲子进程数
启动php-fpm,查看是否正常启动:
[root@example.com etc]# service php-fpm start
[root@example.com etc]# ss -tunl |grep 9000
tcp LISTEN 0 128 127.0.0.1:9000
3.配置index.php
<h1>
<?php
phpinfo();
?>
4.配置Xcache
[root@node112 html]# vim /etc/php.d/xcache.ini
extension = xcache.so //也可以使用绝对路径,yum安装的意境配置好
status界面查看Xcache是否启动 //php -m |grep -i xcache
httd的工作模型:prefork,worker,event //httpd -M |grep 看当前工作模型
四、Xcache
1.Xcache的实现的加速php
yum install php-xcache
xcache-admin 类似于phpmyadmin
配置文件;/etc/php.d/xcache.ini
xcache是在内存中缓存的
vim xcache.ini //不用修改
xcache.size = 60M 缓存大小
xcache.slots = 8K //每个槽大小
xcache.ttl = 0
systemctl restart php-fpm.service
测试页:phpinfo(); 会显示xcache的信息
xcache和module的php结合
xcache和php-fpm结合
关闭xcache,移走配置文件,重启服务即可
xcache在centos7上效果不是很明显
2.编译安装xcache
其他都是rpm包安装的
1.yum install php-devel
tar xf xcache-3.2.0
cd xcache-3.2.0
phpize //生成config文件,因为是php的组件,所以php告诉其当前php的环境是什么
//配置php编译环境
./confiure --enable-xcache -with-php-config=/usr/bin/php-config //后面的可以不给
make && make install
/usr/lib64/modules/ 安装到了目录
cp 源码包/xcache.ini /etc/php.d/xcache.ini
systemctl restart httpd //因为默认php是编译到http中的
编译安装的加速效果比rpm包要好
最多并发500已经达到上限了
ab -n 1000 -c 100 http://192.168.4.100/pmd/index.php //总共1000个,一次100个 ab命令结果解释 Concurrency Level: 100 //并行级别,同时100个请求 Time taken for tests: 19.233 seconds // Complete requests: 1000 //在这100个并发请求上,请求了1000次 Failed requests: 0 Total transferred: 8336614 bytes HTML transferred: 7540000 bytes //整个场景中的HTML内容传输量 Requests per second: 51.99 [#/sec] (mean) //每s处理的请求数量,平均值 Time per request: 1923.346 [ms] (mean) //每个请求需要的时间,1923/100是单个请求所需时间,mean:平均值 Time per request: 19.233 [ms] (mean, across all concurrent requests) Transfer rate: 423.28 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 5 60.6 0 1328 //建立链接 Processing: 53 1888 2110.5 1090 9474 //处理过程 Waiting: 40 1823 2044.5 1052 8825 //等待c接受请求 Total: 75 1894 2112.6 1091 9476 Percentage of the requests served within a certain time (ms) 50% 1093 66% 1247 75% 1373 80% 1493 90% 4061 95% 4398 98% 5608 99% 7368 100% 7785 (longest request)
整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,
其中50%的用户响应时间小于1093 毫秒,60% 的用户响应时间小于1247 毫秒,
最大的响应时间小于7785 毫秒
由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,
所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数
测试尽量在远程主机上测试
c----http_s //c发送到s
http_s------响应 //获取资源,运行完毕,构建响应报文
https_s----发往c //s构建后发送到c
第一阶段:慢:服务器负载较大,带宽
第二阶段:s自身处理速度慢
第三阶段:带宽有限,c接受能力有限
注:phpmyadmin假如出现,不能打开/var/lib/php/sesion等信息
1.创建目录
2.chown -R apache.apache
五、php-fpm
LAMP:
httpd+php:
module: //php包
cgi
fcgi:php工作为一个服务 //php-fpm包
php-fpm:
有主进程,接受请求后,生成子进程[事先也有创建的],响应用户请求
类似于httpd的prefork模型
yum list all |grep php //查看mpm模块
1.php-fpm事先
yum install php-fpm
rpm -ql php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm //脚本配置文件
/usr/lib/systemd/system/php-fpm.service
CentOS6:
PHP-5.3.2之前默认不支持fpm机制,需要自行打补丁,并编译安装
http-2.2:默认也不支持fcgi协议,需要自行编译此模块
解决方案:编译安装httpd-2.4[自带了fcgi协议],php-5.3.3之后的版本,自带了fpm
CentOS7:
httpd-2.4:默认编译支持了fcgi模块,
同时提供了php-fpm包
配置文件:
/etc/php-fpm.conf,/etc/php-fpm.d/*.conf 用于配置php进程,专用于fpm
/etc/php.ini //php环境主配置文件
/etc/php-fpm.conf
Pool Defination /定义php链接池的位置
如图三:
httpd根据请求的后缀,例如.php ,将该请求转发到php引擎,但是此时php依旧不是模块
静态资源:httpd自己去取并封装返回请求
动态:调用自己的fpm代理模块
httpd使用fcgi的一个反代理模块,把用户请求给反向代理,发送给fpm进程
分析该请求[url],先加载程序文件,加载后,使用子进程运行,子进程运行完后,返回给fcgi模块
主进程:接受fcgi模块的请求,加载程序文件
子进程:运行该脚本,发送给fcgi,封装fcgi协议
fpm和httpd可以不在同一个主机上
1.fpm需要监听在一个能够与httpd通信的地址上
2.动态资源应该部署在php主机上,静态放在http主机上
2.//从httpd-php
1.配置vim /etc/php-fpm.d/www.conf listen = 127.0.0.1:9000 listen.backlog = -1 //等待队列的长度,-1无限制 listen.allowed_clients = 127.0.0.1 //允许的主机 pm = static/dynamic static:固定数量的子进程,pm.max_children dynamic:子进程以动态模式工作,下面4个都包括 pm.max_children //最大并发连接数 pm.start_servers //启动 pm.min_spare_servers pm.max_spare_servers pm.max_requests = 500 //最多处理请求数 注:一般max_spare_server大于start_children 2.systemctl start php-fpm systemctl status php-fpm yum install httpd httpd -M |grep fcgi //查看fcgi模块是否装载 cat /etc/httpd/conf.modules.d/00-proxy.conf LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 3.vim /etc/httpd/conf.d/fcgi.conf //创建配置文件 代理分为:正向和反向 ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 ^/ :引用的是/var/www/html :指定的httpd的根目录 $1 :引用的是(.*.php) 的内容 例如www.mt.com/admin/index.php ,$1引用的是admin/index.php ================================================= ProxyRequests off ProxyPassMatch ^/(*.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 =========================================== httpd -t systemctl restart httpd 4.创建测试页: vim index.php <?php phpinfo(); ?> http://192.168.4.100/index.php //需要加上index.php Server API FPM/FastCGI vim /etc/httpd/conf.d/fcgi.conf DirectoryIndex index.php //装载默认主页 ProxyRequests off //关闭正向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 //发送*.php主页到 http://192.168.4.100/ //将能够使用 5.虚拟主机 取消DocumentRoot mv cgi.conf vhosts.conf vim vhosts.conf DirectoryIndex index.php <VirtualHost *:80> ServerName www.b.net DocumentRoot /www/b.net/htdocs/ ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 <Directory "/apps/vhosts/b.net"> Options None AllowOverride None Require all granted </Directory> </VirtualHost>
//创建多个vhosts
3.从php(fpm)-mysql
yum install mariadb php-mysql
vim my.cnf
skip_name_resolve = ON
授权一个用户:wolf ,wolf
测试页:
<h1> www.test.com </h1>
<?php
$conn = mysql_connect('192.168.4.100','wolf','wolf');
if ($conn)
echo "OK";
else
echo "failuser";
?>
注:php必须以分号为行尾,而且
systemctl reload php-fpm
systemctl stop mariadb55
再次测试
数据模型:http://www.cnblogs.com/yue-blog/p/5989191.html
逻辑数据模型:http://www.cnblogs.com/yue-blog/p/6010527.html
参考博客:http://blog.51cto.com/cuchadanfan/1688813
标签:sql语句 sample tun tools guard 响应报文 web 命令 cert
原文地址:http://blog.51cto.com/hmtk520/2063425