PHP介绍机安装
PHP 介绍
PHP(Hypertext Preprocessor,“超文本预处理器”)是一种通用开源脚本语言。主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)对于PHP 5.3.3之前的php来说,是一个补丁包 ,旨在将FastCGI进程管理整合进PHP包中。
相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab定时进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
页面分类:
静态页面 一般普通访问到的页面
动态页面 用户可以和服务器进行交互页面
执行动态页面,需要和服务器进行交互,使用后端语言进行开发
PHP 与Apache、Nginx的交互
LAMP 架构
LAMP 架构中,PHP 是以子模块嵌套在Apache中的。
当请求的是静态资源的时候,httpd 服务直接从文件系统中读取文件返还客户端
当请求的是动态资源的时候,httpd 服务会启用php解析器(CGI)去解析php请求,如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,最后将数据返回给PHP解析器(通常是HTML网页)
LNMP 架构
在LNMP架构中PHP是作为一个独立的服务存在的,这个服务叫做php-fpm。
Nginx 直接处理静态请求
Nginx 将动态请求转发给php-fpm处理。
LAMP和LNMP在使用和配置PHP的区别
Nginx 支持的并发更高,速度比Apache快
apache一般是把php当作自己的一个模块来启动;而nginx则是把http请求变量转发给php进程,即php独立进程,与Nginx通信,这种方式叫做fast-cgi运行方式,所以apache编译的php不能用于nginx
PHP 源码安装
配置参数说明:
-
--with
:代表需要手动开启 可能需要加载第三方模块 第三方模块没有,就会error -
--enable
: 代表开启php的默认功能 -
--without
: 关闭默认加载的模块
#l --prefix=/usr/local/php => 指定安装目录
#l --with-config-file-path=/usr/local/php/etc => 指定php.ini [PREFIX/lib] 的路径
#l --enable-fpm => 启用 fpm SAPI 可执行文件的构建,即开启PHP-FPM
#l --with-fpm-user=www => 设置 php-fpm 运行的用户,Nginx的运行用户
#l --with-fpm-group=www => 设置 php-fpm 运行的组
#l --with-mysqli=mysqlnd => 即是由PHP源码提供的mysql驱动连接代码,它的目的是代替旧的libmysql驱动
#l --with-pdo-mysql=mysqlnd
说明:
PHP 5.3开始已经不建议使用旧的libmysql驱动了, 而建议使用mysqlnd
#l --with-iconv-dir
#l --with-freetype-dir => 包括对freetype字体库的支持
#l --with-jpeg-dir => 包括对jpeg图片的支持
#l --with-png-dir => 包括对png图片的支持
#l --with-zlib => 包括 zlib库的支持
#l --with-libxml-dir => 包括libxml2库的支持
#l --enable-xml => 开启 xml 支持
#l --disable-rpath => 关闭额外的运行库文件
#l --enable-bcmath => 包括图片大小调整,用到zabbix监控的时候用到了这个模块,提供高精度计算的支持,编译安装PHP时一般不会使用此配置项
#l --enable-shmop => 启用 shmop 支持
#l --enable-sysvsem => 启用 System V 信号量支持
#l --enable-inline-optimization => 优化线程,是一种通过将函数调用替换为在编译时调用的函数的实际主体来优化程序的方法
#l --with-curl => 包括 cURL 支持
#l --enable-mbregex => 开启 多字节字符支持的正则表达式函数
#l --enable-mbstring => 多字节,字符串的支持
#l --enable-ftp => 包括ftp的支持
#l --with-gd => 包括gd库的支持
#l --with-openssl => openssl的支持,加密传输时用到的
#l --with-mhash => 包括 mhash 算法支持
#l --enable-pcntl => 启用 pcntl 支持(仅限 CLI/CGI)
#l --enable-sockets => 包括 sockets 支持
#l --with-xmlrpc => 包括xml-rpc的c语言
#l --with-libzip => 包括 libzip 库的支持
#l --enable-soap => 启用 SOAP 支持
#l --without-pear => 关闭pear扩展库
#l --with-gettext => 包括gnu 的gettext 支持,编码库用到
#l --disable-fileinfo => 禁用文件信息支持
#l --enable-maintainer-zts => 启用线程安全 - 仅适用于代码维护者!!
--with 代表需要手动开启 可能需要加载第三方模块 第三方模块没有,就会error
--enable 代表开启php的默认功能
--without 关闭默认加载的模块
PHP 安装目录说明:
目录名称 | 作用 |
---|---|
bin | php相关命令目录 php phpize、php-config在源码编译扩展时用 |
etc | 配置文件目录 |
include | php默认类库 |
lib | php第三方扩展类库 |
php | man文档文件 |
sbin | php-fpm执行文件 |
var | log日志目录 run运行目录 保存pid文件 |
第一步:上传源码包解压,并安装依赖
# yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
# tar zxf php-7.2.12.tar.gz
# cd php-7.2.12
第二步:编译参数配置 + 编译安装
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--with-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--with-libzip \
--enable-soap \
--without-pear \
--with-gettext \
--disable-fileinfo \
--enable-maintainer-zts
# make && makeinstall
第三步:让PHP配置文件生效
使用php-fpm进行管理php服务,有两个配置文件:
①
php.ini
:默认php配置文件②
php-fpm.conf
:php-fpm相关的配置 (在.deafult
所在的配置文件下复制一份去掉default
使它生效)
php 的默认文件也要复制过去
复制配置文件:
生效配置文件:
开启php-fpm相关的配置文件:
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
将php默认配置文件复制到安装目录/etc 下,并更名为php.ini:
# cp /root/soft/php-7.2.12/php.ini-development /usr/local/php/etc/php.ini
说明:
将解压目录中的文件复制到...php/etc/下
第四步:配置php-fpm 的服务脚本并启动
配置脚本在解压目录下
- php-fpm 默认开启9000端口
CentOS 6下:
- 将解压目录的
init.d.php-fpm
复制到/etc/init.d/并更名为php-fpm
# cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
说明:
php的服务脚本在解压目录下
# chmod +x /etc/init.d/php-fpm
# chkconfig php-fpm on => 添加php-fpm开机自启
CentOS 7下:
- 将解压目录的
php-fpm.service
复制到/usr/lib/systemd/system/
# cp /root/soft/php-7.2.12/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
# systemctl daemon-reload
# systemctl start php-fpm
第五步:添加环境变量**(方便php、phpize、phpconfig查找使用)
# echo 'export PATH=$PATH:/usr/local/php/bin' >> /etc/profile
# source /etc/profile
扩展:php命令
#l [root@lnmp sbin]# ./php-fpm => 也开启php-rpm 服务
# php file.php => 直接运行php文件
# php {参数}
参数说明:
php -m:显示编译到内核下的模块
php -v:显示 php版本号
php --ini:显示配置文件名