Ubuntu 16.04下安装PHP 7过程详解

前言

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

准备编译环境

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

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

rush:bash;"> sudo apt-get install PHP-dev libapache2-mod-PHP

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

rush:bash;"> sudo apt-get install PHP-MysqL PHP-mbstring

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

安装Oracle Client

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

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

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

  • 解压zip包,放置到某个目录下
  • 为当前版本的Instant Client创建合适的链接
  • 设置环境变量

下载PHP源码

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

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

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

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

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

rush:bash;"> git clone -b PHP-7.0.4 https://github.com/PHP/PHP-src && cd PHP-src

编译OCI8/PDO_OCI

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

编译oci8

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

rush:bash;"> cd ext/oci8 PHPize ./configure --with-oci8=instantclient,/opt/oracle/instantclient_12_1 sudo make

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

编译pdo_oci

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

rush:bash;"> cd ../../ext/pdo_oci PHPize # 最后面要指定版本号 ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient_12_1,12.1 sudo make

结果也和上面一样。

使用我们编译的扩展

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

rush:bash;"> PHP -i | grep "extension_dir"

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

rush:bash;"> # 先进入对应的modules目录下 cp oci8.so /usr/lib/PHP/20151012 cp pdo_oci.so /usr/lib/PHP/20151012

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

rush:bash;"> p -i | grep "Configuration File"

打印出了如下信息

/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

rush:bash;"> sudo vim PHP.ini

在里面加入

rush:bash;"> extension=oci8.so extension=pdo_oci.so

最后重启Apache

rush:bash;"> systemctl restart apache2.service

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

Linux小技巧

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

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

总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用