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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
PHP dirname简单使用代码实例
Nov 13 PHP
如何重写Laravel异常处理类详解
Dec 20 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
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
详解微信小程序 template添加绑定事件
2017/06/23 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
交通事故私了协议书
2014/04/16 职场文书
护理见习报告范文
2014/11/03 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS