LAMP PHP 详解

LAMP是一种生产环境中常用的web服务组合模型。

LAM(M)P所表达的组成方式

  • L: linux
  • A: apache (httpd)
  • M: mysql, mariadb
  • M:memcached
  • P: php, perl, python

WEB资源类型:

  • 静态资源:原始形式与响应内容一致,在客户端浏览器执行
  • 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

Web相关语言

  • 客户端技术: html,javascript
  • 服务器端技术:php, jsp,python,asp

通常,在低需求的企业环境中,我们可以将LAMP部署在同一台设备上,降低支出。但大多数情况,我们会将LAMP分离,分别部署在多台设备上,并让他们连接通讯。

LAMP 请求流程与原理

CGI:Common Gateway Interface

可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

请求流程:

Client -- (httpd) --> httpd -- (cgi) --> application server (programfile) -- (mysql) --> mysql

架构说明:

PHP 简介

PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。

PHP Zend Engine

Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用。

Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。

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 配置详解

配置文件:

/etc/php.ini
/etc/php.d/*.ini

关于php所使用的配置文件,配置文件在php解释器启动时被读取

对配置文件修改生效的方法:

  • Modules:重启httpd服务
  • FastCGI:重启php-fpm服务

php中的配置字段格式为: directiove = value 以键值对的形式存在。

注释符:较新的版本中,已经完全使用;进行注释

  • :纯粹的注释信息

  • ;:用于注释可启用的directive

php.ini的核心配置选项文档:

http://php.net/manual/zh/ini.core.php



php.ini配置选项列表:

http://php.net/manual/zh/ini.list.php

php语言格式

<?php
...php code...
?>

常用配置选项:

#设置程序 最长超时,生产中可以调大些
max_execution_time= 30
#设置程序占用的最大内存,生产不够,可调大
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
#开启短标签,如<? phpinfo();?>
short_open_tag=on

php 加速器

php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。

XCache

快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址:http://xcache.lighttpd.net/,收录EPEL源

Zend Optimizer和Zend Guard Loader

Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由ZendGuard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址http://www.zend.com/en/products/guard/runtime-decoders

NuSphere PhpExpress

NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,http://www.nusphere.com/products/phpexpress.htm

部署LAMP

在LAMP架构中,每个服务都有他自身所负责的任务。

LAMP

httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行

php:运行php程序

MariaDB/Mysql:数据管理系统,数据库

其中http与php结合的方式

  • CGI
  • FastCGI
  • modules (将php编译成为httpd的模块,默认方式,在使用该模式的时候,php就仅是http服务中的一个mod模块,而不是一个独立服务形式存在。)

MPM:

  • prefork: libphp5.so
  • event, worker: libphp5-zts.so

使用 php 连接 mysql

使用mysql扩展连接数据库的测试代码
<?php
#创建一个连接 参数分别为:主机名 mysql账户 密码
$conn = mysql_connect(‘localhost','root','123456');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?> Php使用mysqli扩展连接数据库的测试代码
<?php
$mysqli=new mysqli("mysqlserver",“username",“password");
if(mysqli_connect_errno())
{
echo "Failure";
$mysqli=null;
exit;
}
echo “OK";
$mysqli->close();
?> 使用pdo扩展连接数据库的测试代码1
<?php
$dsn='mysql:host=localhost;dbname=mysql';
$username='root';
$passwd='centos';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?> 使用pdo扩展连接数据库的测试代码2
<?php
try {
$user='root';
$pass=‘centos';
$dbh = new PDO('mysql:host=localhost;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();
}
?> 需要注意一点,前两种方式只能连接mysql,而基于pdo的方式可以连接mysql,sql server ,oracle等主流数据库。

最基本的部署LAMP

centos6

yum -y install httpd, php, php-mysql, mysql-server
service httpd start
service mysqld start

centos7

Modules模块模式
yum -y install httpd php php-mysql mariadb-server FastCGI独立服务模式
yum -y install httpd php-fpm php-mysql mariadb-server systemctl start httpd.service
systemctl start mariadb.service
注意:要使用prefork模型

部署PhpMyAdmin

#安装lmap环境
yum -y install httpd mariadb-server php php-mysql php-mbstring #启动并初始化 phpmyadmin登录必须使用密码非空的账户
systemctl start httpd
systemctl start mariadb
mysql_secure_installation 下载:https://www.phpmyadmin.net/downloads/ #解压 由于他是直接可以使用的php程序,所以放到我们的http根目录下即可
tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz cd /var/www/html
cd phpadmin/ #修改配置文件
cp config.sample.inc.php config.inc.php vim config.inc.php
#修改该行为自定义随机数,这是用来随机cookie的
$cfg['blowfish_secret'] = 'a8b7c6d'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ #重新读取配置即可
systemctl reload httpd

部署wordpress

在部署之前,我们可以需要创建一个数据库和mysql账户,用于wordpress使用。

#下载
https://cn.wordpress.org #解压缩WordPress博客程序到网页站点目录下
unzip wordpress-4.3.1-zh_CN.zip #创建wordpress用户
mysql> create database wpdb;
mysql> grant all privileges on wpdb.* to wpuser@'%' identified by"wppass" 打开http://webserver/wordpress进行页面安装 或者 进入wordpress 目录
cp wp-config-sample.php wp-config.php
vim wp-config.php /** WordPress数据库的名称 */
define('DB_NAME', 'wpdb');
/** MySQL数据库用户名 */
define('DB_USER', 'http');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos');
/** MySQL主机 */
define('DB_HOST', '192.168.1.10'); 注意wordpress目录权限
Setfacl –R –m u:apache:rwx wordpress

编译安装php-xcache访问加速器

该软件可以使用yum安装,最新版本也是2014年的版本,已经是一个过时的老古董了。

yum install -y php-xcache

以下为编译安装步骤

#安装编译所需环境
yum groupinstall "development tools" #安装该软件需要的配置文件生成器
yum install php-devel 下载并解压缩xcache-3.2.0.tar.bz2
tar xvf xcache-3.2.0.tar.gz cd xcache-3.2.0.tar.gz #使用该命令生成配置文件
phpize #编译 安装
./configure --enable-xcache --with-php-config=/usr/bin/php-config
make -j 4 && make install #复制配置文件 /usr/lib64/php/modules/ 表示默认该模块的位置,xcache已mod的形式存在
cp xcache.ini /etc/php.d/ #重启服务 激活该MOD
systemctl restart httpd

LAMP PHP 详解的更多相关文章

  1. CentOS 7.4下源码编译安装配置LAMP环境详解

    CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...

  2. CentOS下搭建LAMP环境详解

    前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...

  3. lamp编译详解

    首先确认系统环境:centos6.4 min版本 1.安装需要的开发环境 yum groupinstall "Development Tools" "Server Pla ...

  4. (原创)LAMP搭建之二:apache配置文件详解(中英文对照版)

    LAMP搭建之二:apache配置文件详解(中英文对照版) # This is the main Apache server configuration file. It contains the # ...

  5. EasyPR--中文开源车牌识别系统 开发详解(1)

    在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao123 ...

  6. 详解linux运维工程师入门级必备技能

    详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...

  7. EasyPR--开发详解

    我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...

  8. Android:TextView跑马灯-详解

    Android:TextView跑马灯_详解 引言: TextView之所以需要跑马灯,是由于文字太长,或者是吸引眼球. 关键代码如下: android:singleLine="true&q ...

  9. RedHat 7.1 下安装 Zabbix监控程序详解(适合linux初级用户)

    RedHat 7.1 安装 Zabbix 监控程序详解(适合对linux初级用户)2017-05-02 安装步骤: 1.zabbix需要安装LAMP架构 2.安装zabbix服务 3.初始化zabbi ...

随机推荐

  1. DozerBeanMapper 配置

    applicationContext.xml <bean id="mapper" class="org.dozer.spring.DozerBeanMapperFa ...

  2. div可编辑 可拖动

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.可编辑: <div id="move" contentEditable="true">可编 ...

  3. 04.Spring Ioc 容器 - 刷新

    基本概念 Spring Ioc 容器被创建之后,接下来就是它的初始化过程了.该过程包含了配置.刷新两个步骤 . 刷新由 Spring 容器自己实现,具体发生在 ConfigurableApplicat ...

  4. LeetCode 260 Single Number III 数组中除了两个数外,其他的数都出现了两次,找出这两个只出现一次的数

    Given an array of numbers nums, in which exactly two elements appear only once and all the other ele ...

  5. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  6. Unity [Tooltip("")]

    把Ad2Controller脚本挂在Ad2Ad3Manager游戏对象上,在非运行状态下把鼠标放在inspector的AdButtonObj2上就会显示广告2按钮. 如下图:

  7. Java面向对象_常用类库api

    StringBuffer 例: public class StringBufferDemo { /** * @param args */ public static void main(String[ ...

  8. RabbitMQ使用教程(四)如何通过持久化保证消息99.99%不丢失?

    1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...

  9. OkHttp工具类

    package test; import java.io.File; import java.io.IOException; import java.util.ArrayList; import ja ...

  10. java+elipse安装及部分问题

    1. elipse下载.安装.jdk环境配置教程: https://www.cnblogs.com/ForestDeer/p/6647402.html 2.eclipse使用教程: https://j ...