11.10/11.11/11.12 安装PHP5

PHP官网www.php.net
当前主流版本为5.6/7.1

PHP安装最后的原因,就是因为PHP需要一个Apache的依赖包 apxs2
下载PHP 5.6

cd /usr/local/src
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

解压缩

tar zxvf php-5.6.30.tar.gz

进入PHP目录,开始初始化

cd php-5.6.30
 ./configure --prefix=/usr/local/php \                    //安装目录
--with-apxs2=/usr/local/apache2.4/bin/apxs \              //依赖Apache的一个工具,apxs2,不用手动的干涉,自动的把拓展模块放到目录下
--with-config-file-path=/usr/local/php/etc  \             //指定配置文件所在路径   (1)
--with-mysql=/usr/local/mysql \                           //指定MySQL的路径     (2)在centos 7 直接不再使用这个配置
--with-pdo-mysql=/usr/local/mysql \                       //指定MySQL的库的路径 (2)
--with-mysqli=/usr/local/mysql/bin/mysql_config \         //指定MySQL的路径 (2)
--with-libxml-dir \                                       //指定PHP需要的模块
--with-gd \                                               //指定PHP需要的模块
--with-jpeg-dir \                                         //指定PHP需要的模块
--with-png-dir \                                          //指定PHP需要的模块
--with-freetype-dir \                                     //指定PHP需要的模块
--with-iconv-dir \                                        //指定PHP需要的模块
--with-zlib-dir \                                         //指定PHP需要的模块
--with-bz2 \                                              //指定PHP需要的模块
--with-openssl \                                          //指定PHP需要的模块
--with-mcrypt \                                           //指定PHP需要的模块
--enable-soap \                                           //指定PHP需要的模块
--enable-gd-native-ttf \                                  //指定PHP需要的模块
--enable-mbstring \                                       //指定PHP需要的模块
--enable-sockets \                                        //指定PHP需要的模块
--enable-exif                                            //指定PHP需要的模块
--with-config-file-path=/usr/local/php/etc  \             //指定配置文件所在路径   (1)
PHP的配置文件php.ini
-with-mysql=/usr/local/mysql \                           //指定MySQL的路径     (2)在centos 7 直接不再使用这个配置
--with-pdo-mysql=/usr/local/mysql \                       //指定MySQL的库的路径 (2)
--with-mysqli=/usr/local/mysql/bin/mysql_config \         //指定MySQL的路径 (2)
让MySQL和PHP通信,需要编译支持的模块

执行命令后提示

configure: error: xml2-config not found. Please check your libxml2 installation.

说明缺少 xml2 的库 库文件一般都是devel 为名字结尾的
搜索安装包看看

yum list |grep xml2
[root@localhost php-5.6.30]# yum list |grep xml2
libxml2.x86_64                          2.9.1-6.el7_2.3                @anaconda
libxml2.i686                            2.9.1-6.el7_2.3                base
libxml2-devel.i686                      2.9.1-6.el7_2.3                base
libxml2-devel.x86_64                    2.9.1-6.el7_2.3                base
libxml2-python.x86_64                   2.9.1-6.el7_2.3                base
libxml2-static.i686                     2.9.1-6.el7_2.3                base
libxml2-static.x86_64                   2.9.1-6.el7_2.3                base
mingw32-libxml2.noarch                  2.9.3-1.el7                    epel
mingw32-libxml2-static.noarch           2.9.3-1.el7                    epel
mingw64-libxml2.noarch                  2.9.3-1.el7                    epel
mingw64-libxml2-static.noarch           2.9.3-1.el7                    epel
python-xml2rfc.noarch                   2.5.2-2.el7                    epel
tinyxml2.x86_64                         2.1.0-2.20140406git6ee53e7.el7 epel
tinyxml2-devel.x86_64                   2.1.0-2.20140406git6ee53e7.el7 epel
xml2.x86_64                             0.5-7.el7                      epel

是这个包,安装一下

yum install -y libxml2-devel.x86_64

重新初始化一下看看,结果发现

configure: error: Cannot find OpenSSL's <evp.h>

继续查找缺少的库文件

[root@localhost php-5.6.30]# yum list |grep openssl-devel
openssl-devel.i686                      1:1.0.1e-60.el7_3.1            updates
openssl-devel.x86_64                    1:1.0.1e-60.el7_3.1            updates
xmlsec1-openssl-devel.i686              1.2.20-5.el7                   base
xmlsec1-openssl-devel.x86_64            1.2.20-5.el7                   base

继续安装库文件

yum install -y openssl-devel.x86_64
安装库文件后,重新初始化

重新初始化一下看看,结果发现

configure: error: Please reinstall the BZip2 distribution

继续查找库

[root@localhost php-5.6.30]# yum list |grep bzip2-devel
bzip2-devel.i686                        1.0.6-13.el7                   base
bzip2-devel.x86_64                      1.0.6-13.el7                   base

继续安装库文件

yum install -y bzip2-devel.x86_64

安装库文件后,重新初始化 继续重复之前的操作

configure: error: jpeglib.h not found.
[root@localhost php-5.6.30]# yum install -y libjpeg-devel

继续重复之前的操作

configure: error: png.h not found.
[root@localhost php-5.6.30]# yum install -y libpng-devel

继续重复之前的操作

configure: error: freetype-config not found.
yum install -y freetype-devel

继续重复之前的操作

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

这个包属于扩展源里面的,需要先安装一个扩展源,前提你之前没有安装过

yum install -y epel-release

安装好拓展源以后,安装对应缺少的库

yum install -y libmcrypt-devel

最后一次 初始化,终于成功
进行make
结束后,使用echo $? 查看 并没有问题
进行make install
结束后,使用echo $? 查看也没有问题

查看 PHP 的服务

ls /usr/local/php/

核心二进制文件在 /usr/local/php/bin

[root@localhost php-5.6.30]# ls /usr/local/php/bin/
pear  peardev  pecl  phar  phar.phar  php  php-cgi  php-config  phpize

PHP和Apache 结合在一起靠的就是 libphp5.so 的文件

[root@localhost php-5.6.30]# ls /usr/local/apache2.4//modules/libphp5.so
/usr/local/apache2.4//modules/libphp5.so

查看PHP加载的模块

/usr/local/php/bin/php -m

只能查看到静态的模块

根据

[root@localhost php-5.6.30]# /usr/local/apache2.4/bin/httpd -M
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
 dir_module (shared)
 alias_module (shared)
 php5_module (shared)
 ...

PHP是做为一个扩展模块加载到 Apache 里面,所有Apache想要去执行、调用PHP的脚本,需要通过PHP Module 去进行调用
PHP的模块文件路径为

/usr/local/apache2.4/modules/libphp5.so
[root@localhost php-5.6.30]# ls -l /usr/local/apache2.4/modules/libphp5.so
-rwxr-xr-x. 1 root root 37752152 7月  27 22:04 /usr/local/apache2.4/modules/libphp5.so

启动配置文件

vim /usr/local/apache2.4/conf/httpd.conf

在httpd 的配置文件里面新增了一行,指定了php5_module 的路径为 modules/libphp5.so
这些内容里面的都是一些不显示不调用的模块,如果有需要,只需要把 # 注释删除掉就可以进行调用


LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule cgid_module modules/mod_cgid.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so

安装完成PHP以后,需要把配置文件拷贝到指定路径下

cp php.ini-production  /usr/local/php/etc/php.ini

两个配置文件
php.ini-development 这个是测试环境用的
php.ini-production 这个是线上生产环境用的
拷贝好配置文件,在重新使用

usr/local/php/bin/php -i |less

就会发现 Loaded Configuration File => (none) 这一项有了配置文件路径 /usr/local/php/etc/php.ini

使用

/usr/local/php/bin/php -i |less

可以查看到PHP 的一些信息,包括编译参数

phpinfo()
PHP Version => 5.6.30

System => Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64
Build Date => Jul 27 2017 22:01:59
Configure Command =>  './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'
Server API => Command Line Interface
Virtual Directory Support => enabled
Configuration File (php.ini) Path => /usr/local/php/etc            //configurtion 的配置路劲
Loaded Configuration File => (none)                                 /这些都没有加载任何东西,因为   /usr/local/php/etc 目录想天是空的,没有加载任何配置文件
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
PHP API => 20131106
PHP Extension => 20131226
Zend Extension => 220131226
Zend Extension Build => API220131226,TS
PHP Extension Build => API20131226,TS
Debug Build => no
Thread Safety => enabled
Zend Signal Handling => disabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring

11.13 安装PHP7

安装 PHP 7

安装编译时需要的模块

yum -y install libxml2
yum -y install libxml2-devel

yum -y install openssl
yum -y install openssl-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel

进入目录,下载文件

cd /usr/local/src/
axel http://mirrors.sohu.com/php/php-7.2.1.tar.xz

因为是bz2的包,需要用jxvf 来解压

tar xf php-7.2.1.tar.xz

进入php目录

cd php-7.1.6

初始化配置

./configure \
--prefix=/usr/local/php7 \
--exec-prefix=/usr/local/php7 \
--bindir=/usr/local/php7/bin \
--sbindir=/usr/local/php7/sbin \
--includedir=/usr/local/php7/include \
--libdir=/usr/local/php7/lib/php \
--mandir=/usr/local/php7/php/man \
--with-config-file-path=/usr/local/php7/etc \
--with-mysql-sock=/tmp/mysql.sock \
--with-apxs2=/usr/local/apache2.4/bin/apxs \
--with-pdo-mysql \
--with-mysqli \
--with-zlib-dir \
--with-mhash \
--with-openssl \
--with-gd \
--with-iconv \
--with-zlib \
--enable-zip \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--without-gdbm \
--disable-fileinfo
make && make install

一台机器上可以安装两个PHP 不过需要指定调用

cp php.ini-* /usr/local/php7/etc/
cp php.ini-production /usr/local/php7/etc/php.ini
cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

#php-fpm
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
vim /usr/local/php7/etc/php.ini //编辑配置文件
mysqli.default_socket = /usr/local/mysql/mysql.sock //将php与mysql关联
date.timezone = Asia/Shanghai //时区设置

搜索php 把其中一个模块注释掉就可以了
路径有区别

ls /usr/local/apache2.4/modules/libphp7.so
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

php中mysql,mysqli,mysqlnd,pdo到底是什么

名词解释:
最开始的初学者,往往搞不清mysqli,mysqlnd,pdo到底是什么,下面先直接贴出最直观的名字吧。

MYSQL:This extension is deprecated as of PHP 5.5.0, and has been removed as of PHP 7.0.0. 
MYSQLI: MySQL Improved Extension 
MySQLND: MySQL Native Drive 
PDO:The PHP Data Objects。extension defines a lightweight, consistent interface for accessing databases in PHP。
以上摘自 PHP官方手册: http://php.net/manual/en/book.mysqli.php
用中文说: 
MYSQL 也叫 Original MySQL,PHP4版本的MYSQL扩展,从PHP5起已经被废弃,并别从PHP7开始已经被移除。
MYSQLI 叫做 “MySQL增强扩展”。
MYSQLND MYSQL NATIVE DIRVER 叫做MYSQL “官方驱动”或者更加直接点的叫做“原生驱动”
PDO PHP Data Objects PHP数据对象,是PHP应用中的一个数据库抽象层规范。

针对本篇文章
再补充几个名词解释:
1 什么是API?
一个应用程序接口(Application Programming Interface的缩写),定义了类,方法,函数,变量等等一切 你的应用程序中为了完成特定任务而需要调用的内容。在PHP应用程序需要和数据库进行交互的时候所需要的API 通常是通过PHP扩展暴露出来(给终端PHP程序员调用)。
上文所说的MYSQL 和MYSQLI扩展就提供了这样的API。
2什么是驱动?
驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库,比如MySQL客户端库或者MySQL Native驱动库。 这些库实现了用于和MySQL数据库服务器进行交互的底层协议。
在PHP拓展的角度上看,MYSQL和MYSQLi还是比较上层的拓展,依赖更底层的库去连接和访问数据库。
上文所说的MYSQLND 就是所说的底层的数据库驱动。当然,还有一个驱动叫做libmysqlclient。至于如何选择使用这两种驱动的哪一种,请看这里选择哪一种底层数据库驱动。
总的来说:
从应用的层面上看,我们通过PHP 的MYSQL或者MYSQLi扩展提供的API去操作数据库。
从底层来看,MYSQLND提供了底层和数据库交互的支持(可以简单理解为和MySQL server进行网络协议交互)。
而PDO,则提供了一个统一的API接口,使得你的PHP应用不去关心具体要连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。比如MYSQL,SQLITE任何数据库都行。
即从大部分功能上看,PDO提供的API接口和MYSQLI提供的接口对于普通的增删改查效果是一致的。
最后贴下代码:
MYSQL连接:

<?php
$conn = @ mysql_connect("localhost", "root", "") or die("数据库连接错误");
mysql_select_db("bbs", $conn);
mysql_query("set names 'utf8'");
echo "数据库连接成功";
?>
MYSQLI连接:
<?php
$conn = mysqli_connect('localhost', 'root', '', 'bbs');
if(!$conn){
die("数据库连接错误" . mysqli_connect_error());
}else{
echo"数据库连接成功";
}
?>
PDO连接:
<?php
try{
$pdo=new pdo("mysql:host=localhost;dbname=bbs","root","");
}catch(PDDException $e){
echo"数据库连接错误";
}
echo"数据库连接成功";
?>
想更多去了解他们的区别和联系,可以手动去编译一下PHP的源代码。注意参数
--enable-pdo 
--with-pdo-mysql
--enable-mysqlnd 
--with-mysqli
--with-mysql//php7的已经不再支持,此参数configure 的时候会报ERROR

http://blog.csdn.net/u013785951/article/details/60876816

查看编译参数

Linux下查看Nginx、Napache、MySQL、PHP的编译参数的命令如下:

1、nginx编译参数:

#/usr/local/nginx/sbin/nginx -V

2、apache编译参数:

# cat /usr/local/apache/build/config.nice

3、php编译参数:

# /usr/local/php/bin/php -i |grep configure

4、mysql编译参数:

# cat /usr/local/mysql/bin/mysqlbug|grep configure

http://ask.apelearn.com/question/1295