PHP的安装
php 5.6的安装
下载对应的软件
[root@test src]# wget https://github.com/skvadrik/re2c/archive/1.2.1.tar.gz # (re2c是一个用于C和C ++的免费开源词法分析器。)
[root@test src]# wget http://公司内网地址/files/php-5.6.36.tar.gz #公司内网地址就不暴露了
安装依赖
[root@test src]# yum -y install libxml2.x86_64 libxml2-devel.x86_64 openssl-devel libcurl-devel freetype.x86_64 freetype-devel.x86_64 libpng-devel libjpeg-devel libmcrypt-devel bison bison-devel libicu-devel libicu
相关依赖包解析:
libxml #是解析xml文件的库(被c,python,php等语言所需求)
OpenSSL #被openssl模块所需要
libcurl #主要是实现不同协议之间的连接跟沟通(支持php,http,https等协议)
freetype #是一款开源,可移植,高质量的字体引擎。
libpng-devel #调用png库,解析png文件
libjpeg-devel #也是一种库,解析jpeg图片文件
libmcrypt #是被php-mcrypt扩展所需要(用来加解密的)
bison #php语法分析器
创建对应目录及授权
[root@test src]# mdkir /opt/app/ #创建家目录
[root@test src]# mkdir -p /data/logs/php #创建php日志存放目录
[root@test src]# id www #查看www用户,存在就不创建,不存在就创建(我们以www用户来跑php)
[root@test src]# chown www.www /data/logs/php/ #授权
编译安装re2c跟php5.6
##安装re2c
[root@test src]# tar xf re2c-0.16.tar.gz
[root@test src]# cd re2c-0.16
[root@test re2c-0.16]# ./configure
[root@test re2c-0.16]# make && make install
##安装php5.6
[root@test src]# tar xf php-5.6.36.tar.gz
[root@test src]# cd php-5.6.36
[root@test php-5.6.36]# ./configure --prefix=/opt/app/php56 --with-config-file-path=/opt/app/php56/etc --with-config-file-scan-dir=/opt/app/php56/etc/ini.d --enable-fpm --with-mysql --with-mysqli --with-pdo-mysql --with-iconv-dir --with-freetype-dir=/usr/ --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --disable-ipv6 --with-regex --with-pcre-regex --enable-exif --enable-bcmath --with-curl --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --enable-zip --enable-soap --with-gettext --enable-opcache --without-pear --enable-intl
相关参数解析(捡一些不认识的说下,认识的参数就不搞了):
--with-config-file-scan-dir=PATH #扫描配置文件的路径
--enable-fpm #开启fpm模式(主要用来处理nginx请求)
--with-mysql #支持mysql函数(非持继连接函数)
--with-mysqli #支持mysqli函数(永远连接函数)
--with-pdo-mysql #添加mysql支持 默认值是:--with-pdo-mysql=mysqlnd
--with-iconv-dir #支持iconv函数
--with-freetype-dir=/usr/ #添加字体引擎支持
--with-jpeg-dir #添加jpeg库支持
--with-png-dir #添加png库支持
--with-zlib #开启zlib支持 (zlib版本号必须大于等于 1.0.9)
--with-libxml-dir=/usr #libxml的默认安装目录(yum默认安装的软件基本是放在/usr目录下面)
--disable-ipv6 #关闭ipv6的支持
--with-regex #支持正则
--with-pcre-regex #支持pcre正则表达式
--enable-exif #启用exif支持(主要用于提供相机图片拍摄支持,记录照片拍摄的数据,属性信息)
--enable-bcmath #启用bcmath支持
--with-curl #启用curl支持
--enable-mbstring #启用多字节字符串的支持
--with-mcrypt #提供mcrypt支持
--with-gd #启用GD图像处理库
--enable-gd-native-ttf #GD: 启用TureType字符功能
--with-openssl #启用openssl支持 (OpenSSL版本号必须大于等于 0.9.6)
--with-mhash #启用mhash支持
--enable-pcntl #启用pcntl支持
--enable-sockets #启用sock支持
--enable-zip #提供zip读写支持
--enable-soap #启用soap支持
--with-gettext #启用GNU gettext支持
--enable-opcache #启用zend opcache支持
--without-pear #移除pear模块
--enable-intl #提供国际化支持
注:这位大佬php相关模块翻译的不错 https://blog.csdn.net/ztguang/article/details/51015901 感兴趣的用户可以去瞧瞧
[root@test php-5.6.36]# make
[root@test php-5.6.36]# make install
[root@test php-5.6.36]# mkdir -p /opt/app/php56/etc/ini.d
[root@test php-5.6.36]# mkdir -p /opt/app/php56/var/run/
[root@test php-5.6.36]# chown www.www /opt/app/php56/etc/ini.d/ /opt/app/php56/var/run/
[root@test php-5.6.36]# cp /opt/app/php56/etc/php-fpm.conf.default /opt/app/php56/etc/php-fpm.conf
[root@test php-5.6.36]# cp /opt/src/php-5.6.36/php.ini-production /opt/app/php56/etc/php.ini
[root@test php-5.6.36]# vim /etc/systemd/system/php-fpm56.service #这里可以去看我Nginx安装文档里面有system的启动脚本介绍
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/opt/app/php56/var/run/php-fpm.pid
ExecStart=/opt/app/php56/sbin/php-fpm --nodaemonize --fpm-config /opt/app/php56/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
[root@test php-5.6.36]# systemctl daemon-reload
[root@test php-5.6.36]# systemctl restart php-fpm56
[root@test php-5.6.36]# systemctl enable php-fpm56
[root@test php-5.6.36]# ps aux | grep php56 | grep -v grep #ok php56是启动了 那php56搭建完成了
root 22697 0.1 1.0 256768 10320 ? Ss 17:03 0:00 php-fpm: master process (/opt/app/php56/etc/php-fpm.conf)
安装Redis扩展(主要是使php支持Redis,基于php5.6版本)
[root@test bin]# cd /opt/src/
[root@test src]# wget http://pecl.php.net/get/redis-4.3.0.tgz #根据官网信息说,此Redis模块是php5支持的最高Redis扩展模块版本
[root@test src]# tar xf redis-4.3.0.tgz
[root@test src]# cd redis-4.3.0
[root@test redis-4.3.0]# /opt/app/php56/bin/phpize #phpize是用来安装php扩展模块的。
[root@test redis-4.3.0]# ./configure --enable-redis --with-php-config=/opt/app/php56/bin/php-config # 编译安装 php-config 是可以让Redis获取php相关信息
[root@test redis-4.3.0]# make && make install
[root@test redis-4.3.0]# vim /opt/app/php56/etc/ini.d/php56-redis.ini
extension=redis.so #添加这一句即可,extendion 扩展的意思
到此的话,php-redis扩展安装到此结束,然后是安装Redis-server端了
注:对于php7安装Redis扩展模块的步骤跟php56安装步骤是差不多的(唯一区别就是下载的Redis扩展版本不同)
#报错
原因:没有在当前目录下找到config.m4这个文件
[root@test redis-4.0.14]# /opt/app/php56/bin/phpize
Cannot find config.m4.
Make sure that you run '/opt/app/php56/bin/phpize' in the top level source directory of the module
解决:从php56源码(在php源码/ext/openssl目录下)里面cp一份过来(放到你当前目录,建议cp + -a参数)
[root@test redis-4.0.14]# cp /opt/src/php-5.6.36/ext/openssl/config0.m4 ./config.m4
#在使用缓存方面,如果不是做分布式的缓存建议使用php自带的缓存系统
安装apcu扩展
简介:apc是php自己的缓存系统,然后分为系统缓存及用户缓存,系统缓存是指在php脚本执行时,增加缓存,减少php文件反复读取及编译,从而达到系统加速的目的。用户缓存是指将用户写入的数据以键值方式插入和读取。在php 5.5版本之后,用户缓存被独立出来,称为apcu,默认是不开启的,需要安装apcu扩展模块才行。
[root@test ~]# cd /opt/src/
# wget http://pecl.php.net/get/apcu-4.0.11.tgz
# tar xf apcu-4.0.11.tgz
# cd apcu-4.0.11
# /opt/app/php56/bin/phpize
# ./configure --enable-apcu --with-php-config=/opt/app/php56/bin/php-config
# make && make instal
# vim /opt/app/php56/etc/ini.d/php56-apcu.ini
extension=apcu.so #加载apcu模块
[apcu] #定义模块(可以自定义)
apc.enabled=1 #是否禁用APC,0 禁用;1启用
apc.shm_size=64M #设置每个共享内存快的大小(根据实际情况调整)
apc.ttl=0 #缓存条目允许在缓冲区逗留的时间(秒),0,表示永不超时,建议值为7200~36000。设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。
apc.gc_ttl=600 #设置缓存条目在垃圾回收列表中存活的秒数,当达到此数值时,在回收列表中的缓存信息被彻底删除,0为禁用。
apc.enable_cli=1 #是为测试跟调试,主要为CLI版本的php开启apc功能。
apc.mmap_file_mask=/tmp/apc.XXXXXX #把file-backed内存映射为文件,要设置成"/tmp/apc.xxxxxx"的样子(恰好6个x)。你还可以设为"/dev/zero"来为匿名映射的内存使用内核的"/dev/zero"接口。不定义此指令则表示强制使用匿名映射。