LAMP: 一般是linux+apache+mariadb(mysql)+3P(p: php, perl, python)
LAMMP: memcached 静态资源:静态内容;客户端从服务器获得的资源的表现形式与原文件相同; 动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端;CGI:web服务器与应用程序服务器通信的协议
--------------------------------------------------------------------------------------------
cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序 (或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
后来出现了一种更高级的方式是, web服务器可以内置perl解释器或php解释器。 也就是说这些解释器做成模块的方式,web服务器会在启动的时候就启动这些解释器。 当有新的动态请求进来时,web服务器就是自己解析这些perl或php脚本,省得重新fork一个进程,效率提高了。
fastcgi的方式是,web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退 出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回 给web服务器,最后自己接着等待下一个请求的到来,而不是退出。
fastcgi跟cgi的区别是:cgi:fork一个新的进程进行处理,处理数据时, 读取参数,处理数据,然后就结束生周期fastcgi用tcp方式跟远程机子上的进程或本地进程建立连接,需要开启tcp端口,进入循环,等待数据的到来,处理数据
----------------------------------------------------------------------------------------------------
php解释器
Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。
执行流程:
1、Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens)
2、Parsing —— 将Tokens转换成简单而有意义的表达式3、Compilation —— 将表达式编译成Opocdes4、Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。
常见加速器:xcache 包名php-xcache
php-common提供了php配置文件(解释器读取配置文件指定了php运行环境),php包提供了httpd的模块调用文件
配置文件:/etc/php.ini, /etc/php.d/*.ini
配置文件(php.ini)在PHP启动时被读取。对于服务器模块版本的PHP,仅在php启动时读取一次。 对于CGI和CLI 版本,每次调用都会读取。 ini文件格式:[Foo]: Secion Header directive = value ; : 注释符; php.ini核心配置选项:http://php.net/manual/zh/ini.core.php php.ini配置选项列表:http://php.net/manual/zh/ini.list.phphttpd+php:三种方式
1.调用modules httpd prefork: libphp5.so httpd event or worker: libphp5-zts.so2.cgi3.fastcgi(fpm)几种加速器:APC, eAccelerator, Xcache
请求流程:Client --> (http协议) --> httpd --> (cgi协议) --> application server (program file) --> (mysql提供的与应用程序交互的协议) --> mariadb
CentOS 7:
程序包:httpd, php, php-mysql, mariadb-server 注意:php要求httpd使用prefork MPM 启动服务: systemctl start httpd.service systemctl start mariadb.serverCentOS 6: 程序包:httpd, php, php-mysql, mysql-server 启动服务: service httpd start service mysqld start以Centos7为例,安装了上述三个包后
分别启动三个服务后再/var/www/cgi-bin/下面创建index.php,使用测试代码测试
php和mariadb是否生效
浏览器访问发现生效
在lamp上安装wordpress:
1.下载wordpress源码包
2.将源码包放到/var/www/html目录下
3.解压源码包,进入wordpress目录
4.设置wp-config文件
编辑:修改以下信息
根据上面的信息做数据库授权:
创建数据库:
登陆测试:
在lamp上部署phpmyadmin:
1.下载phpmyadmin源码包
2.将源码包放到/var/www/html目录下
3.解压源码包,创建软链接:
生成一段随机数:
将生成的随机数填到这里,用于基于cookie的加密密码的认证
登录测试:发现缺乏mbstring字符支持
安装mbstring:yum install php-mbstring
设置mysql管理员密码
登录测试:
lamp下搭建discuzz论坛:
1.下载discuzz的zip包,有以下多种:
2.用unzip命令解压压缩包,并且将upload目录下所有文件复制到/var/www/html下,给予写权限
3.如果你下载的是GBK语言环境的包需要修改/etc/php.ini文件支持GBK编码格式
4.测试进入安装向导
5.为discuzz创建数据库,为管理员添加密码(你也可以特意为discuzz创建用户并且授权,像前面搭建wordpress那样)
6.安装成功,管理员admin登陆成功: