Ubuntu 16.04下安装PHP 7过程详解


Posted in PHP onMarch 28, 2017

前言

最近由于换了硬盘重装了(升级)系统到Ubuntu16.04之后,开发环境也要重新安装,其实16.04源里面默认的PHP版本就是7.x,但是有个问题就是没有OCI扩展,有项目需要使用到Oracle数据库。

准备编译环境

由于全部编译太过于繁琐,而且很多依赖会有问题,所以我们选择另外一种方案,能使用apt-get安装都使用apt-get安装。不能使用apt-get才自己编译,这样可以节省大量的时间。因为有的依赖真的是很头疼。

由于在Ubuntu16.04上,默认的PHP版本就是7.x。由于我们要使用Apache2.4+PHP,所以安装如下模块即可直接解析PHP。

sudo apt-get install php-dev libapache2-mod-php

这样最基本的模块就安装好了,如果还需要其他的模块,可以通过apt-get快捷安装;比如还需要MySQL和mb_string相关的模块。

sudo apt-get install php-mysql php-mbstring

这样就会自动安装好相关的模块。

安装Oracle Client

由于要编译OCI扩展,我们需要Oracle客户端,这里我们下载Oracle Instant Client,选择Instant Client for Linux x86-64 basic版本下载。

另外要编译OCI必须还需要instant client SDK 包,下载解压之后合并到Base。

给出的网页最后面也有安装步骤,这里简述一下

  • 解压zip包,放置到某个目录下
  • 为当前版本的Instant Client创建合适的链接
  • 设置环境变量
sudo unzip instantclient-basic-linux.x64-12.1.0.2.0.zip
sudo unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip
sudo mv instantclient_12_1/ /opt/oracle/
cd /opt/oracle/instantclient_12_1/
# 建立符号链接
sudo ln -s libclntsh.so.12.1 libclntsh.so
sudo ln -s libocci.so.12.1 libocci.so
# 打开 /etc/profile 在最后面加入
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_1:$LD_LIBRARY_PATH
export PATH=/opt/oracle/instantclient_12_1:$PATH
# 最后source一下,使配置生效
source /etc/profile

下载PHP源码

首先我们要确定已经安装的PHP的版本,由于使用apt-get安装,版本可能不是PHP官网放的最新的版本,使用下面的 命令既可查看

php -v

发现我的安装的版本是7.0.4,那么我们对应的下载PHP-7.0.4版本的源码。

两种方式可以下载到源码。

  1. 从官网下载源码包
  2. 从GitHub 仓库 clone

官网下载源码很简单,打开php.net的Download页面,选择要下载的版本。或者从GitHub仓库clone指定版本(或者先clone再checkout想要的版本),如

git clone -b PHP-7.0.4 https://github.com/php/php-src && cd php-src

编译OCI8/PDO_OCI

经过如上的步骤我们已经进入到下载的PHP源码根目录了,那么我们开始编译。

编译oci8

进入到扩展oci8的源码目录,使用phpize

cd ext/oci8
phpize
./configure --with-oci8=instantclient,/opt/oracle/instantclient_12_1
sudo make

执行完上面的步骤,应该会生成一个modules文件夹,里面就有我们想要的extension。

编译pdo_oci

步骤和编译oci8是一样的,但是configure参数不一样,所以还是写一下。

cd ../../ext/pdo_oci
phpize
# 最后面要指定版本号
./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient_12_1,12.1
sudo make

结果也和上面一样。

使用我们编译的扩展

首先我们要知道现行PHP的ext目录在哪里

php -i | grep "extension_dir"

我这里显示的是extension_dir => /usr/lib/php/20151012 => /usr/lib/php/20151012,那么我们先把我们编译的扩展复制到/usr/lib/php/20151012

# 先进入对应的modules目录下
cp oci8.so /usr/lib/php/20151012
cp pdo_oci.so /usr/lib/php/20151012

然后我们还要在php.ini中添加相关配置项,首先也要知道php.ini的位置

p -i | grep "Configuration File"

打印出了如下信息

Configuration File (php.ini) Path => /etc/php/7.0/cli
Loaded Configuration File => /etc/php/7.0/cli/php.ini

这样我们就知道了php.ini的位置,但是这个是CLI(命令行接口)的配置文件,我们需要使用Apache的(CGI)。我们到目录/etc/php/7.0/下发现还有一个名为apache2的目录,里面也有php.ini文件,那么我们编辑apache2目录下的php.ini

sudo vim php.ini

在里面加入

extension=oci8.so
extension=pdo_oci.so

最后重启Apache

systemctl restart apache2.service

查看一下phpinfo()发现OCI和PDO_OCI均已安装。到这里安装已经全部完成了。

Linux小技巧

在安装和查资料的过程中发现了一下很实用的命令,也把它们记录下来。

# 重启某个服务
sudo systemctl restart apache2.service
# 查看某个服务的状态
sudo systemctl status apache2.service
# 查看php相关的模块(其他的类似)
apt-cache search php- | less
# 具体查看某个模块的详细信息
apt-cache show package_name

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
加强版phplib的DB类
Mar 31 PHP
PHP的博客ping服务代码
Feb 04 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
PHP中JSON的应用技巧
Oct 10 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 PHP
php传值方式和ajax的验证功能
Mar 27 #PHP
php实现微信扫码支付
Mar 26 #PHP
PHP实现留言板功能的详细代码
Mar 25 #PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 #PHP
thinkPHP5.0框架开发规范简介
Mar 25 #PHP
thinkPHP5.0框架安装教程
Mar 25 #PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 #PHP
You might like
笑谈配置,使用Smarty技术
2007/01/04 PHP
discuz目录文件资料汇总
2014/12/30 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
Pycharm中如何关掉python console
2020/10/27 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
sealed修饰符是干什么的
2012/10/23 面试题
上课睡觉检讨书
2014/01/28 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
go xorm框架的使用
2021/05/22 Golang
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS