zoukankan      html  css  js  c++  java
  • 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

    架构说明:
    a666b6cb7683155d886dcb672e68c208.jpeg

    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
    
  • 相关阅读:
    史上最简单易懂的Android Pad手机屏幕适配方案
    Android平板开发
    Android TV 开发 (1)
    三大开源java区块链库
    将博客园数据导出到wordpress
    MQTT结构分析
    netty+mqtt
    安卓原生 VideoView实现rtsp流媒体的播放
    【矩阵专题】——矩阵加速
    征战蓝桥 —— 2016年第七届 —— C/C++A组第4题——快速排序
  • 原文地址:https://www.cnblogs.com/ddz-linux/p/10699453.html
Copyright © 2011-2022 走看看