1. PHP的编译安装
1.1 PHP的获取:
1.2 常用库和工具的安装
yum install -y gcc gcc-c++ make autoconf net-tools wget perl curl
yum install -y \
libxml2 libxml2-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel \
zlib zlib-devel glibc glibc-devel \
glib2 glib2-devel ncurses ncurses-devel \
openssl-devel bzip2 bzip2-devel libcurl-devel \
t1lib-devel gmp-devel libc-client-devel openldap-devel unixODBC-devel \
mysql-devel expat-devel libxslt-devel libmcrypt libmcrypt-devel libedit \
gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel readline-devel \
libxslt-devel expat-devel xmlrpc-c xmlrpc-c-devel bison-devel
1.3 编译 PHP
./configure \
--prefix=/usr/local/php7 \
--with-zlib-dir --with-freetype-dir --with-libxml-dir \
--with-curl --with-mcrypt --with-gd --with-jpeg-dir \
--with-mysqli --with-pcre-regex \
--with-gettext --with-xmlrpc --with-xsl --with-mhash \
--with-openssl --with-iconv --with-bz2 --with-zlib \
--enable-mbstring --enable-soap --enable-calendar \
--enable-inline-optimization --enable-sockets --enable-sysvsem \
--enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif \
--enable-bcmath --enable-gd-native-ttf --enable-ftp --enable-opcache \
--disable-rpath --enable-fpm --enable-zip
- enable 多代表不依赖外部库便可以直接编译, 而with大多需要依赖于第三方的lib
- 出现错误: Don’t know how to define struct flock on this system, set –enable-opcache=no, 多半是依赖库问题
vi /etc/ld.so.conf.d/local.conf # 编辑库文件
/usr/local/lib # 添加该行
ldconfig # 使之生效
# 编译安装时出现 undefined reference to `libiconv' 错误的解决方法
make ZEND_EXTRA_LIBS='-liconv'
编译安装后, 查看PHP的编译参数:
php -i | grep configure
1.4 PHP扩展的安装
- 获取源码包
- 进入插件目录:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
# 之后, 在php.ini文件中启用该扩展
# extension=xxxxxx
/usr/local/php7/bin/php --ri swoole
./configure --with-php-config=/usr/local/php7/bin/php-config --enable-openssl --enable-sockets
2. 配置PHP.ini并重启PHP
2.1 php-fpm运行用户进行设置
cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf
# 用户与组
user = www-data
group = www-data
# 隐藏PHP版本信息
expose_php = Off
# 查看php-fpm的status
pm.status_path = /status # 路径随你自己配置
# MySQL的socket设置
pdo_mysql.default_socket =
mysqli.default_socket =
# php-fpm进程池优化
pm = dynamic
pm.max_children = 15
pm.start_servers = 8
pm.min_spare_servers = 6
pm.max_spare_servers = 15
pm.max_requests = 500
php-fpm进程池开启进程有两种方式:
- 一种是: static (静态的), 直接开启指定数量的php-fpm进程,不再增加或者减少
- 一种是: dynamic (动态的), 开始时开启一定数量的php-fpm进程, 当请求量变大时, 动态的增加php-fpm进程数达到上限, 当空闲时自动释放空闲的进程数到一个下限。
(生产环境中, 根据服务器实际需求来进行调整)
要用到的一些参数 , 分别是 pm, pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers
pm表示使用哪种方式, 有两个值可以选择。staic或者dynamic
例: pm = dynamic
pm.max_children: 静态方式下指开启的php-fpm进程数量, 在动态方式下限定php-fpm的最大进程数。
pm.start_servers: 动态方式下的起始php-fpm进程数量。
pm.min_spare_servers: 动态方式空闲状态下的最小php-fpm进程数量。ps: spare(空闲的)
pm.max_spare_servers: 动态方式下空闲状态的最大php-fpm进程数量。
如果pm设置为staic, 那么只有pm.max_childern这个参数生效
如果pm设置为dynamic, 4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程, 然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
PS: 要求pm.start_servers的值在pm.min_spare_servers和pm.max_spare_servers之间
启动:
/usr/local/php/sbin/php-fpm
#手动打补丁的启动方式
/usr/local/php/sbin/php-fpm start
# php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
# php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
# 查看php-fpm进程数:
ps aux | grep -c php-fpm
2.2 查看php-fpm的status
首先设置php-fpm :
pm.status_path = /status # 路径随你自己配置
# 然后配置nginx
location /php_fpm_status {
allow 127.0.0.1;
#deny all;
fastcgi_pass unix:/tmp/php7-fpm.sock;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
# 重启php-fpm和nginx就行了
curl localhost/php_fpm_status
配置完成之后就可以通过curl访问了, 一般来说我们只要将设置的比最大进程数大一点就行了
php-fpm status字段的含义:
字段 | 含义 |
---|---|
pool | php-fpm pool的名称, 大多数情况下为www |
process manager | 进程管理方式, 现今大多都为dynamic, 不要使用static |
start time | php-fpm上次启动的时间 |
start since | php-fpm已运行了多少秒 |
accepted conn | pool接收到的请求数 |
listen queue | 处于等待状态中的连接数, 如果不为0, 需要增加php-fpm进程数 |
max listen queue | 从php-fpm启动到现在处于等待连接的最大数量 |
listen queue len | 处于等待连接队列的套接字大小 |
idle processes | 处于空闲状态的进程数 |
active processes | 处于活动状态的进程数 |
total processess | 进程总数 |
max active process | 从php-fpm启动到现在最多有几个进程处于活动状态 |
max children reached | 当pm试图启动更多的children进程时, 却达到了进程数的限制, 达到一次记录一次, 如果不为0, 需要增加php-fpm pool进程的最大数 |
slow requests | 当启用了php-fpm slow-log功能时, 如果出现php-fpm慢请求这个计数器会增加, 一般不当的Mysql查询会触发这个值 |
3. Composer 的使用
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库, 它会在你的项目中为你安装他们。
Composer 不是一个包管理器。是的, 它涉及 “packages” 和 “libraries”, 但它在每个项目的基础上进行管理, 在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此, 这仅仅是一个依赖管理。
3.1 安装 Composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer #将composer.phar文件移动到bin目录以便全局使用composer命令
如果上述方法由于某些原因失败了, 你还可以通过 php >下载安装器:
php -r "readfile('https://getcomposer.org/installer');" | php
这将检查一些 PHP 的设置, 然后下载 composer.phar 到你的工作目录中。这是 Composer 的二进制文件。这是一个 PHAR 包(PHP 的归档), 这是 PHP 的归档格式可以帮助用户在命令行中执行一些操作。
你可以通过 –install-dir 选项指定 Composer 的安装目录(它可以是一个绝对或相对路径):
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
3.2 使用 Composer
现在我们将使用 Composer 来安装项目的依赖。如果在当前目录下没有一个 composer.json 文件, 请查看基本用法章节。
要解决和下载依赖, 请执行 install 命令:
php composer.phar install
如果你进行了全局安装, 并且没有 phar 文件在当前目录, 请使用下面的命令代替:
composer install
继续 上面的例子, 这里将下载 monolog 到 vendor/monolog/monolog 目录。
除了库的下载, Composer 还准备了一个自动加载文件, 它可以加载 Composer 下载的库中所有的类文件。使用它, 你只需要将下面这行代码添加到你项目的引导文件中:
require 'vendor/autoload.php';
现在我们就可以使用 monolog 了!想要学习更多关于 Composer 的知识, 请查看“基本用法”章节。
3.3 镜像用法
系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
单个项目配置:
修改当前项目的 composer.json 配置文件:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
3.4 常见问题汇总
3.4.1 [Composer\Exception\NoSslException]
composer config secure-http false
composer config -g secure-http false
composer config -g -- disable-tls true
composer config repo.packagist composer https://packagist.phpcomposer.com
composer config -g repo.packagist composer https://packagist.phpcomposer.com