目录
PHP的官网
stable稳定版, current最新版, release预览版
找到 .tar.bz2 格式的文件下载
复制下下载链接到 /usr/local/src 目录下 wget 下载
各种格式的解压缩
解压 .tar.gz —— tar zxvf xxx.tar.gz z是 .gz 文件格式的压缩。
解压 .tar.bz2 —— tar jxvf xxx.tar.bz2 j是 .bz2 文件格式的压缩。
解压 .tar.xz —— tar Jxvf xxx.tar.xz J是 .xz 文件格式的压缩。
提示错误 bzip2: Cannot exec: No such file or directory 意思 bzip2 文件不存在。
原因是没有安装bz2的解压缩,系统无法识别,yum安装一下再解压。
Documentation 文档项。
这个是官方安装文档,可以选语言。不知道装的步骤可以看看。
编译安装通常步骤:
1。configure 配置编译参数
make 编译(源码文件 ——> 二进制文件)源码文件我们可以编写,但是计算机只能识别转为二进制文件的
make install 安装
configure 编译参数:
prefix 指定安装路径
with-config-file-path 配置文件路径
enable-fpm 开启fpm 因为用的nginx所以必须开启
with-fpm-user 指定用户 with-fpm-group 指定组
with-mysql 关联mysql的路径(老版本) with-mysqli 关联mysql的路径(新版本)
with-pdo-mysql 和mysql通信的一种连接方式
with-mysql-sock 指定和mysql的socket
在PHP的文件夹下进行编译命令:
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-exif --enable-mbstring --with-pear --with-curl --with-openssl
报错一:
编译时候可能报错:缺少cc gcc ,这个是编译器。
yum install -y gcc 可解决
报错二:
No package 'libxml-2.0' found
缺少 libxml
yum list 可以查看符合名字的安装包都有哪些
devel 类型的是开发包。
编译时候都是需要用 devel 版本的
yum install -y libxml2-devel.x86_64 安装一下
报错三:
No package 'openssl' found
缺少 openssl
yum list |grep -i openssl
-i 作用是忽略大小写,因为直接搜索OpenSSL可能出的结果不是我们想要的。
yum install -y openssl-devel.x86_64 选择devel版本安装
报错四:
No package 'sqlite3' found
yum list|grep -i sqlite
可能yum list|grep -i sqlite3搜不到,就不要加数字
yum install -y sqlite-devel.x86_64
报错五:
No package 'libcurl' found
yum list |grep -i libcurl
yum install -y libcurl-devel.x86_64
报错六:
No package 'oniguruma' found
oniguruma是一个处理正则表达式的库,在编译安装php时,如果使用 --enable-mbstring 参数, 开启mbstring扩展,则会出现这个错误。
yum list 显示没找到
去网上找了个链接,但是内核版本号错了。
uname -r 可以看系统内核版本,就是系统发行的版本号,比如linux 7就是 el7
再试试解决yum list 没有搜到对应包问题。
可以用第三方扩展包 epel-release
EPEL的全称叫 Extra Packages for Enterprise Linux
属于红帽提供的扩展包,yum list普通找不到的可以试试装上这个,相当于一个第三方源。
安装完后就能yum list出来了。
yum install -y oniguruma-devel
编译成功了 。
但有一些 unrecognized 未识别的 ,可能是因为老版本需要,新版本不再需要这些参数了。编译时候可以去掉,当然写了也不会出错,只是会提醒而已。
2。 make 把源码通过gcc工具变成二进制包。
过程可能会持续几分钟之久.....
make完没问题会显示如下
可以用 echo $? 来确认下是否过程有出错 。 如果是0则无问题。
3。make install 安装
就是把这些二进制文件自动复制到 /usr/local/php-fpm 里面
如果出现mysql版本不符合的话,就去下对应mysql版本的二进制包,下完不用安装,只是编译时候需要用这个包里面文件而已。
解压后mysql目录改名,把下面2句原先的指向到新解压后的mysql目录位置.
--with-mysql=/usr/local/mysql (高版本已不需要设置)
--with-mysqli=/usr/local/mysql/bin/mysql_config
关于 卸载:
只需要把目录删除掉 rm -rf /usr/local/php-fpm/
安装过程中yum install 安装的包可以yum remove移除掉,不移除也没关系。
关于 配置文件:(LNMP环境)
进入到软件目录 /usr/local/php-fpm
bin —— 可执行程序
etc —— 配置文件
lib —— 库文件
sbin —— 可执行程序,php-fpm服务需要用到的脚本
var —— 有日志
一、php-fpm.conf 配置文件
etc 配置文件目录下:
php-fpm.conf.default 是默认存在的配置文件,但需要拷贝一份改名为 php-fpm.conf 配置文件,不然php服务缺少有效的配置文件,无法启动。
cp php-fpm.conf.default php-fpm.conf
二、php.ini 配置文件
在官网的documentation 文档项中也有描述:
不论是阿帕奇Apache的LAMP 还是 nginx 的LNMP 环境都需要此步。
在一开始的安装编译目录下可见 php.ini-development 和 php.ini-production
development 是 用作开发 的后缀
production 是 用作生产 的后缀
diff —— 比较文件内容中的差异
diff php.ini-development php.ini-production
86c86 就是86行同86行不同内容做出的对比
在 .ini 这个配置文件里的 ; 就相当于 # 表注释 的作用,所以 ;开头的都不需要注意。
对比可见development 和 production 的错误日志级别配置是不一样的
把 php-development.ini 复制到 /usr/local/php-fpm/etc/php.ini 下面
三、服务的启动文件
在编译目录下 /usr/local/src/php-8.1.8/sapi/fpm/php-fpm.service
php-fpm.service 是关于centos 7 system.d的
init.d.php-fpm 是关于centos 6 的
要先把文件放入/etc/init.d/ 下才能加入到服务列表,并且文件要有755权限。
centos 6的配法:
先放入服务的目录
cp /usr/local/src/php-8.1.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chkconfig --add php-fpm 在添加入服务列表
chkconfig --list 打印服务列表
需要注意给服务文件赋权755
chmod 755 php-fpm
启动服务
service php-fpm start
但是启动出错了。看看提示的配置文件的143行。
vim /usr/local/php-fpm/etc/php-fpm.conf
在vi的一般模式,直接 数字n + G 就可以让光标去到第n行。 显示行号是 :set nu
这一行是include了一个文件夹内的.conf配置文件。
四、www.conf 池文件
可看到这里面当前只有一个默认的文件,这个同样需要 拷贝+改名 去掉.default
这个www.conf 池文件 决定了监听的端口port 和 socket文件,用户名和组 等。
五、配置PHP使用的用户和组
这个在编译时候其实是指定了用户名和组名的。但是当前还没有实际创建。
在没有创建指定的用户情况下start启动,会报错如下。
useradd创建用户 php-fpm (创建用户同时会自动创建组 php-fpm)
再次启动,ps 检查服务,已成功启用。
netstat -lnp 查看监听端口
lnp 查看所有的监听通信端口,包括udp、tcp、socket
lntp 则是查看tcp的端口。
9000就是PHP服务的TCP端口。