PHP总共有三个模块:内核、Zend引擎、以及扩展层;
PHP内核用来处理请求、文件流、错误处理等相关操做;
Zend引擎(ZE)用以将源文件转换成机器语言,而后在虚拟机上运行它;
扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操做。好比,咱们须要mysql扩展来链接MySQL数据库;php
php-fpm是一个彻底独立的程序,不依赖php-cgi,也不依赖php.由于php-fpm是一个内置了php解释器的FastCGI服务,启动时可以自行读取php.ini配置和php-fpm.conf配置.
附:PHP FastCGI进程管理器PHP-FPM的架构
一个master进程,支持多个pool,每一个pool由master进程监听不一样的端口,pool中有多个worker进程.
每一个worker进程都内置PHP解释器,而且进程常驻后台,支持prefork动态增长.
每一个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提高性能.
每一个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程.
每一个worker进程能保持一个到MySQL/Memcached/Redis的持久链接,实现"链接池",避免重复创建链接,对程序透明.
master进程并不接收和分发请求,而是worker进程直接accpet请求后poll处理.
master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件.
这里提一下,Nginx也相似,master进程并不处理请求,而是worker进程直接处理,
不过区别在于Nginx的worker进程是epoll异步处理请求,而PHP-FPM仍然是poll.
若是worker进程不够用,master进程会prefork更多进程,
若是prefork达到了pm.max_children上限,worker进程又全都繁忙,
这时master进程会把请求挂起到链接队列backlog里(默认值是511).
Nginx跟PHP-FPM分开,实际上是很好的解耦,PHP-FPM专门负责处理PHP请求,一个页面对应一个PHP请求,
页面中全部静态资源的请求都由Nginx来处理,这样就实现了动静分离,而Nginx最擅长的就是处理高并发.
PHP-FPM是一个多进程的FastCGI服务,相似Apache的prefork的进程模型,
对于只处理PHP请求来讲,这种模型是很高效很稳定的.html
安装PHP5与PHP7参考连接:https://my.oschina.net/u/3707523/blog/1593424mysql
• PHP官网www.php.netlinux
• 当前主流版本为5.6/7.1nginx
• cd /usr/local/src/ # 安装软件存放的目录算法
• 安装插件预防安装过程碰见问题sql
• yum install openssl openssl-devel bzip2-devel libjpeg-devel libpng-devel libmcrypt-devel fretype freetype-devel epel-release libmcrypt-devel expat-devel #安装插件数据库
•wget http://cn2.php.net/distributions/php-5.6.30.tar.gzapache
• tar -zvxf php-5.6.30.tar.gzvim
• cd php-5.6.30
• ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
在解压的目录执行如下代码,配置编译参数:
• make && make install
• cp php.ini-production /usr/local/php/etc/php.ini
实例:
编译安装php5, cd /usr/local/src/切换到软件安装目录
查看安装包的大小。
而后解压缩包。tar -zvxf php-5.6.30.tar.gz,切换目录cd php-5.6.30
到这一步就回车。
使用echo $?查看上一个命令是否正确。
安装须要的包
安装好,须要的包,以后再编译一次。
安装openssl-devel
按照上面的指示,安装bzip软件包。
再编译安装一次。
继续编译。(当编译过程出现问题时,就安装须要的包,而后再编译,看看是否还有错误。)
先安装扩展源。命令:yun install -y epel-release。由于这个包在扩展源里里面。
继续编译。
编译完成图。
./configure 安装完成了,编译好后,下一步。
• cd /usr/local/src/
• wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
• tar jxf php-7.1.6.tar.bz2
• cd php-7.1.6
• ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
• make && make install
• ls /usr/local/apache2.4/modules/libphp7.so
• cp php.ini-production /usr/local/php7/etc/php.ini
实例:
安装PHP7
[root@ocalhost ~]# cd /usr/local/src/
[root@localhost ~] # wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
[root@localhosts ~]# tar -jvf nginx-1.10.2.tar.gz
[root@localhost ~]# cd php-7.1.6
[root@localhost /php-7.1.] # ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif
[root@localhosts php-7.1.6]# make
[root@ocalhost php-7.1.6] # make install
[root@localhost php-7.1.6] # ls /usr/local/apache2.4/modules/libphp
libphp5.so libphp7.so
[root@localhosts php-7.1.6]# ls /usr/local/apache2.4/modules/libphp7.so
/usr/local/apache2.4/modules/libphp7.so
[root@localhosts php-7.1.6]# du -sh !$
37M /usr/local/apache2.4/modules/libphp7.so
[root@localhosts php-7.1.6]# /usr/local/php7/bin/php -m #查看php7加载的模块
[root@localhosts php-7.1.6]# /usr/local/apache2.4/bin/apachectl -M #查看apache加载的php
[root@ocalhost php-7.1.6]# !vim
vim /etc/init.d/mariadb
[root@localhosts php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf
/php5.so #搜索的内容
# LoadModule php5_module modules/libphp5.so #注释掉php5
LoadModule php_module modules/libphp7.so #这两个模块要注释掉其中一个
常见问题:
一、问题:须要安装的包名,不对。
二、使用yum install httpd就能够安装httpd,为何还要这样使用源码包安装呢?是由于有功能的差别吗?
答:主要目的是要学习编译安装这个技能。 多数企业也是习惯使用编译安装的。
三、./configure是否是就是在编译?
make就是编译后的安装?
make和make && make install有什么区别?
生成makefile的做用是什么?
答:
./config 预编译,检查系统是否可以知足软件包编译环境,系统是否存在GCC编译器+依赖的软件库,生成Makefile文件。
make 是编译,基于第一步生产的makefile文件用于指定编译的步骤和顺序,包括编译时依赖的软件包记录,make生成二进制文件。
make install是安装,将二进制文件cp或安装到linux系统目录中,供用户或者程序去使用;
没有Makefile 就没办法make
四、配置安装的时候,提示: configure: WARNING: unrecognized options: --enable-gd-native-tty。 是说明 --enable-gd-native-tty 这个参数废弃了吗? 仍是有其余的问题?
答:废弃啦。 去掉它吧。
五、编译不成功
答:apr以及apr-util都须要编译安装。
六、当/usr/local/apache2.4/conf/httpd.conf中,php5和php7模块都没注释掉,会默认使用哪一个呢?
答:会冲突,要注视掉一个。
七、make编译不了
答:缺xml解析依赖,安装expat-devel,命令:yum install -y expat-devel,
安了expat要从新编译apr-util
八、: configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解决方案:
yum -y install epel-release
yum -y install php-mcrypt
yum -y install libmcrypt-devel
九、安装mysql 再弄MariaDB的时候 容易冲突(缘由端口同样 都是21端口)
答: 你把/data/mysql 整个目录干掉。就不会冲突了.
10.
答:
./configure是源代码安装的第一步,主要的做用是对即将安装的软件进行配置,检查当前的环境是否知足要安装软件的依赖关系,但并非全部的tar包都是源代码的包,楼主能够ls看看有没有configure这个文件,也许你下的是二进制的包,若是是二进制的包,解压后直接就能使用。 二进制的mysql包,能够放到任意位置,全部的命令都是解压后目录的bin目录下,你要想在任意目录都能使用mysql的命令,须要把bin目录加到PATH环境变量中,好比你的mysql目录是/usr/local/mysql,你能够这样添加环境变量,vi ~/.bash_profile在文件的最后面添加 PATH=$PATH:/usr/local/mysql/bin export PATH 而后执行source ~/.bash_profile 这样就能够在任意目录执行mysql的全部命令了
11.缺乏依赖的包
答案:安装yum install -y
php中mysql,mysqli,mysqlnd,pdo究竟是什么 http://blog.csdn.net/u013785951/article/details/60876816
查看编译参数 http://ask.apelearn.com/question/1295
安装参考连接:https://www.cnblogs.com/nfyx/p/9086038.html
连接 :
https://www.jb51.net/article/58872.htm
PHP 性能分析第一篇: Intro to Xhprof & Xhgui : https://www.cnblogs.com/thrillerz/p/5072407.html
PHP 性能分析第二篇: Xhgui In-Depth : https://www.cnblogs.com/thrillerz/p/5072407.html
PHP 性能分析第三篇: 性能调优实战 :https://www.cnblogs.com/thrillerz/p/5085307.html
PHP : https://www.cnblogs.com/thrillerz/category/601879.html