一直用惯 CentOS
系统的我,之前一直都是耍 PHP 5.4
这样老的版本。
所以之前的“重装之路”教大家的是安装 PHP 5.4
这样的版本。
但是,其实现在这个 PHP
的版本 PHP
官方也不维护了。
如果不是老网站,我可能会尝试新的 PHP 7
。
不过我没有探索过 PHP 7
,手痒想研究一下,那当然要先安装这玩意啦。
这篇文章就是我摸索安装 PHP 7
的经验。
选择怎样的安装方式 我们知道,CentOS
支持 yum
的安装方式,懒人都喜欢它。
不过,yum
的官方源是不提供 PHP 7
的,因此还要搞别的源,很是烦闷。
因此,我打算采取 编译安装 的方式。
虽然折腾了一点、又浪费时间,但是至少我可以灵活调整安装些啥。
下载 PHP 7
源代码 直奔 PHP
的官方网站: php.net
直接就可以看到 Downloads
的栏目,点进去(我知道你们想要直通车,点我就可以进去了 )。
截至2017年1月24日,最新的稳定版本是 PHP 7.1.1
,那我们就用它吧。
在下面,我们可以看到:
php-7.1.1.tar.bz2 (sig) [15,405Kb] 19 Jan 2017
php-7.1.1.tar.gz (sig) [19,800Kb] 19 Jan 2017
php-7.1.1.tar.xz (sig) [12,467Kb] 19 Jan 2017
这样的东西。
其实就是 PHP
的源码被三种不同的压缩方式压缩成压缩包。
反正随便选,都可以用 tar
解压的。
选好你想下载的文件,点开它,就可以看到有很多镜像下载地址。
如果你是国内的主机,找到 China
,复制 cn2.php.net
链接下的地址就可以了。
就像这样:http://cn2.php.net/get/php-7.1.1.tar.bz2/from/this/mirror
然后用你的 wget
或者 curl
去下载吧。任选一个命令:
1 2 wget http://cn2.php.net/get/php-7.1.1.tar.bz2/from/this/mirror curl http://cn2.php.net/get/php-7.1.1.tar.bz2/from/this/mirror -o php-7.1.1.tar.bz2
准备安装 PHP 7
源代码 安装必要的库 熟悉编译安装软件的老司机肯定记得,在 ./configure
之前一定要装些什么。
不然有可能会碰到下面的话:
1 configure: error: xml2-config not found. Please check your libxml2 installation.
下面,我很贴心的给了万能 yum
命令,供君运行:
1 yum -y install gcc g++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel
因为怕了大家可能没安装一些必要的软件,好比说 GCC
之类的,所以都给加上了。
反正多了也不怕,yum
会看你有没有装的。
装好了必要的东西,就可以编译配置啦~
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 ./configure \ --prefix=/usr/local/php \ --with-config-file-path=/etc \ --enable-fpm \ --enable-inline-optimization \ --disable-debug \ --disable-rpath \ --enable-shared \ --enable-soap \ --with-libxml-dir \ --with-xmlrpc \ --with-openssl \ --with-mcrypt \ --with-mhash \ --with-pcre-regex \ --with-sqlite3 \ --with-zlib \ --enable-bcmath \ --with-iconv \ --with-bz2 \ --enable-calendar \ --with-curl \ --with-cdb \ --enable-dom \ --enable-exif \ --enable-fileinfo \ --enable-filter \ --with-pcre-dir \ --enable-ftp \ --with-gd \ --with-openssl-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib-dir \ --with-freetype-dir \ --enable-gd-native-ttf \ --enable-gd-jis-conv \ --with-gettext \ --with-gmp \ --with-mhash \ --enable-json \ --enable-mbstring \ --enable-mbregex \ --enable-mbregex-backtrack \ --with-libmbfl \ --with-onig \ --enable-pdo \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-zlib-dir \ --with-pdo-sqlite \ --with-readline \ --enable-session \ --enable-shmop \ --enable-simplexml \ --enable-sockets \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --enable-wddx \ --with-libxml-dir \ --with-xsl \ --enable-zip \ --enable-mysqlnd-compression-support \ --with-pear \ --enable-opcache
安装 PHP 7
一行搞定:
编译安装完毕,就看到类似的话:
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 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/ Installing PHP CLI binary: /usr/local/php/bin/ Installing PHP CLI man page: /usr/local/php/php/man/man1/ Installing PHP FPM binary: /usr/local/php/sbin/ Installing PHP FPM config: /usr/local/php/etc/ Installing PHP FPM man page: /usr/local/php/php/man/man8/ Installing PHP FPM status page: /usr/local/php/php/php/fpm/ Installing phpdbg binary: /usr/local/php/bin/ Installing phpdbg man page: /usr/local/php/php/man/man1/ Installing PHP CGI binary: /usr/local/php/bin/ Installing PHP CGI man page: /usr/local/php/php/man/man1/ Installing build environment: /usr/local/php/lib/php/build/ Installing header files: /usr/local/php/include/php/ Installing helper programs: /usr/local/php/bin/ program: phpize program: php-config Installing man pages: /usr/local/php/php/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/php/lib/php/ [PEAR] Archive_Tar - installed: 1.4.0 [PEAR] Console_Getopt - installed: 1.4.1 [PEAR] Structures_Graph- installed: 1.1.1 [PEAR] XML_Util - installed: 1.3.0 [PEAR] PEAR - installed: 1.10.1 Wrote PEAR system config file at: /usr/local/php/etc/pear.conf You may want to add: /usr/local/php/lib/php to your php.ini include_path /root/php-7.1.1/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin ln -s -f phar.phar /usr/local/php/bin/phar Installing PDO headers: /usr/local/php/include/php/ext/pdo/
配置 PHP
配置环境变量
在文件的最末尾填上:
1 2 PATH=$PATH:/usr/local/php/bin export PATH
保存修改,然后执行 source /etc/profile
使环境变量配置生效。
安装 PHP-FPM
1 2 cp sapi/fpm/init.d.php-fpm /usr/local/bin/php-fpm chmod +x /usr/local/bin/php-fpm
初始化 PHP
和 PHP-FPM
的配置 1 2 3 cp php.ini-production /etc/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
下面这一步很关键!
因为我们要确保 PHP
不会访问到一些奇奇怪怪的敏感目录,所以 PHP-FPM
的用户和用户组一定要严格管控权限。
只能让我们自己的网站访问到自己的网站目录,其他地方都不行。
这样就需要改一下 PHP-FPM
的用户和用户组啦。
本文不教怎么管理 *inx
系统的文件权限,有机会再说
假设我们用 website
用户组管控网站,那就先用 groupadd website
创建好这个用户组。
假设我们要做主页 www
的 PHP
, 那么就创建用户 site-www
: adduser -g website site-www
还有一步,就是 vi /etc/passwd
把 site-www
的 bash
改回 /sbin/nologin
来防止这个用户被登录。
然后回去 /usr/local/php/etc/php-fpm.d/www.conf
,改一下下面的东西:
1 2 3 4 5 ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = nginx group = nginx
user
改成 site-www
group
改成 website
保存好 www.conf
就可以啦。
搞完这些,就运行 php-fpm start
,这就是见证奇迹的时刻!
开机自启动 PHP-FPM
先添加服务:
1 vim /etc/systemd/system/php-fpm.service
内容加上:
1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/bin/php-fpm start ExecReload=/usr/local/bin/php-fpm reload ExecStop=/usr/local/bin/php-fpm stop [Install] WantedBy=multi-user.target
保存服务配置之后,设置开机自启动:
1 systemctl enable php-fpm.service
配置 NGINX
这一步很关键。我们需要对要用 PHP
的网站配上 PHP
的配置。
假设原来的网站的配置是下面这样的:
1 2 3 4 5 6 server { listen 80; server_name sloth.com; root /var/www/sloth; }
配置默认 index
文件 我们需要在 NGINX
的 http
或者 server
这两个层加上:
1 index index.html index.htm index.php;
不然的话,NGINX
是不知道 index.php
是首页文件的。
这样有可能访问 http://sloth.com
会出现 404 Not Found
的情况。
加上 php
文件解析 在你要开启 PHP
的网站的 server
配置项下,补充上:
1 2 3 4 5 6 7 8 9 location ~ \.php$ { try_files $uri = 404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_hide_header X-Powered-By; include fastcgi_params; }
try_files
那行: URI上的文件不存在就直接返回NGINX
的 404
错误,而不是交给 PHP-FPM
再判定文件不存在;
fastcgi_pass
: 套路来的。PHP-FPM
默认端口是 :9000
,当然你用套接字的办法就用 unix:
吧;
fastcgi_index
: 套路来的。在CGI上的默认 index
;
fastcgi_fastcgi_param
: 套路来的。传给 PHP-FPM
让它老人家知道 php
文件在哪里;
fastcgi_hide_header
那行:隐藏 PHP
的版本号,防止黑客试图揣测;
include fastcgi_params;
: 套路。调用 FASTCGI
的指令集。
所以,折腾完了就长这个样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 server { listen 80; server_name sloth.com; root /var/www/sloth; index index.html index.htm index.php; log_not_found off; location ~ \.php$ { try_files $uri = 404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_hide_header X-Powered-By; include fastcgi_params; } }
保存到 nginx.conf
里面或者单独建一个文件,自己在 nginx.conf
里面 include
都可以。
重启 NGINX
看效果 nginx -s reload
就可以热重启(重新加载配置)
做了这个动作就可以看到新的网站部署上去啦~
是不是很简单?
(有没有发现上面的话有点熟悉)
反正,按这个步骤走,PHP 7
就稳稳地装在了你的小服务器上啦。
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
本文地址:https://blog.micblo.com/2017/01/24/CentOS7%E9%87%8D%E8%A3%85%E4%B9%8B%E8%B7%AF-PHP7%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E7%AF%87/