php自编译安装
一开始安装PHP的时候,我们并不知道需要哪些扩展,所以只有等到我们真正用到的时候才想办法去安装。
安装PHP扩展最简单的办法就是
sudo apt-get install php5-xxx
但有的时候并非我们所愿,源里面并没有我们需要的扩展,这时候就需要我们下载源码自己编译安装了。
这篇文章中我将介绍在本地linux平台下编译安装PHP扩展的方法。
现在网站根目录下创建 index.php 打印基本的配置信息,以验证我们是否安装成功。
配置编译环境
我们需要安装一些编译必须的库,还有 php-dev 版本
Ubuntu
sudo apt-get install php5-dev php5-mysql gcc libpcre3-dev
Fedora
sudo yum install php-devel php-mysqlnd gcc libtool
RHEL
sudo yum install php-devel php-mysql gcc libtool
Suse
yast2 -i php5-pear php5-devel php5-mysql gcc
安装扩展
PHP有两种可供安装的扩展:一种是PHP原生的但是默认没有安装的,另一种的第三方开发的扩展。
下面依次介绍两种扩展的安装方法:
安装之前我们需要一份和当前机器上相同版本的PHP源码
cd code
wget http://cn2.php.net/distributions/php-5.5.9.tar.bz2
tar xvjf php-5.5.9.tar.bz2
cd php-5.5.9
前往此处 下载相应的源码包。
在 /ext 目录下面可以看到所有PHP原生的扩展。
安装原生扩展
以 PHP-intl 为例,这是PHP国际化的扩展。
为了安装这个扩展我们需要先安装ICU 库
sudo apt-get install icu-devtools icu-doc libicu-dev libicu52 libicu52-dbg
ICU 安装成功之后进入/ext/intl 目录:
cd intl
phpize
./configure --enable-intl
make
sudo make install
下面解释一下上面的每个命令:
phpize : 是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
./configure --enable-intl: 配置编译环境,相当于告诉编译器编译PHP源码的时候加上intl这个扩展。
make: 将会把源码编译成 intl.so
make install : 将会把 intl.so 移动到当前安装的 PHP 的扩展目录。
接下来我们要做的就是在php.ini中启用这个扩展,这一步将会在最后给出示例。
安装第三方扩展
将以这个 扩展为例,这个扩展主要实现了PHP识别条形码的功能。
先安装必要的依赖
sudo apt-get install pkg-config
git clone https://github.com/mongodb/mongo-php-driver
cd mongo-php-driver
phpize
./configure
make
sudo make install
将会生成一个文件,将其拷贝到PHP的扩展目录下面。
启用扩展
在php.ini中启用扩展的方式有很多:
直接在php.ini文件中添加 extension=mongo.so,这是最简单直接的方法。
也可以单独建一个ini文件,然后在php.ini中包含这些文件就可以了。
下面介绍一下第二种方法:
cd `/etc/php5/mods-available`
这个目录里可以放新建的ini文件,然后执行
sudo touch mongo.ini
echo "extension=mongo.so" | sudo tee -a mongo.ini
sudo touch intl.ini
echo "extension=intl.so" | sudo tee -a intl.ini
上面的命令将会创建ini文件,并且写如相应的配置信息。
然后执行下面的命令启用扩展即可(需要安装 php5enmod 工具):
sudo php5enmod mongo
sudo php5enmod intl
如果未安装 php5enmod 工具,则需要手动配置:
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/cli/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/cli/conf.d/intl.ini
ln -s /etc/php5/mods-available/mongo.ini /etc/php5/fpm/conf.d/mongo.ini
ln -s /etc/php5/mods-available/intl.ini /etc/php5/fpm/conf.d/intl.ini
最后在执行一下重启操作就可以了:
sudo service nginx restart
sudo service php5-fpm restart
2. centos7系统源码编译安装PHP7.3.5版本
新增系统用户组和用户:
下载 PHP7.3.5
[root@localhost ~]# mkdir devdir
[root@localhost ~]# cd devdir/
[root@localhost devdir]# wget https://www.php.net/distributions/php-7.3.5.tar.gz
-bash: wget: 未找到命令
[root@localhost devdir]# rpm -qa|grep wget
[root@localhost devdir]# yum -y install wget
[root@localhost devdir]# rpm -qa|grep wget
wget-1.14-18.el7.x86_64
下载PHP7 解压 编译
wget -c https://downloads.php.net/~cmb/php-7.3.4.tar.gz
编译参数解释
--with-fpm-user=webu --with-fpm-group=webg 添加PHP运行用户和用户组
配置信息出错:
下载gcc软件编译器 yum install -y gcc
configure: error: libxml2 not found. Please check your libxml2 installation.
下载libzip-1.5.2.tar.gz
https://libzip.org/download/libzip-1.5.2.tar.gz
解决libzip 和cmake版本问题
重新配置PHP7编译环境参数
libzip-1.5.2 无法安装,已经取消了。
提示off_t类型没有定义 undefind,解决方法:
编译安装
测试PHP是否安装成功
转载自:https://my.oschina.net/u/4127346/blog/3047778
3. php-fpm.conf.default 5.3.27 在哪
首页 > 运维 > linux 下编译安装 php-5.3.27
linux 下编译安装 php-5.3.27
1.环境说明
ubuntu 12.04
源码存储路径 /home/wzw/workstation/src
安装路径 /home/wzw/workstation/env
切换到工作目录 cd /home/wzw/workstation/src/
2.安装
wget http://cn2.php.net/distributions/php-5.3.27.tar.gz
sudo mkdir -p /home/wzw/workstation/env/php5
sudo tar -zxvf php-5.3.27.tar.gz
cd php-5.3.27
sudo ./configure --prefix=/home/wzw/workstation/env/php5 --with-config-file-path=/home/wzw/workstation/env/php5/etc/php.ini --with-mysql=/home/wzw/workstation/env/mysql5 --with-pdo-mysql=/home/wzw/workstation/env/mysql5 --enable-magic-quotes --enable-static --enable-mbstring --enable-sockets --enable-zip --with-curl --with-libxml-dir --enable-fpm
#【出错:configure: error: xml2-config not found. Please check your libxml2 installation.
# 解决:sudo apt-get install libxml2-dev】
#【出错:You've configured multiple SAPIs to be build. You can build only |
# | one SAPI mole and CLI binary at the same time.
# 解决:编译不带这个参数--with-apxs2=/home/wzw/workstation/env/apache2/bin/apxs 】
#【出错:configure: error: Please reinstall the libcurl distribution -
# easy.h should be in <curl-dir>/include/curl/
# 解决:sudo apt-get install libcurl4-openssl-dev】
sudo cp php.ini-proction ../../env/php5/etc/php.ini
sudo cp /home/wzw/workstation/env/php5/etc/php-fpm.conf.default /home/wzw/workstation/env/php5/etc/php-fpm.conf
sudo vim /home/wzw/workstation/env/php5/etc/php-fpm.conf
# 找到 ;pid = run/php-fpm.pid 【大概25行,去掉前面的分号】
sudo vim /home/wzw/workstation/env/nginx/conf/nginx.conf
# 在 location 中的 index 加上index.php,(大概是在45行)如:
# index index.php index.html index.htm;
# 去掉 loction ~ \.php$ { ... } 这个模块的注释 #
# 并把其中的 scripts 改成 $document_root
3.运行
cd /home/wzw/workstation/env/php5
sudo ./sbin/php-fpm -y ./etc/php-fpm.conf
# 【报错:[25-Sep-2013 11:55:21] ERROR: [pool www] cannot get gid for group 'nobody'
# [25-Sep-2013 11:55:21] ERROR: FPM initialization failed
# 解决:打开etc/php-fpm.conf(大概140行),把nobody改成www-data
# 】
4.测试
./bin/php -r "echo 2+4;"
输出 6 说明安装成功!
4. PHP8、FPM及部分扩展编译安装
本着能懒则懒的原则,之前我都是宝塔、lnmp脚本等“一键”
再不济也得来个 apt/yum install php
什么?源码 make install ? 编译参数一言难尽,劝退劝退...我只是想要个开发环境而已
没关系!我来整理一下常用模块以及参数!环境为 ubuntu/debian
检查压缩包的完整性,与官网 sha256比较
安装以下包
官方的拓展分类
根据需要的模块添加其后对应的参数
包含常用模块,可以直接使用
编译并安装后
复制 php.ini 到默认目录 /usr/local/lib/
检查 php安装是否正确
复制 fpm 配置文件、运行服务文件
www.conf php-fpm.conf php-fpm.service
修改 fpm 用户和组,默认为nobody
修改服务文件,取消只读 不然日志不能读写无法启动
设置自启动并运行
本地起服务测试
No package 'libxml-2.0' found
No package ‘sqlite3‘ found
configure: WARNING: unrecognized options: –with-gd
No package 'zlib' found
No package 'libpng' found
No package 'oniguruma' found
No package 'libcurl' found
No package 'libsystemd' found
No package 'openssl' found
No package 'libzip' found
5. 如何在虚拟机上搭建php
虚拟机是window系统还是 linux系统。
window系统就很简单了,直接下载一个集成环境,就可以运行了
linux 系统就要稍微麻烦点
1. php下载以及安装
下载: wget http://am1.php.net/distributions/php-7.3.2.tar.gz
解压: tar -zxvf php-7.3.2.tar.gz
进入目录开始编译安装:
./configure --prefix=/opt/soft/php --enable-fpm
下面是直接把常用的扩展安装好,免得后面在一个一个安装(推荐)
./configure --prefix=/opt/soft/php --with-curl --with-mysqli --with-openssl --with-pdo-mysql --enable-fpm
make
sudo make install
设置快捷访问方式: sudo cp /opt/soft/php/bin/php /usr/local/bin/
把php配置文件放在正确的位置
确认正确位置:php -i | grep php.ini
在下载的安装包中将php配置文件移动过来: sudo cp /opt/packages/php-7.3.2/php.ini-proction /opt/soft/php/lib/php.ini
ps:以后可以通过 php --ini 查看文件所在位置
2. nginx下载以及安装
和上面php一样的步骤,下载--解压--编译--安装
wget http://nginx.org/download/nginx-1.14.2.tar.gz
./configure --prefix=/opt/soft/nginx --sbin-path=/opt/soft/nginx/sbin/nginx --conf-path=/opt/soft/nginx/config/nginx.conf --error-log-path=/opt/soft/nginx/logs/error.log --pid-path=/opt/soft/nginx/logs/nginx.pid --http-log-path=/opt/soft/nginx/logs/access.log --with-http_stub_status_mole --with-http_ssl_mole
sudo make && make install
设置快捷访问方式: sudo cp /opt/soft/nginx/sbin/nginx /usr/local/bin/
简单配置nginx(详细配置后面再重新开文章写),然后浏览器直接访问ip就能访问了(这个时候只能访问html,访问php是直接下载文件)
开启nginx: sudo nginx(sudo nginx -s reload 重启nginx), 查看是否开起nginx: sudo netstat -anp | grep 80(端口号)
3. 配置nginx支持php
nginx不能直接和php通信,需要借助FastCGI(高速地在HTTP服务器和动态脚本语言间通信的接口),需要用到php-fpm(FastCGI Process Manager:FastCGI进程管理器, 他的具体概念可以参照这里搞清楚php-FPM到底是什么),这也是为什么在编译安装php的时候需要带--enable-fpm这个扩展的原因.
I. 启动php-fpm
进入到 /opt/soft/php/etc 这个目录将php-fpm.conf.default改名为php-fpm.conf,编辑他查看最后一行
然后进入最后一行指向php-pm.d目录,将www.conf.default改名成www.conf,并编辑成对应账号,我这里是xunan
然后将/opt/soft/php/sbin/php-fpm设置快捷访问方式,并启动php-fpm,也就是执行下面两个命令
sudo cp /opt/soft/php/sbin/php-fpm /usr/local/bin/ sudo php-fpm
ps: 重启php-fpm: 先ps aux | grep php-fpm,然后kill掉对应的进程
II. 配置nginx支持php
具体配置:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
按照上面配置完成后,在配置文件的root目录下建立一个index.php,编辑
然后重启nginx(sudo nginx -s reload),在浏览器ip访问
6. 如何在编译好的PHP环境中安装PHP扩展模块
1、先进入php解压缩后的源码包中,找到要安装的扩展模块的目录。
[root@redhat5 sockets]# cd /home/soft/php-5.2.12/ext/sockets
在sockets目录下面以绝对路径运行phpize程序,这时会自动生成sockets的configure程序,在sockets目录下面可以看到。
[root@redhat5 sockets]# /home/webserver/php5.2.12/bin/phpize
2、进行编译安装
[root@redhat5 sockets]# ./configure --with-php-config=/home/webserver/php5.2.12/bin/php-config
[root@redhat5 sockets]#make
[root@redhat5 sockets]#make install
执行完make install屏幕上会提示sockets.so存放的路径,然后把它复制到php的extensions目录中,例如我的路径为 /home/webserver/php5.2.12/lib/php/extensions
3、修改php.ini文件
找到extension_dir = "./" 这行,修改为:
extension_dir = "/home/webserver/php5.2.12/lib/php/extensions/"
然后再新增加一行:
extension=sockets.so
4、重启apache即可生效。 希望能帮到你,我还要抓紧时间自己在后盾人自己学习呢,一起加油吧(づ ̄ ³ ̄)づ