1.安装PHP
生产环境PHP都是运行在
Linux
操作系统中,如:Centos
操作系统,在Centos
操作系统中安装PHP需要经过预编译、编译和安装等阶段。
安装步骤如下:
-
1.从PHP官方网站下载某个版本的PHP源码包,如:7.2.31
PHP官网地址:https://www.php.net/
-
2.创建
php-fpm
运行用户组与用户
# 创建www用户组
groupadd www
#创建www用户,且www用户不能登录
useradd www -g www -s /sbin/nologin
- 3.解压并进入安装目录
tar xzvf php-7.2.31.tar.gz
cd php-7.2.31
- 4.预编译,执行以下命令
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-gd --with-iconv --with-zlib --with-curl --with-pdo-mysql --with-png-dir --with-jpeg-dir --with-freetype-dir --with-fpm-user=www --with-fpm-group=www --with-gettext --with-openssl --enable-bcmath --enable-fpm --enable-mbstring --enable-sockets --enable-session --with-gettext
- 5.编译,执行如下命令
make
- 6.安装,执行如下命令
make install
此步骤安装完成后,PHP会被安装到
/usr/local/php
,目录结构如下
drwxr-xr-x 12 root wheel 384 9 15 2019 bin/
drwxr-xr-x 7 root wheel 224 7 4 11:12 etc/
drwxr-xr-x 3 root wheel 96 9 15 2019 include/
drwxr-xr-x 3 root wheel 96 9 15 2019 lib/
drwxr-xr-x 4 root wheel 128 9 15 2019 php/
drwxr-xr-x 3 root wheel 96 9 15 2019 sbin/
drwxr-xr-x 4 root wheel 128 9 15 2019 var/
至此,
cli
模式下可以执行命令了,如
# 查看php版本
/usr/local/php/bin/php -v
# 查看php已安装启用模块
/usr/local/php/bin/php -m
#查看php详情
/usr/local/php/bin/php -i
为了方便执行
php
命令,我们可以把/usr/local/php/bin
目录配置到系统环境变量中,这样就可以省略路径执行php
命令。
- 7.配置
php-fpm
在
php
的源码目录中有两个ini
格式的配置文件,名称如下
-rw-rw-r-- 1 root wheel 71232 8 28 2019 php.ini-development
-rw-rw-r-- 1 root wheel 71504 8 28 2019 php.ini-production
两个配置文件分别是
php
提供的开发和生产环境的默认配置参数,我们根据自己需要拷贝即可,如
cp php.ini-production /usr/local/php/etc/
拷贝完成之后,我们进行一些常规配置修改
;关闭php版本输出
expose_php = Off
;设置错误级别
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
;设置php错误日志目录,目录必须存在,且www用户具有写权限
error_log = /data/logs/php_errors.log
[Date]
;根据自己需要设置时区
date.timezone = PRC
...
进行了一些自定义配置后,还需要配置
php-fpm
的配置
# 进入php的etc目录
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
此配置文件也可以根据自己需要进行自定义配置,开发环境保持默认即可。
php-fpm.conf
配置最后一行为include=/usr/local/php/etc/php-fpm.d/*.conf
,此处加载了/usr/local/php/etc/php-fpm.d
目录下所有conf
扩展名的配置,这个目录下一般放php-fpm
进程池配置。
配置
www
进程池
cd /usr/local/php/etc/php-fpm.d
mv www.conf.default www.conf
此配置也可以根据自己需要进行自定义配置,如
;监听地址和端口
listen = 127.0.0.1:9007
;fpm子进程管理方式
pm = dynamic
;每个子进程最大处理请求数,当处理请求数量超过配置值时,会创建新的子进程,旧的子进程退出。
pm.max_requests = 500
...
此处强调一下,
fpm
子进程管理方式有三种,此处面试的时候经常会被问到,本文简单的介绍一下。
pm 的可选值有static、dynamic、ondemand
static代表子进程的数量是固定的,由配置pm.max_children决定
dynamic代表数量是动态的,具体策略受这些配置影响。
pm.max_children:同一时间生存子进程的最大数量;
pm.start_servers:fpm启动的时候创建的子进程数量;
pm.min_spare_servers:处于空闲状态子进程的最小数量,当空闲的子进程数量小于配置值时,将有新的子进程被创建;
pm.max_spare_servers:处于空闲状态子进程的最大数量,当空闲子进程数量大于配置值时,将有子进程被杀掉。
ondemand代表按需创建,当fpm启动的时候不创建子进程,当有新的请求连接时,将会创建子进程。具体策略受这些配置影响。
pm.max_children:同一时间生存子进程的最大数量;
pm.process_idle_timeout:单位是s,子进程空闲时间超过配置值时,该子进程将被杀掉。
- 8.将
php-fpm
加入开机启动
centos6
操作系统
# 将php源码目录中的php-7.2.31/sapi/fpm/init.d.php-fpm拷贝到/etc/init.d/
cd ./php-7.2.31/sapi/fpm/
cp init.d.php-fpm /etc/init.d/php-fpm
#加入开机启动
chkconfig php-fpm on
#启动php-fpm
service php-fpm start
#关闭php-fpm
service php-fpm stop
#重启php-fpm
service php-fpm restart
#平滑重启php-fpm
service php-fpm reload
centos7
操作系统
# 将php源码目录中的php-7.2.31/sapi/fpm/php-fpm.service拷贝到/usr/lib/systemd/system
cd ./php-7.2.31/sapi/fpm/
cp php-fpm.service /usr/lib/systemd/system
#赋予执行权限
chmod +x /usr/lib/systemd/system/php-fpm.service
#加入开机启动
systemctl enable php-fpm
#启动php-fpm
systemctl start php-fpm
#关闭php-fpm
systemctl stop php-fpm
#重启php-fpm
systemctl restart php-fpm
#平滑重启php-fpm
systemctl reload php-fpm
到这里我们就成功安装了
php-fpm
2.安装扩展
在PHP的源码目录中有个ext目录,里面包含了PHP官方提供的扩展,如下
drwxrwxr-x 5 root root 4096 May 22 14:11 bcmath
drwxrwxr-x 3 root root 4096 Aug 28 2019 bz2
drwxrwxr-x 3 root root 4096 Aug 28 2019 calendar
drwxrwxr-x 3 root root 4096 Aug 28 2019 com_dotnet
drwxrwxr-x 4 root root 4096 May 22 14:11 ctype
drwxrwxr-x 4 root root 4096 May 22 14:11 curl
drwxrwxr-x 5 root root 4096 May 22 14:09 date
drwxrwxr-x 6 root root 4096 Aug 28 2019 dba
drwxrwxr-x 5 root root 4096 May 22 14:11 dom
drwxrwxr-x 4 root root 4096 Aug 28 2019 enchant
drwxrwxr-x 3 root root 4096 Aug 28 2019 exif
-rwxrwxr-x 1 root root 9415 Aug 28 2019 ext_skel
-rw-rw-r-- 1 root root 1165 Aug 28 2019 ext_skel_win32.php
drwxrwxr-x 5 root root 4096 May 22 14:11 fileinfo
drwxrwxr-x 5 root root 4096 May 22 14:12 filter
drwxrwxr-x 3 root root 4096 Aug 28 2019 ftp
drwxrwxr-x 5 root root 4096 May 22 14:12 gd
drwxrwxr-x 4 root root 4096 May 22 14:12 gettext
drwxrwxr-x 3 root root 4096 Aug 28 2019 gmp
drwxrwxr-x 5 root root 4096 May 22 14:12 hash
drwxrwxr-x 4 root root 4096 May 22 14:12 iconv
drwxrwxr-x 3 root root 4096 Aug 28 2019 imap
drwxrwxr-x 3 root root 4096 Aug 28 2019 interbase
drwxrwxr-x 21 root root 4096 Aug 28 2019 intl
drwxrwxr-x 4 root root 4096 May 22 14:12 json
drwxrwxr-x 3 root root 4096 Aug 28 2019 ldap
drwxrwxr-x 4 root root 4096 May 22 14:10 libxml
drwxrwxr-x 7 root root 4096 May 22 14:12 mbstring
drwxrwxr-x 3 root root 4096 Aug 28 2019 mysqli
drwxrwxr-x 3 root root 4096 May 22 14:14 mysqlnd
drwxrwxr-x 3 root root 4096 Aug 28 2019 oci8
drwxrwxr-x 3 root root 4096 Aug 28 2019 odbc
drwxrwxr-x 5 root root 4096 May 22 14:09 opcache
drwxrwxr-x 4 root root 4096 May 22 14:10 openssl
drwxrwxr-x 3 root root 4096 Aug 28 2019 pcntl
drwxrwxr-x 5 root root 4096 May 22 14:10 pcre
drwxrwxr-x 4 root root 4096 May 22 14:13 pdo
drwxrwxr-x 3 root root 4096 Aug 28 2019 pdo_dblib
drwxrwxr-x 3 root root 4096 Aug 28 2019 pdo_firebird
drwxrwxr-x 4 root root 4096 May 22 14:13 pdo_mysql
drwxrwxr-x 3 root root 4096 Aug 28 2019 pdo_oci
drwxrwxr-x 3 root root 4096 Aug 28 2019 pdo_odbc
drwxrwxr-x 3 root root 4096 Aug 28 2019 pdo_pgsql
drwxrwxr-x 4 root root 4096 May 22 14:13 pdo_sqlite
drwxrwxr-x 3 root root 4096 Aug 28 2019 pgsql
drwxrwxr-x 5 root root 4096 May 22 14:16 phar
drwxrwxr-x 4 root root 4096 May 22 14:13 posix
drwxrwxr-x 3 root root 4096 Aug 28 2019 pspell
drwxrwxr-x 3 root root 4096 Aug 28 2019 readline
drwxrwxr-x 3 root root 4096 Aug 28 2019 recode
drwxrwxr-x 4 root root 4096 May 22 14:13 reflection
drwxrwxr-x 4 root root 4096 May 22 14:13 session
drwxrwxr-x 3 root root 4096 Aug 28 2019 shmop
drwxrwxr-x 5 root root 4096 May 22 14:13 simplexml
drwxrwxr-x 3 root root 4096 Aug 28 2019 skeleton
drwxrwxr-x 3 root root 4096 Aug 28 2019 snmp
drwxrwxr-x 4 root root 4096 Aug 28 2019 soap
drwxrwxr-x 4 root root 4096 May 22 14:13 sockets
drwxrwxr-x 3 root root 4096 Aug 28 2019 sodium
drwxrwxr-x 6 root root 4096 May 22 14:13 spl
drwxrwxr-x 5 root root 4096 May 22 14:10 sqlite3
drwxrwxr-x 5 root root 12288 May 22 14:14 standard
drwxrwxr-x 3 root root 4096 Aug 28 2019 sysvmsg
drwxrwxr-x 3 root root 4096 Aug 28 2019 sysvsem
drwxrwxr-x 3 root root 4096 Aug 28 2019 sysvshm
drwxrwxr-x 4 root root 4096 Aug 28 2019 tidy
drwxrwxr-x 4 root root 4096 May 22 14:14 tokenizer
drwxrwxr-x 3 root root 4096 Aug 28 2019 wddx
drwxrwxr-x 4 root root 4096 May 22 14:14 xml
drwxrwxr-x 5 root root 4096 May 22 14:14 xmlreader
drwxrwxr-x 4 root root 4096 Aug 28 2019 xmlrpc
drwxrwxr-x 5 root root 4096 May 22 14:14 xmlwriter
drwxrwxr-x 3 root root 4096 Aug 28 2019 xsl
drwxrwxr-x 2 root root 4096 Aug 28 2019 zend_test
drwxrwxr-x 5 root root 4096 Aug 28 2019 zip
drwxrwxr-x 4 root root 4096 May 22 14:11 zlib
我们可以看到PHP官方我们提供了丰富的扩展,我们可以去PHP官网学习一下这些扩展的功能,另外除了以上这些扩展,也可以安装第三方开发者开发的扩展,如:
yaf
、yar
等。
PHP扩展的安装有多种方式,作者习惯采用
phpize
的方式安装,此文件位于PHP安装目录/usr/local/php/bin
中
phpize
安装扩展是由规律可循的,主要分为以下几步
- 1.进入待安装扩展目录,执行
/usr/local/php/bin/phpize
生成configure
文件,如
cd php-7.2.31/ext/ftp
/usr/local/php/bin/phpize
- 2.预编译,预编译过程需要制定
php-config
路径,路径位置为/usr/local/php/bin/php-config
,如
./configure --with-php-config=/usr/local/php/bin/php-config
- 3.编译安装,如
make && make install
安装完成后如下提示
...
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
以上提示了扩展被安装的目录
- 4.将刚刚安装的扩展配置到
php.ini
文件中,如
[ftp]
extension=ftp.so
此时执行
php -m
,如果能看到表示ftp
扩展在cli
模式下已经安装成功。注意:
fpm
模式下ftp
扩展并未生效,需要reload
才能生效。
通过
phpize
安装扩展的步骤就是以上4步,其他扩展都是大同小异,好了,你学会了吗?如果没有学会或者有什么疑问可以加到QQ群【621674014】,我们一起讨论学习。