-
安装准备
yum install \
vim \
gcc \
gcc-c++ \
wget \
make \
re2c \
libtool \
automake \
autoconf \
curl-devel \
libpng-devel \
libxml2-devel \
libxslt-devel \
openssl-devel \
freetype-devel \
bzip2-devel \
libicu-devel \
libuuid-devel \
libmcrypt-devel \
postgresql-devel \
-y
-
安装php
cd /root
wget http://cn2.php.net/distributions/php-7.2.6.tar.gz
tar -zxvf php-7.2.6.tar.gz
cd php-7.2.6
./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-openssl \
--enable-fpm
# 如果在/usr/local/apache/路径下安装了apache并且想让php运行在apache下,需要加上:
# --with-apxs2=/usr/local/apache/bin/apxs
# 或 --with-apxs2=/usr/local/apache/bin/apxs2
# apxs在有些apache发行版中已经改名为apxs2
make
make install
# 如果在/usr/local/apache/路径下安装了apache并且想让php运行在apache下,apache不需要重新编译
# 这时候/usr/local/apache/modules/下多了一个libphp7.so文件
# 编辑/etc/httpd/httpd.conf添加如下行:
LoadModule php7_module modules/libphp7.so
DocumentRoot "/www"
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
# 编辑/www/index.php添加如下行:
<?php
phpinfo();
# 重启apache
# 访问http://xxx.xxx.xxx.xxx/index.php
-
生成php.ini、php-fpm.conf、www.conf
# 检查php.ini是否正确放置(只需要第一行不为none)
/usr/local/php/bin/php --ini
部署环境执行:
cp ./php.ini-production /usr/local/php/lib/php.ini
开发环境执行:
cp ./php.ini-development /usr/local/php/lib/php.ini
# 拷贝php-fpm.conf
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# PHP7才执行(PHP5中,www.conf的配置项在php-fpm.conf)
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
-
php.ini常规配置
# 下载cacert.pem
cd /usr/local/php/lib
wget https://curl.haxx.se/ca/cacert.pem
vim /usr/local/php/lib/php.ini
;php版本信息隐藏
expose_php=Off
;防止显示php错误输出,Off: 不输出但存入日志
display_errors=Off
;防止用户将可执行文件伪装成静态文件(如图片、文档)上传后,通过访问WEB页面执行该文件
cgi.fix_pathinfo=0
;允许上传单个文件最大20M
upload_max_filesize=20M
;session.name如果自己开发程序可以改,但如果是部署已有项目,修改后可能导致session相关功能异常
session.name=self_key
;每请求10次session的key,检查1次key是否需要过期删除
session.gc_probability=1
session.gc_divisor=1000
;设置session默认5分钟(300秒)过期
session.gc_maxlifetime=1440
;时区中国上海
date.timezone=Asia/Shanghai
;curl、openssl配置cacert.pem
curl.cainfo=/usr/local/php/lib/cacert.pem
openssl.cafile=/usr/local/php/lib/cacert.pem
ESC
:wq
-
配置php-fpm.conf
vim /usr/local/php/etc/php-fpm.conf
pid=run/php-fpm.pid
error_log=log/php-fpm.log
# 如开启该配置↓,下一步不可跳过
rlimit_files=51200
ESC
:wq
-
调整最大文件打开数(数值仅供参考,如上一步骤未配置rlimit_files,本步可跳过)
# 在文件末尾添加
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
ESC
:wq
-
配置www.conf(内存较大、较小两套方案)
vim /usr/local/php/etc/php-fpm.d/www.conf
user=www
group=www
# 静态分配子进程(内存1G,计划为php分配 640M 内存)
pm=static
pm.max_children=20
pm.start_servers=15
pm.min_spare_servers=10
pm.max_spare_servers=20
pm.process_idle_timeout=10s
pm.max_requests=500
slowlog=log/$pool.log.slow
php_admin_value[memory_limit]=32M
# 动态分配子进程(内存1G,计划为php分配 640M 内存)
pm=dynamic
pm.max_children=20
pm.start_servers=15
pm.min_spare_servers=10
pm.max_spare_servers=20
pm.process_idle_timeout=10s
pm.max_requests=500
slowlog=log/$pool.log.slow
php_admin_value[memory_limit]=32M
ESC
:wq
# 以下配置仅供了解,不建议这样使用
listen=127.0.0.1:9000 若改为 listen=/usr/local/php/var/run/php-fpm.sock
则nginx配置 fastcgi_pass 127.0.0.1:9000; 要改为 fastcgi_pass unix:/usr/local/php/var/run/php-fpm.sock;
-
将php加入环境变量
vim /etc/profile
export PATH=$PATH:/usr/local/php/bin
ESC
:wq
source /etc/profile
-
安装composer
# 下载(需要先安装zlib扩展)
cd /usr/local/php/bin
curl -sS https://getcomposer.org/installer | /usr/local/php/bin/php
mv ./composer.phar ./composer
composer -V
-
启动php并设置开机启动
# 添加www用户
useradd www
mkdir /www
chown -R www:www /www
chown -R www:www /usr/local/php
# 进入单元文件目录
cd /etc/systemd/system
vim php7.service
[Unit]
Description=Start php7 on boot.
After=network.target
[Service]
User=root
Group=root
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
ExecStop=/bin/kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
PrivateTmp=true
[Install]
WantedBy=multi-user.target
ESC
:wq
# 修改文件权限为只有root用户可以编辑该文件
chown -R root:root /etc/systemd/system/php7.service
chmod -R 644 /etc/systemd/system/php7.service
# 更新systemd
systemctl daemon-reload
systemctl enable php7
systemctl start php7
-
查看运行情况
# 查看主进程、子进程
ps aux | grep php-fpm
# 查看pid文件(存在即成功)
ll /usr/local/php/var/run/
-
php进程操作
# 平滑关闭
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
# 平滑重启
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
-
安装php扩展
cd /root/php-7.2.6/ext/xxxx
/usr/local/php/bin/phpize
-----------------------------------------------------------
| phpize时注意如下:
| 这里如果说没发现config.m4
| cp ./config0.m4 ./config.m4
-----------------------------------------------------------
./configure --with-php-config=/usr/local/php/bin/php-config
-----------------------------------------------------------
| 安装GD库configure时注意如下:
| 这里为了排版加了'|',按住Alt键选取吧...
| yum install \
| libXpm-devel \
| libpng-devel \
| libjpeg-devel \
| libwebp-devel \
| -y \
|
| ./configure \
| --with-xpm-dir \
| --with-png-dir \
| --with-jpeg-dir \
| --with-webp-dir \
| --with-zlib-dir \
| --with-freetype-dir \
-----------------------------------------------------------
make
-----------------------------------------------------------
| make注意如下:
| 重复安装PHP预编译的扩展,会报错
| Installing shared extensions:
| /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/
| cp: cannot stat 'modules/*': No such file or directory
| make: *** [install-modules] Error 1
| 所以不要重复安装,通过 php -m 查看已经安装的扩展。
-----------------------------------------------------------
-----------------------------------------------------------
| 这里注意,安装mcrypt要先安装libmcrypt(有些版本Linux系统)
| cd /usr/local/src
| wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
| cd libmcrypt-2.5.7
| ./configure
| make
| make install
-----------------------------------------------------------
make install
vim /usr/local/php/lib/php.ini
extension=xxxx.so
ESC
:wq
Zend扩展:
-----------------------------------------------------------
| 设置opcache.max_accelerated_files时
| 先执行以下命令来获取php文件数
| find . -type f -print | grep php | wc -l
| 然后在以下质数集合中,找到一个恰好比该值大的值
| 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987
| opcache安装,配置php.ini:
|
| zend_extension=opcache.so
| opcache.enable_cli=1
| opcache.memory_consumption=256
| opcache.interned_strings_buffer=16
| opcache.max_accelerated_files=32531
| opcache.validate_timestamps=1
| opcache.revalidate_freq=60
| opcache.fast_shutdown=1
-----------------------------------------------------------
- ZendOpcache的最佳设置参考链接
-
常用扩展('-'表示可能已经安装的扩展,安装前检查已安装扩展,防止重复安装)
bcmath
- ctype
curl
- date
- fileinfo
gd
- hash
- iconv
intl
- json
mbstring
mcrypt
- mysqlnd
- openssl
- pcre
- PDO
pdo_mysql
pdo_pgsql
sockets
zip
zlib
mongo (wget http://pecl.php.net/get/mongo-1.6.14.tgz [php7.x.x不再需要])
mongodb (wget http://pecl.php.net/get/mongodb-1.2.9.tgz)
redis (wget http://pecl.php.net/get/redis-3.1.2.tgz)
uuid (wget http://pecl.php.net/get/uuid-1.0.4.tgz)
fastcommon (见FastDFS安装)
fastdfs_client (见FastDFS安装)
Zend:
opcache (文档地址: http://php.net/manual/zh/opcache.installation.php)
-
php重新编译
cd /root/php-7.2.6
make distclean
./configure \
--prefix=/usr/local/php \
--enable-mysqlnd \
--with-openssl \
--enable-fpm \
make
make install
- 领支付宝红包支持作者
