PHP7 编译安装
本文介绍了手动编译安装 PHP 的具体步骤。
修订记录
- Debian9 Ubuntu17.04 出现错误请详细查看后边说明(PHP 7.1.9 不会报错了)。出现错误强烈建议使用 https://stackoverflow.com 进行搜索!
macOS
$ brew tap homebrew/homebrew-php
$ brew install php71
安装依赖包
RedHat
$ yum install gcc
gcc-c++
libxml2
libxml2-devel
openssl
openssl-devel
libcurl
libcurl-devel
freetype
freetype-devel
libjpeg
libjpeg-devel
libpng
libpng-devel
libxslt
libxslt-devel
systemd-devel
libicu-devel
libedit-devel
Debian
$ sudo apt install autoconf
dpkg-dev
file
libc6-dev
make
pkg-config
re2c
gcc g++
libedit-dev
zlib1g-dev
libxml2-dev
libssl-dev
libsqlite3-dev
libfreetype6-dev
libxslt1-dev
libcurl4-gnutls-dev
libpq-dev
libmemcached-dev
libzip-dev
libpng-dev
libjpeg-dev
# ubuntu 16.04 没有 libargon2-0 ,17.04 + 才有,php 7.2.0 新特性
# libargon2-0
编译
$ ./configure --prefix=/usr/local/php
--with-config-file-path=/usr/local/php/etc
--with-config-file-scan-dir=/usr/local/php/etc/conf.d
--disable-cgi
--enable-fpm
--with-fpm-user=www-data
--with-fpm-group=www-data
--enable-ftp
--with-curl
--with-gd
--with-gettext
--with-iconv-dir
--with-kerberos
--with-libedit
--with-openssl
--with-pcre-regex
--with-pdo-mysql
--with-pdo-pgsql
--with-xsl
--with-zlib
--with-mhash
--with-png-dir=/usr/lib
--with-jpeg-dir=/usr/lib
--with-freetype-dir=/usr/lib
--enable-mysqlnd
--enable-bcmath
--enable-libxml
--enable-inline-optimization
--enable-gd-native-ttf
--enable-gd-jis-conv
--enable-mbregex
--enable-mbstring
--enable-opcache
--enable-pcntl
--enable-shmop
--enable-soap
--enable-sockets
--enable-sysvsem
--enable-xml
--enable-zip
--enable-calendar
--enable-intl
--enable-exif
# ubuntu 16.04 没有 libargon2-0 ,17.04 + 才有,php 7.2.0 新特性
# --with-password-argon2
若编译 Apache
模块请添加 --with-apxs2=/usr/local/apache2/bin/apxs
参数。
注意:
Apache
模块方式运行PHP
太古老,请采用新的PHP-FPM
模式!https://www.khs1994.com/php/development/apache-php.html
错误排查
configure: error: no acceptable C compiler found
$ yum install -y gcc gcc-c++
$ sudo apt install gcc g++
configure: error: xml2-config not found. Please check your libxml2 installation.
$ yum install libxml2 libxml2-devel
$ sudo apt install libxml2-dev
configure: error: Cannot find OpenSSL…
$ yum install openssl openssl-devel
$ sudo apt install libssl-dev
configure: error: png.h not found.
$ yum install libcurl libcurl-devel
$ sudo apt install libcurl4-openssl-dev
configure: error: freetype-config not found.
$ yum install freetype freetype-devel libjpeg libjpeg-devel libpng libpng-devel
$ sudo apt install libfreetype6-dev
configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
$ yum install libxslt libxslt-devel
$ sudo apt install libxslt1-dev
Debian9
具体查看参考链接2
checking for cURL in default path not found
configure: error: Please reinstall the libcurl distribution easy.h should be in /include/curl/
$ sudo apt install libcurl4-gnutls-dev
注意,目前安装该包不能解决问题!需要建立软链接!!
$ sudo ln -s /usr/include/x86_64-linux-gnu/curl /usr/local/include/
编译选项改为 --with-curl=/usr/local
安装
$ make -j "$(nproc)"
$ sudo make install
加入环境变量
编辑 ~/.bash_profile
export PATH=/usr/local/php/sbin:/usr/local/php/bin:$PATH
编辑 /etc/sudoers
注意:必须编辑此文件,否则 sudo 会找不到命令。
Defaults secure_path="/usr/local/php/bin:/usr/local/php/sbin:..."
升级 pecl
$ sudo pecl update-channels
用户组
PHP-FPM 系统默认用户与用户组
Debian:www-data
RedHat: apache
复制配置文件
将源文件中的 php.ini-development
复制到安装目录中的 etc
子目录 ,并改名为 php.ini
。
在源文件夹中执行以下命令,复制 systemd
文件。
$ cp sapi/fpm/php-fpm.serviceq /etc/systemd/system/
$ systemctl daemon-reload
将安装目录中的 etc
子目录中的 php-fpm.conf.default
复制为 php-fpm.conf
。
将安装目录中的 etc/php-fpm.d
子目录中的 www.conf.default
复制为 www.conf
。
systemd
已经在上一步中配置,这里贴出文件内容,便于学习。
# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades. If you want to customize,
# the best way is to use the "systemctl edit" command.
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=notify
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动
$ sudo php-fpm
# 或者使用 system
$ sudo systemctl daemon-reload
$ sudo systemctl start php-fpm
# 也可以设置开机自启动
$ sudo systemctl enable php-fpm
More Information
- https://segmentfault.com/a/1190000005363212
- https://stackoverflow.com/questions/42300393/php-7-1-2-compilation-and-libcurl-error
- 后缀数组(一堆干货)
- POJ 1741 Tree(树的点分治,入门题)
- hihoCoder 1039:字符消除(字符串处理)
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
- hihoCoder 1051 补提交卡(贪心,枚举)
- LCA 最近公共祖先
- RMQ问题(线段树算法,ST算法优化)
- 统计0到n之间1的个数[数学,动态规划dp](经典,详解)
- Selenium2+python自动化40-cookie相关操作
- 【干货】PyTorch实例:用ResNet进行交通标志分类
- 2017年浙江理工大学程序设计竞赛校赛 题解&源码(A.水, D. 简单贪心 ,E.数论,I 暴力)
- Selenium2+python自动化41-绕过验证码(add_cookie)
- C语言求最小公倍数和最大公约数三种算法(经典)
- Selenium2+python自动化47-判断弹出框存在(alert_is_present)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 用Python网络爬虫来看看最近电影院都有哪些上映的电影
- 使用 Azure Blob Stoage 实现一个静态文件服务器
- java学习--反射详解
- Redis中的管道Pipeline操作
- 查看YARN任务日志的几种方式
- 简易数字频率计(verilog HDL设计)(2020维护版本)
- C++核心准则CP.111:如果真的需要好双重检查锁,使用惯用模式
- C++核心准则CP.200:使用volatile只能表明该变量是非C++内存
- C++核心准则E.2:通过抛出异常来表明函数无法执行指定的任务
- C++核心准则E.3:异常应该只用于错误处理
- [Go] GO语言实战-gin框架项目实现中英文切换
- [Go] Go语言实战-基于websocket浏览器通知的实现
- 快10年的老前端了,我还分不清 slice 和 splice,这到底是谁的锅
- 第4章 Jenkins系统用户认证配置管理
- 回答公众号留言的2个关于相关性分析的问题