今天看 PHP 官网 7.1.3 的稳定版已经出来了,准备尝尝鲜,安装过程没有什么变化,这里只是简单记录下。

安装 nginx 1.8

添加官方 yum 源

nginx 提供了官方的 yum 源,安装 nginx 的 1.8 可以使用官方的 yum 源,速度还不错。

在 /etc/yum.repo.d/ 下新建文件 nginx.repo

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

ubuntu/debian 源具体参见:官方文档

安装 nginx

使用 yum install nginx 安装,yum 会查找软件包和依赖然后提示是否安装,看好版本后,选择 Y

1
/etc/init.d/nginx start

可以使用 curl localhost 验证 nginx 是否安装成功。

安装 PHP7

注意:如果没有安装 MySQL 的话,最好先安装一下 MySQL。

安装依赖
1
yum install -y libxml2 libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers php-mysqlnd libmcrypt-devel libtidy libtidy-devel recode recode-devel libxpm-devel libXpm-devel

安装 libmcrypt:

1
2
3
4
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.6.tar.gz
tar -zxvf libmcrypt-2.5.6.tar.gz
cd libmcrypt-2.5.6.tar.
make && make install

默认会安装在 /usr/local 目录下。

下载 PHP 源码包

我这里是安装的官方最新稳定版 PHP7.1.3,所以将使用源码安装方式安装。

1
2
3
wget http://cn.php.net/distributions/php-7.1.3.tar.gz
tar -xzvf php-7.1.3.tar.gz
cd php-7.1.3

编译配置(当前应该在 php-7.1.3 目录下):

1
./configure --prefix=/usr/local/php --with-fpm-user=nginx --with-fpm-group=nginx --with-config-file-path=/etc/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --with-jpeg-dir --with-freetype-dir --with-xpm-dir=/usr --with-bz2

编译:

1
make

这里可能会等挺长时间,安装过程大概就是复制编译后的文件的一个过程。

1
make test & make install

这里需要注意一下,前面 configure 时我们配置了 php.ini 的路径为 /etc/php,然而发现并没有这个目录也找不到 php.ini 文件。没关系,这里可以手动的复制一个配置文件过去,配置文件可以在源码包 php-7.1.3 里找到,它包括了开发环境和生产环境的默认配置。

1
2
3
4
#开发环境
cp ~/php-7.1.3/php.ini-development ./php.ini
#生产环境
cp ~/php-7.1.3/php.ini-production ./php.ini
配置 nginx

修改 /etc/nginx/conf.d/default.conf 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
...
location / {
    root   /var/www;
    index  index.html index.htmi index.php;
}
...
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
    # 根目录 root
    root /var/www;     
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
配置 php-fpm
1
2
cp /local/php/etc/php-fpm.conf.default /local/php/etc/php-fpm.conf
cp /local/php/etc/php-fpm.d/www.conf.default /local/php/etc/php-fpm.d/www.conf

为了更方便的启动 php-fpm,我们为它添加 sysv 风格的初始化服务脚本,nginx 是通过 yum 安装的是有 /etc/init.d/nginx 这个启动脚本的。

新建文件 /etc/init.d/php-fpm

 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
#!/bin/bash
#
# Startup script for the PHP-FPM server.
#
# chkconfig: 345 85 15
# description: PHP is an HTML-embedded scripting language
# processname: php-fpm
# config: /usr/local/php/etc/php.ini
 
# Source function library.
. /etc/rc.d/init.d/functions
 
PHP_PATH=/usr/local
DESC="php-fpm daemon"
NAME=php-fpm
# php-fpm路径
DAEMON=$PHP_PATH/php/sbin/$NAME
# 配置文件路径
CONFIGFILE=$PHP_PATH/php/etc/php-fpm.conf
# PID文件路径不清楚可以查看 /usr/local/php/etc/php-fpm.conf
PIDFILE=$PHP_PATH/php/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
 
rh_start() {
  $DAEMON -y $CONFIGFILE || echo -n " already running"
}
 
rh_stop() {
  kill -QUIT `cat $PIDFILE` || echo -n " not running"
}
 
rh_reload() {
  kill -HUP `cat $PIDFILE` || echo -n " can't reload"
}
 
case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        rh_start
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
        rh_stop
        echo "."
        ;;
  reload)
        echo -n "Reloading $DESC configuration..."
        rh_reload
        echo "reloaded."
  ;;
  restart)
        echo -n "Restarting $DESC: $NAME"
        rh_stop
        sleep 1
        rh_start
        echo "."
        ;;
  *)
         echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
         exit 3
        ;;
esac
exit 0
1
2
3
4
# 赋予执行权限
sudo chmod +x /etc/init.d/php-fpm
# 修改启动等级
sudo /sbin/chkconfig php-fpm on

下面就可以用以下命令控制 php-fpm

1
2
3
4
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload

启动 php-fpm 后就可测试一下 PHP 文件能否执行了。

有问题可留言

参考资料

nginx 文档

Nginx和PHP-FPM的启动/重启脚本