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将向Java靠拢
Oct 09 PHP
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
PHP生成Gif图片验证码
Oct 27 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php模拟post提交数据的方法
Feb 12 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
PHP 和 HTML
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
js实现tab切换效果
2017/02/16 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
python分割和拼接字符串
2013/11/01 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python正则表达式知识汇总
2017/09/22 Python
python版本的仿windows计划任务工具
2018/04/30 Python
对python 命令的-u参数详解
2018/12/03 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
财务负责人任命书
2014/06/06 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript