Php安装维护

警告
本文最后更新于 2019-03-04,文中内容可能已过时。
前言

记录一个php的安装过程,仅作为个人使用记录,可参考
基础环境:

  1. CentOS 7.6
  2. php 5.6.38

2. 安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
[root@00 ~]# mkdir /opt/software
[root@00 ~]# cd /opt/software
[root@00 software]# useradd -d /var/ftproot -s /sbin/nologin www 
[root@00 software]# yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel openssl openssl-devel mhash libmcrypt-devel mcrypt gcc glibc gcc-c++

[root@00 software]# wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz --no-check-certificate
[root@00 software]# tar xzf libiconv-1.15.tar.gz
[root@00 software]# cd libiconv-1.15
[root@00 libiconv-1.15]# ./configure --prefix=/usr/local/libiconv  
[root@00 libiconv-1.15]# make && make install 
## ----  过程省略  ---- ##
## ----  过程错误自行排查  ---- ##
[root@00 libiconv-1.15]# cd /opt/software

[root@00 software]# wget http://mirrors.sohu.com/php/php-5.6.38.tar.gz
[root@00 software]# tar -xzf php-5.6.38.tar.gz
[root@00 php-5.6.38]# cd php-5.6.38
## 标准的生产环境编译参数(nginx)
## ------------------------ ##
## apache取消以下参数(apache+php时是不需要将php启动的,php是将模块直接编译进入apache的)  
## --enable-opcache=no
## --enable-fpm
## --with-fpm-user=www 
## --with-fpm-group=www 
## 添加以下参数,指向apache的apxs
## --with-apxs2=/opt/apache/bin/apxs
## ------------------------ ##
[root@00 php-5.6.38]# ./configure \
--prefix=/opt/php5.6.38 \
--with-config-file-path=/opt/php5.6.38/etc \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--disable-debug \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no  

#
# --enable-opcache 此扩展可能不稳定,因此关闭,
# 也可以使用--disable-opcache 进行关闭,默认是启用的 
# (现当前版本不知道是否稳定些了)
#

# 5.3 添加的额外参数  
# --with-curlwrappers  
# --enable-safe-mode  
# --enable-zend-multibyte  


[root@00 php-5.6.38]# make && make install
## ----  过程省略  ---- ##
## ----  过程错误自行排查  ---- ##
[root@00 php-5.6.38]# cp -v ./php.ini-production /opt/php5.6.38/etc/php.ini
[root@00 php-5.6.38]# cp -v /opt/php5.6.38/etc/php-fpm.conf.default /opt/php5.6.38/etc/php-fpm.conf
[root@00 php-5.6.38]# ln -s /opt/php5.6.38/ /opt/php    # 优化路径,用于后续可能的升级
## --- 安装完成 --- ##

若需要将php-fpm 加入到系统服务当中, 在/opt/software/php-5.6.38/sapi/fpm目录下,将php-fpm.service文件中对应的${prefix}${exec_prefix}改为程序编译后的对应目录,让后将文件cp/usr/lib/systemd/system/下, 然后执行systemctl daemon-reload重加载即可,然后就可以使用systemctl {start|stop|restart} php-fpm.servicesphp-fpm进行管理了(CentOS 6.x 的不知道)

扩展安装的操作步骤(以xcache为例):

  1. 下载需要安装的扩展源码,解压进去后,先执行 /opt/php5.6.38/bin/phpize 生成configure配置文件
  2. 配置当前扩展编译./configure --enable-xcache --with-php-config=/opt/php5.6.38/bin/php-config
  3. 编译并安装 make && make install,编译并安装成功后会在/opt/php5.6.38/lib/php/extensions目录下生成对应目录,里面包含一个xcache.so的文件.

3. 相关参数说明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
pid = run/php-fpm.pid
error_log = log/php-fpm.log
user = www
group = www
# 设置接受 FastCGI 请求的地址 可为socket路径,(socket默认位置php根目录)
listen = 127.0.0.1:9000
#允许连接到 FastCGI 的服务器 IPV4 地址
listen.allowed_clients = 127.0.0.1
# 设置进程管理器如何管理子进程,dynamic动态设置,必须配合
# pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers参数进行设置
pm = dynamic
# 设置最大可创建的子进程的数量(仅代表动态设置)
pm.max_children = 300
# 设置启动时创建的子进程数目
pm.start_servers = 30
# pm.*_spare_servers 设置空闲服务进程的最低/最大数目
pm.min_spare_servers = 30
pm.max_spare_servers = 300
# 设置每个子进程重生之前服务的请求数
pm.max_requests = 65535
# 设置文件打开描述符的 rlimit 限制,默认系统定义值
rlimit_files = 65535

详细参数说明:

https://secure.php.net/manual/zh/install.fpm.configuration.php

4. windows_php

  1. iis 可直接安装为web-platfrom,然后搜索php manager

    https://www.iis.net/downloads/microsoft/web-platform-installer

  2. 若无法正常使用,需要先安装vc2012

  1. 1无法安装,一般只是php manager无法安装,而url重写模块是安装好了的,这个时候直接去github上去下载一个整合的phpmanager,安装即可。

    https://github.com/phpmanager/phpmanager/releases/tag/v2.0

  2. 上述第三步,也有可能url重写模块也未安装成功,这个时候需要去microsoft官网下载一个重写模块即可。另如果通过为web-platfrom安装phpmanager失败后安装的url重写模块,可能会导致iis中的.net程序异常,这个时候也需要手动卸载通过web-platfrom安装的url重写模块,然后安装microsoft下载的对应重写模块,理论上来说iis中安装的这个应该就是官网提供的,但是我遇到过的一次就是不行,卸载后重新安装官网的后,.net就正常了。

  3. 扩展 pdo_sqlsrv (windows + drivers_3.2)

    • 遇到了一个坑,php5.6添加pdo_sqlsrv模块无论是 nts 还是 ts的 ,从官方直接下载下来的 dll 打死进加载不了,后来找到了一个非官方的,导入进去,然后就可以了,我也是哔了狗了(这些模块的dll可以去phpstudycopy,他们是集成好了的)。

5. 额外扩展

  • php memcache 扩展
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
wget http://pecl.php.net/get/memcache-2.2.7.tgz
/opt/php-server/bin/phpize

yum install re2c

./configure --enable-memcache --with-php-config=/opt/php-server/bin/php-config --with-zlib-dir

make && make install

extension=memcache.so
  • php redis 扩展
1
2
3
4
5
6
7
8
9
# php redis 扩展, php 5.6 对应phpredis 5.0以下测试正常编译 

wget https://github.com/phpredis/phpredis/archive/4.3.0.tar.gz

/opt/php-server/bin/phpize

./configure --with-php-config=/opt/php-server/bin/php-config

extension=redis.so 
  • memcache 管理工具

http://www.junopen.com/memadmin/

6. php版本选择

windos服务器:

  1. 如果你是PHP+IIS;请选择:PHP非线程安全(None Thread Safe(NTS));
  2. 如果你是PHP+apache;请选择:PHP线程安全(Thread Safe(TS))
    linux服务器:
    linux服务器下的PHP,没有PHP线程安全和非线程安全版的区分