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 messagedir_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.30System => 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-develyum -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

转载于:https://blog.51cto.com/235571/2117223

十周第一次课(5月25日)相关推荐

  1. 三周第一次课(4月2日)

    2.27Linux和Windows互传文件 首先安装工具包 #yum install -y lrzsz 这个工具支持xshell,securecrt,而不支持putty 安装完就可以使用命令了 sz传 ...

  2. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日) 本周Silverlight学习资源更新 用Silverlight做淘宝应用 往事如锋 基于 Si ...

  3. 分享Silverlight/WPF/Windows Phone一周学习导读(07月25日-07月31日)

    上周,微软发布Visual Studio LightSwitch 2011正式版,为商业应用开发人员推出一个新的应用开发产品.Visual Studio LightSwitch 2011 作为一种简单 ...

  4. 分享Silverlight 3D开源项目和Silverlight/WPF/Windows Phone一周学习导读(4月25日-4月29日)...

    Silverlight 5 Beta版本中最引人注目的特性是3D功能,Silverlight 5与XNA Framework的结合,使Silverlight完美支持3D效果. 在微软MIX11大会后, ...

  5. Linux20180416四周第一次课(4月11日)

    4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例 LVM的原理是如下: 举例有两个磁盘,各有几个自己的分区,叫做物理卷.不同磁盘的物理卷可以组成卷组,然后在卷组里进行分逻辑卷.最后对 ...

  6. ​四周第一次课(4月11日)lvm讲解

    2019独角兽企业重金招聘Python工程师标准>>> 4.10 lvm讲解 忘记 安装包名称 解决办法: yum provides "/*/pvcreate" ...

  7. 六周第一次课(1月15日) 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下

    六周第一次课(1月15日) 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 在计算机科学中,对"正则表达式" 的定义是:它使用单个字符串来描述或匹配一系列符合 ...

  8. 一周第一次课笔记(1月22日)

    一周第一次课(1月22日) 1.1学习之初 1.2约定 1.3认识Linux 1.4安装虚拟机 1.5安装centos7 1.1学习之初 学习之前合理定位自己 给自己设定1个合理目标 计划好学习的期限 ...

  9. 一周第一次课(12月11日)

    一周第一次课(12月11日) 1.1 学习之初 定位:目的,职位,城市 目标:时间,薪资 学习方法:预计与复习,当日事当日毕,笔记的重要性,资源的利用 1.2 约定 centos 7.3系统 VMwa ...

最新文章

  1. 10年工作经验老程序员推荐的7个开发类工具
  2. 计算机考研b区国家线,考研b区国家线历年分数线情况
  3. Asp.Net Core 缓存的使用(译)
  4. Postfix 邮件服务 - 基础服务
  5. 叹息“博客园”的凋零
  6. [Jobdu] 题目1500:出操队形
  7. java jcombobox 获取值_从java中的JComboBox获取字符串值
  8. android快速搭建界面,怎么样能快速搭建一个Android APP的界面和框架?
  9. [转载] python中append和extend函数区别
  10. LeetCode:每日一题——数位成本和为目标值的最大数字
  11. python类创建多个实例是同一个实例_创建一个类的多个实例
  12. Unix/Linux操作系统介绍
  13. 淘宝客CMS,公众号,小程序,淘客APP,外卖返利系统
  14. 计算机评语公式怎么输,excel公式写评语
  15. APP性能测试——启动时间
  16. 用数据说话:刘强东制造“负熵增”
  17. 支撑起腾讯公司计费业务的TDSQL
  18. YOLOv5 Head解耦
  19. linux之if [ $? -ne 0 ];
  20. 软件项目管理——项目三角形

热门文章

  1. SQL 解决从分组数据中总是挑选第一条数据的问题
  2. 如何在require中使用VUE
  3. 自己的 sublime text 配置
  4. 连载-第1章绪论 1.2嵌入式处理器
  5. windows上搭建python+gvim开发环境
  6. ThreadPool原理介绍
  7. Android IOS WebRTC 音视频开发总结(三八)-- tx help
  8. (python)Graph_tools模块学习
  9. 在MFC中使用AFXBEGINTHREAD的方法
  10. ??ArcGIS server公交线路动态分段问题