LAMP PHP 详解
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 详解的更多相关文章
- CentOS 7.4下源码编译安装配置LAMP环境详解
CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...
- CentOS下搭建LAMP环境详解
前言:在这里将介绍如何在CentOS下搭建LAMP环境(全部使用源码编译安装),用于web服务器开发. •LAMP: Linux + Apache + PHP + Mysql. •系统: CentOS ...
- lamp编译详解
首先确认系统环境:centos6.4 min版本 1.安装需要的开发环境 yum groupinstall "Development Tools" "Server Pla ...
- (原创)LAMP搭建之二:apache配置文件详解(中英文对照版)
LAMP搭建之二:apache配置文件详解(中英文对照版) # This is the main Apache server configuration file. It contains the # ...
- EasyPR--中文开源车牌识别系统 开发详解(1)
在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao123 ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
- EasyPR--开发详解
我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...
- Android:TextView跑马灯-详解
Android:TextView跑马灯_详解 引言: TextView之所以需要跑马灯,是由于文字太长,或者是吸引眼球. 关键代码如下: android:singleLine="true&q ...
- RedHat 7.1 下安装 Zabbix监控程序详解(适合linux初级用户)
RedHat 7.1 安装 Zabbix 监控程序详解(适合对linux初级用户)2017-05-02 安装步骤: 1.zabbix需要安装LAMP架构 2.安装zabbix服务 3.初始化zabbi ...
随机推荐
- 华东交通大学2017年ACM“双基”程序设计竞赛 1002
Problem Description 一天YZW参加了学校组织交际舞活动,活动的开始活动方分别给男生和女生从1-n进行编号,按照从小到大顺时针的方式进行男女搭档分配,相同编号的男女组合成一对,例如一 ...
- python入门之socket代码练习
Part.1 简单的socket单次数据传输 服务端: #服务器端 import socket server = socket.socket() # 声明socket类型,同时生成socket连接对象 ...
- 转 mysql 下载 以及安装
https://blog.csdn.net/kerafan/article/details/78001849 一.MySQL 各个版本区别 ,(都需要编译的 ) 1.MySQL Community S ...
- Pandas处理数据常用方法
# -*- coding: utf-8 -*-import pandas as pd"""(1)利用pandas读取csv文件"""def ...
- Python package和folder
在Python项目里面的区分,按照如下规定进行: 1.严格区分包和文件夹.包的定义就是包含__init__.py的文件夹. 如果没有__init__.py,那么就是普通的文件夹. 2.导入packag ...
- 如何让nginx支持ThinkPHP框架(重点参考)
公司有一款即将上线的应用服务端是基于ThinkPHP写的,本地测试无异常,上传到外网服务器后无法连接.这可把我和我的小伙伴们吓死了,怎么回事儿,本地测试都是对的呀! 我和我的小伙伴们开始找原因,换了一 ...
- usb-host一步一步学(二)安卓在usb-host模式下列出当前连接的usb设备
之前写了一个简单的例子usb-host一步一步学(一)安卓在usb-host模式下列出当前连接的usb设备,下面的这个例子是获取各种usb设备.usb接口以及usb连接点(endpoint) 正如上一 ...
- instancetype和id的区别,objective-c
instancetype clang 3.5 提供的关键字, 表示:某方法返回未知类型的OC对象 都知道id任意类型关键字,为什么还会出现一个新的关键字? 返回关联类型 1.类方法中,alloc ...
- 关于web开发中订单自动超时和自动收货的简单方法(window server)
最近做一个订单自动超时和自动收货的功能,因为以前是用的mysql 存储过程和定时器来完成,这次的业务逻辑相对复杂用以前的方式就不太合适,本来是准备使用定时执行php脚本来实现的,后来发现业务逻辑中使用 ...
- 703. 数据流中的第 K 大元素
设计一个找到数据流中第 K 大元素的类(class).注意是排序后的第 K 大元素,不是第 K 个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组 nums 的构造器, ...