PHP软件版本5.6.39
一、PHP的编译安装管理:
① : php编译安装,php的编译安装依赖的库比较多,编译安装会稍微难一点
yum -y install epel-release [安装epel源]
yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel openldap openldap-devel libmcrypt libmcrypt-devel
【安装RZ上传软件:yum install lrzsz -y】XSHELL好使,putty使用后无反应。 上传命令:rz -E
② :tar -zxf php-5.6.39.tar.gz
cd php-5.6.39
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-ctype --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-fpm
make
make install
cp php.ini-production /usr/local/php/etc/php.ini 源码安装时我们指定配置文件放在/usr/local/php/etc,我们把默认的配置文件改名并放到相应目录。
【编译安装说明】:
--prefix=/usr/local/php #安装路径
--with-config-file-path=/usr/local/php/etc #配置文件路径
--enable-fpm #需要支持fpm,nginx是通过fpm来调用php程序的
③ php安装验证: cd /usr/local/php/bin/
./php –v
bin目录放置PHP的程序,像nginx一样,
etc目录放置php的配置文件,
include目录放置头文件,
Lib目录放置一些包和一些依赖的库,
sbin目录放置php-fpm var目录放置日志等
④ php的管理命令
/usr/local/php/bin/php -i|grep ini #查看配置文件路径
/usr/local/php/bin/php -m #查看php的模块
/usr/local/php/bin/php -i|grep configure #查看php的环境检查参数,网站搬家要用到
二、PHP的日志和动态安装扩展模块:
① cd /usr/local/php/bin vim php.ini
php错误日志配置:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
记录所有的日志,不包含过时函数提示和php严格语法提示,通常也会忽略E_NOTICE的报错。
php错误日志记录到文件
log_errors = On
log_errors_max_len = 1024
error_log = /tmp/php_errors.log
错误日志直接输出到屏幕,注意生产环境需要关闭
display_errors = On
php需要更改时区配置
date.timezone = PRC
PRC的英文含义是 People’s Republic of China
【php的模块再说明:/usr/local/php/bin/php -m #需要gd模块才能绘图,需要mysql相关模块才能操作mysql】
②动态安装模块【即后期安装所需的功能模块】
首先需要安装动态模块的包: yum install autoconf –y
其次需要使用动态扩展工具: /usr/local/php/bin/phpize #php动态扩展模块的工具
假设php需要操作redis的话,可以动态安装php redis模块,不需要重新编译php。
去pecl网站下载redis的扩展 【网址 https://pecl.php.net/package/redis】
tar -zxvf redis-4.2.0.tgz
cd redis-4.2.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config make && make install
③php配置文件里添加redis.so,并检查redis扩展有没有安装成功
vim /usr/local/php/etc/php.ini
配置文件添加extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/redis.so
/usr/local/php/bin/php -m
三、PHP-fpm的配置和管理:
①php-fpm作用:nginx调用php程序是通过php-fpm这个接口程序来的,php-fpm专门为nginx+php的架构开发。
②php-fpm的默认配置样例文件/usr/local/php/etc/php-fpm.conf.default
提取样例配置文件内容 cat /usr/local/php/etc/php-fpm.conf.default|egrep -v ‘^;|^$‘
[global]
[www]
user = nobody
group = nobody
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
③php-fpm的默认配置文件位置 /usr/local/php/etc/php-fpm.conf; PHP-FPH启动时读取该文件,需要自己创建配置文件,默认安装完成后是没有的。
vim /usr/local/php/etc/php-fpm.conf 将提取的步骤二的内容复制到该文件中。
④ php-fpm的启动和关闭
/usr/local/php/sbin/php-fpm -t #先检查配置文件
/usr/local/php/sbin/php-fpm #启动php-fpm
pkill -9 php-fpm #闭关php-fpm
⑤ php-fpm加入systemctl管理/usr/lib/systemd/system/php-fpm.service
vim /usr/lib/systemd/system/php-fpm.service 复制以下内容:
[Unit]
Description=php-fpm
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=pkill -9 php-fpm
[Install]
WantedBy=multi-user.target
管理php-fpm
systemctl enable php-fpm #开机启动php-fpm
systemctl start php-fpm #启动php-fpm
默认启动检查:
ps auxf|grep php-fpm
netstat -tulnp|grep php-fpm
⑥ 默认配置说明
user、group代表php-fpm运行的用户和组
listen表示fpm监听的方式,默认使用的是网络的监听方式,还有一种socket的监听方式
socket监听的配置方式
listen = /dev/shm/php-fpm.sock
listen.owner = www
listen.group = www
两种监听方式的选择
如果nginx+php-fpm是在同一台机器的话,建议使用sock的方式
如果nginx+php-fpm在不同机器的话,只能选择网络方式
php-fpm的工作进程数的配置
pm = dynamic #pm可以配置php-fpm的进程管理方式,有动态dynamic或者静态static两种方式
pm的相关配置:可配置最大php-fpm的数量 pm.max_children = 5
启动需要多个fpm pm.start_servers = 2
fpm最小要空闲几个 pm.min_spare_servers = 1
fpm最大要空闲几个 pm.max_spare_servers = 3 pm.min_spare_servers = 1
⑦nginx+fpm的两种结合方式:
⑦->①第一种,使用网络连接的方式。php-fpm监听在127.0.0.1:9000
[global]
[www]
user = www
group = www
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
nginx使用网络的方式连接php-fpm
user www; #更改用户 【特别注意:nginx+php-fpm整合,启动这两个进程的用户名一定要一致!!!】
index index.html index.htm index.php; #默认的网页展现增加一个index.php
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
测试nginx+fpm网络连接方式是否成功:浏览器访问一个PHP页面,如能正常显示表明配置成功。
⑦->②第二种,使用socket的方式。php-fpm监听在/dev/shm/php-fpm.sock
[global]
[www]
user = www
group = www
listen = /dev/shm/php-fpm.sock
listen.owner = www listen.group = www
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
nginx使用socket的方式连接php-fpm
user www; #更改用户 【特别注意:nginx+php-fpm整合,一】
index index.html index.htm index.php; #默认的网页展现增加一个index.php
location ~ .php$ {
root html;
fastcgi_pass unix:/dev/shm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
测试nginx+fpm的socket方式是否成功
⑧nginx+fpm的日志说明:
客户访问一个php程序的过程: 客户 -> nginx -> php-fpm -> nginx -> 客户
nginx的upstream_response_time观察调用php程序花费的时间 $upstream_response_time $request_time
nginx的error日志说明:error_log logs/error.log notice;
php的错误日志显示打开的话,会直接显示网页上:display_errors = On 【 /usr/local/php/etc/php.ini】
php-fpm的错误日志记录 【/usr/local/php/etc/php-fpm.conf】
[global]
error_log = /tmp/fpm_error_log
log_level = notice
php-fpm的慢日志,php只要处理超过1s就会有记录
slowlog = /tmp/phpslow.log
request_slowlog_timeout = 1s
原文地址:http://blog.51cto.com/python20101030/2341418