11.10 安装PHP5(上)

 

PHP会被放到最后安装:

php作为apache的一个扩展模块被安装,所以会被放到最后

PHP主流版本:5.6/7.1

PHP7改动较大,部分软件不支持PHP7,目前使用PHP7可能遇到问题;

PHP7性能提升较大;

 

下载php压缩包:

[root@hyc-01-01 src]# wget http://cn2.php.net/distributions/php-5.6.30.tar.gz

 

解压包:

[root@hyc-01-01 src]# tar zxvf php-5.6.30.tar.gz

 

初始化:

[root@hyc-01-01 src]# cd php-5.6.30

[root@hyc-01-01 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

--prefix 指定安装目录

--with-apxs2 apache的一个工具,可以帮助用户自动安装、配置apache的扩展模块,使apache即使不停止或重启也可以被安装新的模块并立即支持

--with-config-file-path 指定配置文件所在路径,php的配置文件为php.ini

--with-mysql 指定mysql的路径

--with-pdo-mysql 这里的三个参数用于定义连接mysql的相关启动或函数

--with-mysqli 以上为三种不同的mysql的库(驱动),要想让phpmysql通信,需要编译出支持的模块,让mysqlphp可以连接

--with-mysql—with-mysqli

有区别但功能相同,为了让php支持mysql

老版本php中用—with-mysql(在7版本不被使用),新版本中用—with-mysqli

其余的是指定php所需的一些模块

 

报错:

checking for xml2-config path...

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

解决:

[root@hyc-01-01 php-5.6.30]# yum install -y libxml2-devel

 

报错:

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

解决:

[root@hyc-01-01 php-5.6.30]# yum install -y openssl-devel

 

报错:

If configure fails try --with-vpx-dir=<DIR>

configure: error: jpeglib.h not found.

解决:

[root@hyc-01-01 php-5.6.30]# yum install -y libjpeg-devel

 

报错:

checking for jpeg_read_header in -ljpeg... yes

configure: error: png.h not found.

解决:

[root@hyc-01-01 php-5.6.30]# yum install libpng-devel

 

报错:

If configure fails try --with-xpm-dir=<DIR>

configure: error: freetype-config not found.

解决:

[root@hyc-01-01 php-5.6.30]# yum install -y freetype-devel

 

报错:

checking for mcrypt support... yes

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

解决:

[root@hyc-01-01 php-5.6.30]# yum install -y epel-release

[root@hyc-01-01 php-5.6.30]# yum install -y libmcrypt-devel

由于需求的库文件在epel扩展源中,所以需要先安装epel扩展源

 

Thank you for using PHP.

 

config.status: creating php5.spec

config.status: creating main/build-defs.h

config.status: creating scripts/phpize

config.status: creating scripts/man1/phpize.1

config.status: creating scripts/php-config

config.status: creating scripts/man1/php-config.1

config.status: creating sapi/cli/php.1

config.status: creating sapi/cgi/php-cgi.1

config.status: creating ext/phar/phar.1

config.status: creating ext/phar/phar.phar.1

config.status: creating main/php_config.h

config.status: executing default commands

[root@hyc-01-01 php-5.6.30]# echo $?

0 执行成功

 

11.11 安装PHP5(中)

 

编译:

[root@hyc-01-01 php-5.6.30]# make

 

11.12 安装PHP5(下)

 

安装:

[root@hyc-01-01 php-5.6.30]# make install

Installing PHP SAPI module:       apache2handler

/usr/local/apache2.4/build/instdso.sh SH_LIBTOOL='/usr/local/apache2.4/build/libtool' libphp5.la /usr/local/apache2.4/modules

/usr/local/apache2.4/build/libtool --mode=install install libphp5.la /usr/local/apache2.4/modules/

libtool: install: install .libs/libphp5.so /usr/local/apache2.4/modules/libphp5.so

libtool: install: install .libs/libphp5.lai /usr/local/apache2.4/modules/libphp5.la

libtool: warning: remember to run 'libtool --finish /usr/local/src/php-5.6.30/libs'

chmod 755 /usr/local/apache2.4/modules/libphp5.so

/php相关的.so文件放到modules目录下/

[activating module `php5' in /usr/local/apache2.4/conf/httpd.conf]

/在配置文件中激活了php5模块/

 

查看php目录:

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php/

bin  etc  include  lib  php

[root@hyc-01-01 php-5.6.30]# ls /usr/local/php/bin/ 该目录存放了php核心二进制文件

pear  peardev  pecl  phar  phar.phar  php  php-cgi  php-config  phpize

[root@hyc-01-01 php-5.6.30]# du -sh /usr/local/php/bin/php

36M /usr/local/php/bin/php

查看modules目录下php相关模块文件大小:

[root@hyc-01-01 php-5.6.30]# du -sh /usr/local/apache2.4/modules/libphp5.so

37M /usr/local/apache2.4/modules/libphp5.so

phpapache结合是通过.so文件实现的

 

查看php加载的模块:

[root@hyc-01-01 php-5.6.30]# /usr/local/php/bin/php –m

此处加载的均为静态模块;

php之所以这么大是由于增加了很多相关的功能;

 

查看apache的模块:

[root@hyc-01-01 php-5.6.30]# /usr/local/apache2.4/bin/httpd -M

status_module (shared)

 autoindex_module (shared)

 dir_module (shared)

 alias_module (shared)

 php5_module (shared)

发现列出的模块中有php5的模块;

说明php作为httpd的扩展模块的形式存在;

删除modules目录下的php.so文件则apache无法支持php

 

Apachephp模块文件:

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

-rwxr-xr-x 1 root root 37753464 8   1 22:06 /usr/local/apache2.4/modules/libphp5.so

 

查看httpd.conf:

[root@hyc-01-01 php-5.6.30]# less /usr/local/apache2.4/conf/httpd.conf

# logged here.  If you *do* define an error logfile for a <VirtualHost>

# container, that host's errors will be logged there and not here.

#

ErrorLog "logs/error_log"

 

#

LoadModule php5_module        modules/libphp5.so

不被加载的模块在文件中会被#注释

 

11.13 安装PHP7

 

查看php的相关信息:

[root@hyc-01-01 php-5.6.30]# /usr/local/php/bin/php –i

Configuration File (php.ini) Path => /usr/local/php/etc

Loaded Configuration File => (none) 由于配置文件没有拷贝到对应路径下,所以会显示none

 

拷贝php配置文件到--with-config-file-path路径下:

[root@hyc-01-01 php-5.6.30]# cp php.ini-production /usr/local/php/etc/php.ini

[root@hyc-01-01 php-5.6.30]# cp php.ini-development /usr/local/php/etc/php.ini

以上两个模板配置文件一个适合在生产环境(php.ini-production)中使用,另一个适合测试环境

[root@hyc-01-01 php-5.6.30]# /usr/local/php/bin/php –i

Configuration File (php.ini) Path => /usr/local/php/etc

Loaded Configuration File => /usr/local/php/etc/php.ini

 

安装php7

[root@hyc-01-01 src]# wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2

 

解压包:

[root@hyc-01-01 src]# tar jxvf php-7.1.6.tar.bz2

 

初始化:

[root@hyc-01-01 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

标红的部分是与php5不一样的地方;

php7中没有—with-mysql参数;

 

编译:

[root@hyc-01-01 php-7.1.6]# make

 

安装:

[root@hyc-01-01 php-7.1.6]# make install

 

查看modules下的模块文件:

[root@hyc-01-01 php-7.1.6]# ls /usr/local/apache2.4/modules/libphp*

/usr/local/apache2.4/modules/libphp5.so  /usr/local/apache2.4/modules/libphp7.so

[root@hyc-01-01 php-7.1.6]# du -sh /usr/local/apache2.4/modules/libphp7.so

37M /usr/local/apache2.4/modules/libphp7.so 模块文件大小37M

 

查看php7加载的模块:

[root@hyc-01-01 php-7.1.6]# /usr/local/php7/bin/php –m

 

Apache目前加载了两个php模块:

[root@hyc-01-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl –M

php5_module (shared)

php7_module (shared)

 

假如不想使用php7模块,可以在配置文件中将其注释掉:

[root@hyc-01-01 php-7.1.6]# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule alias_module modules/mod_alias.so

#LoadModule rewrite_module modules/mod_rewrite.so

LoadModule php5_module        modules/libphp5.so

#LoadModule php7_module        modules/libphp7.so