实现LAMP架构
LAMP介绍
LAM(M)P:
L: linux A: apache (httpd) M: mysql, mariadb M:memcached P: php, perl, python
WEB资源类型:
静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
Web相关语言
客户端技术: html,javascript,css,jpg 服务器端技术:php, jsp,python,asp
CGI
CGI:Common Gateway Interface(通用网关接口)
可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
请求流程:
Client -- (httpd) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql
php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)
LAMP工作原理
PHP简介
官网:http://www.php.net/
PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
Rasmus Lerdorf于1994年开始开发PHP,最初是一组被Rasmus Lerdorf称作“Personal Home Page Tool” 的Perl脚本, 可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/FI”。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即PHP1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布
1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP 5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进
PHP Zend Engine
1> Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司 2> Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用 3> Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode
PHP的Opcode
Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
1、Scanning 词法分析,将PHP代码转换为语言片段(Tokens) 2、Parsing 语义分析,将Tokens转换成简单而有意义的表达式 3、Compilation 将表达式编译成Opcode 4、Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
扫描-->分析-->编译-->执行
php配置
(1)php:脚本语言解释器
(2)配置文件:/etc/php.ini, /etc/php.d/*.ini
(3)配置文件在php解释器启动时被读取
(4)对配置文件的修改生效方法
Modules:重启httpd服务 FastCGI:重启php-fpm服务
/etc/php.ini配置文件格式:
[foo]:Section Header directive = value
注释符:较新的版本中,已经完全使用;进行注释
#:纯粹的注释信息 ;:用于注释可启用的directive
Php性能调优
max_execution_time= 30 最长执行时间30s memory_limit 128M 生产不够,可调大 display_errors off 调试使用,不要打开,否则可能暴露重要信息 display_startup_errors off 建议关闭 post_max_size 8M 最大上传数据大小,生产可能临时要调大,比下面项要大 upload_max_filesize 2M 最大上传文件,生产可能要调大 max_file_uploads = 20 同时上传最多文件数 date.timezone =Asia/Shanghai 指定时区 short_open_tag=on 开启短标签,如<? phpinfo();?>
php配置
php.ini的核心配置选项文档: http://php.net/manual/zh/ini.core.php
php.ini配置选项列表:
http://php.net/manual/zh/ini.list.php
php语言格式
<?php ...php code... ?>
php代码
格式1
<?php echo "<h1>Hello world!</h1>" ?>
格式2
<h1> <?php echo "Hello world!" ?> </h1>
php测试代码
<?php echo date("Y/m/d H:i:s"); phpinfo(); ?>
Php使用mysqli扩展连接数据库
Php使用mysqli扩展连接数据库的测试代码
<?php $mysqli=new mysqli("mysqlserver",“username",“password"); if(mysqli_connect_errno()){ echo "Failure"; $mysqli=null; exit; } echo "OK"; $mysqli->close(); ?>
实验演示:
A主机:192.168.34.101
B主机:192.168.34.102
(1)在B主机上安装mariadb-server服务并启动服务
[root@centos777~]#yum install mariadb-server -y [root@centos777~]#systemctl start mariadb
(2)在B主机上创建一个测试用户
grant all on *.* to test@'192.168.34.%' identified by 'centos';
(3)在A主机安装php-mysql包
[root@centos7html]#yum install php-mysql -y
(4)在A主机的/var/www/html目录下写PHP文件
[root@centos7html]#cd /var/www/html [root@centos7html]#vim mysqli.php 写入php脚本 <?php $mysqli=new mysqli("192.168.34.102","test","centos"); if(mysqli_connect_errno()){ echo "Failure"; $mysqli=null; exit; } echo "OK"; $mysqli->close(); ?>
(5)在网站上测试页面效果,输入192.168.34.101/mysqli.php即可访问到代码结果
Php使用PDO(PHP Data Object)扩展连接数据库
使用pdo扩展连接数据库的测试代码1
主机A:192.168.34.101
主机B:192.168.34.102
(1)修改主机A的php脚本
[root@centos7html]#vim pdo.php <?php $dsn='mysql:host=192.168.34.102;dbname=test'; $username='test'; $passwd='centos'; $dbh=new PDO($dsn,$username,$passwd); var_dump($dbh); ?>
(2)主机B的数据库服务启动
systemctl start mariadb
(3)在网站上进行测试页面
输入192.168.34.101/pdo.php即可访问当代码结果
使用pdo扩展连接数据库的测试代码2
(1)修改主机A的php脚本
cd /var/www/html
vim pdo1.php
<?php try { $user='test'; $pass='centos'; $dbh = new PDO('mysql:host=192.168.34.102;dbname=mysql', $user, $pass); foreach($dbh->query('SELECT user,host from user') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
(2)在网站上进行测试页面
常见LAMP应用
PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库 WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用 PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团 Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议 ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0
下载网址:https://www.phpmyadmin.net/downloads/
LAMP部署:
(1)下载PhpMyAdmin包,并传到linux系统上,并解压改名
rz 传到linux包
[root@centos7html]#tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz 解压包 [root@centos7html]#mv phpMyAdmin-4.0.10.20-all-languages pma 起名为pma
(2)查看需要需要哪些包,实现LAMP的前提,安装对应的包,启动mariadb,httpd服务
[root@centos7pma]#yum install php-mbstring -y [root@centos7pma]#yum install php [root@centos7pma]#yum install php-mysql [root@centos7pma]#yum install maridb-server [root@centos7pma]#yum install httpd
(3)在修改后目录名的pma下,修改配置文件名称,只需要将配置文件的密码进行修改随机修改即可
[root@centos7pma]#cd pma [root@centos7pma]#cp config.sample.inc.php config.inc.php [root@centos7pma]#vim config.inc.php
(4)修改完配置之后需要重启httpd服务,并在网站输入本地IP地址加上pma目录名
systemctl restart httpd
192.168.34.101/pma
创建一个数据库wordpress
创建一个用户并授权连接192.168.34.%主机
实现wordpress博客搭建
WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用
官网:https://cn.wordpress.org/
(1)官网下载wordpress包,并将包解压缩
[root@centos7html]#rz [root@centos7html]#unzip wordpress-5.0-zh_CN.zip [root@centos7html]#pwd /var/www/html
(2)安装相关的软件包
[root@centos7html]#yum install php -y [root@centos7html]#yum install php-mysql -y [root@centos7html]#yum install mariadb-server -y [root@centos7~]#yum install httpd -y
(3)切换到wordpress目录下,并将wp-config-sample.conf改名称
[root@centos7html]#cd wordpress/ [root@centos7wordpress]#ls index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php [root@centos7wordpress]#cp wp-config-sample.php wp-config.php
(4)此时wordpress博客已经搭建完毕,我们来登陆看一下里边内容,填写完信息之后,点击安装wordpress就会安装大量的表
布署Discuz网站
官网:https://www.discuz.net/forum.php
Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
(1)将Discuz包传到linux中,并解压缩
[root@centos7html]#cd /var/www/html [root@centos7html]#rz [root@centos7html]#unzip Discuz_X3.3_SC_UTF8.zip [root@centos7html]#ls Discuz_X3.3_SC_UTF8.zip pdo1.php phpMyAdmin-4.0.10.20-all-languages.tar.xz readme utility wordpress-4.9.4-zh_CN.tar.gz mysqli.php pdo.php pma upload wordpress
(2)开始Discuz安装
[root@centos7html]#setfacl -R -m u:apache:rwx upload/
(3)开始安装upload
在网页上输入192.168.34.101/upload,然后根据向导直接往下安装
默认选择全新安装,然后下一步
设置论坛账号密码:
此时登录论坛账号和密码:
(4)安装完论坛之后将apache用户的权限取消
[root@centos7html]#setfacl -R -m u:apache:- upload/
布署fastcgi
A主机:192.168.34.100(安装数据库)
B主机:192.168.34.102 (安装的是php、httpd服务,处理php程序)
(1)B主机上安装php和httpd相应的包
[root@centos777~]#yum install php-fpm php-mysql -y [root@centos7~]#yum install httpd -y
(2)在A主机安装mariadb-server,启动mysql服务,并创建一个test账号,授予所有权限
[root@centos7~]#yum install mariadb-server -y [root@centos7~]#systemctl start mariadb MariaDB [(none)]> create database wordpress; 创建一个数据库 MariaDB [(none)]> grant all on *.* to test@'192.168.34.%' identified by 'centos';创建一个数据库账号
(3)在B主机上查看php-fpm包信息,并修改指定的配置文件
修改配置文件并重新启动php服务
[root@centos777~]#vim /etc/php-fpm.d/www.conf [root@centos777~]#systemctl restart php-fpm.service
(4)在B主机上新建一个目录,并在目录下创建一个pdo.php程序
修改完配置之后最好重新启动php服务:systemctl restart php-fpm.service
[root@centos777~]#mkdir /data/html [root@centos777~]#cd /data/html [root@centos777html]#vim pdo.php 目的是为了连接数据库 <?php try { $user='test'; $pass='centos'; $dbh = new PDO('mysql:host=192.168.34.100;dbname=mysql', $user, $pass); 连接A主机的数据库 foreach($dbh->query('SELECT user,host from user') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
(5)在B主机上新建一个配置文件,并修改相关内容
[root@centos7~]#vim /etc/httpd/conf.d/fcgi.conf 新建一个配置文件,并修改相关内容 DirectoryIndex index.php ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.34.102:9000/data/html/$1 [root@centos7~]#cd /var/www/html [root@centos7html]#echo 192.168.34.101 > index.html 新建一个index.html文件 [root@centos7html]#systemctl restart httpd 重新启动httpd服务
(6)测试搭建效果:
下来基于fastcgi搭建wordpress
(1)将wordpress包导入到linux中,然后解压此包
[root@centos777html]#cd /data/html [root@centos777html]#rz [root@centos777html]#unzip wordpress-5.0-zh_CN.zip
(2)修改wordpress包里边的配置文件
[root@centos777html]#cd wordpress/
[root@centos777wordpress]#ls
index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php
license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php
readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php
[root@centos777wordpress]#cp wp-config-sample.php wp-config.php
[root@centos777wordpress]#vim wp-config.php
查看搭建wordpress博客效果:http://192.168.34.102/wordpress/wp-admin/install.php
显示此效果,是因为此时是基于php页面进行查找结果,本机如果没有静态页面就无法找到
此时在B主机上,需要在/var/www/html目录下在解压一份wordpress包,就可以找到静态的php页面:
[root@centos777html]#cd /var/www/html [root@centos777html]#ls index.html wordpress wordpress-5.0-zh_CN.zip [root@centos777html]#unzip wordpress-5.0-zh_CN.zip