起因:

在现有的 Apache + PHP 环境下,增加一个 PHP Extension 扩展时,遇到错误:

Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match

这是因为 PHP 运行库的编译环境与扩展包的编译环境不一致。

解决的思路很简单,让两者一致。这里就有两种处理方式:1,改变 PHP 运行库版本;2,改变扩展包编译环境版本。

在我的服务器上,Apache 加载的版本比 ubuntu apt-get 下来的版本新,所以选择更新系统的 Extension 编译版本。

1. 清除旧版本

# Remove Ubuntu PHP Packages
sudo apt-get remove php5 php5-cli php5-common php5-curl php5-dev php5-gd php5-geoip php5-imagick php5-intl php5-mcrypt php5-mysql php5-xdebug php5-xsl
 
# Remove PECL Packages
sudo pecl uninstall apc
sudo pecl uninstall geoip
sudo pecl uninstall xdebug
 

2. 获取 PHP 指定版本,下载地址可以在这个页面找到:http://cn2.php.net/releases/

# Get PHP 5.4.17 Source
wget http://museum.php.net/php5/php-5.4.17.tar.bz2
tar jxf php-5.4.17.tar.bz2
cd php-5.4.17/
 
3. 编译
# Configure PHP Source
# Note: Use `php-config` utility to determine your existing PHP configure options.
./configure
# Install PHP
make
make test
sudo make install
4. 使用 peci
sudo pecl install ssh2 channel://pecl.php.net/ssh2-0.12
 
5. 在 php.ini 中加入
add the "extension=ssh2.so" to the extension part of php.ini
 
6. 重启 apache
 
 
注1:有可能服务器上不存在 php.ini,如果这样,需要在相关目录上创建一个。
如,使用 <? phpinfo(); ?> 输出:
Configuration
File (php.ini) Path
/bitnami/megastack-linux-x64/output/php/lib
Loaded Configuration File (none)

这是在我服务器上的输出,让人郁闷的是,这个目录还是不存在的。刚开始没意识到不存在 php.ini,好一通找啊,浪费了不少时间。最后,直接创建了这个目录,再

sudo echo "extension=ssh2.so" > php.ini
其它的配置,就全都用默认值了。
 
注2:这里的 Apache 服务器和 PHP 模块都不是用 ubuntu 的 apt-get 安装的,是独立存在的。所以上面下载的 PHP 最新源码,并没有加入到这个 Apache 服务器中,只是作为编译 ssh2 php extension 的环境用。
所以在编译时,configure 时,没有指定参数,全都采用默认设置。
 
参考:
https://gist.github.com/ziadoz/3130816
http://stackoverflow.com/questions/19561722/pecl-installs-for-previous-php-version
http://www.php.net/manual/en/ssh2.installation.php

Ubuntu 下升级 php的更多相关文章

  1. ubuntu下升级R版本

    ubuntu下升级R版本   在测试<机器学习 实用案例解析>一书的邮件分类代码时,windows系统下rstudio中无法读取特殊字符,在ubuntu下可以.在ubuntu虚拟机下安装t ...

  2. ubuntu下升级网卡驱动

    ubuntu下升级网卡驱动 无线局域网环境下,有个笔记本儿的无线经常断,而其它的终端都好好的,唯独它不行.所以想到检查和更新下无线网卡的驱动看看.以下是操作流程,记录一下. 阅读说明:##为标签, / ...

  3. Ubuntu下升级Git以及获取ssh keys的代码

    今天开始用的git,记下获取ssh keys 的代码 ? 1 2 3 ssh-keygen -t rsa -C "your_email@example.com" # Enter f ...

  4. ubuntu下升级特定软件与查看软件版本信息

    ubuntu 升级软件: sudo apt-get update 更新源 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 ubu ...

  5. 记录:Ubuntu下升级Python从2.x到3.x

    一.安装Python3 在Ubuntu中的终端输入:sudo apt-get install python3 提示资源被锁住,可能有另外一个程序在占用此资源. 解决方法:输入以下指令解锁资源 sudo ...

  6. Ubuntu 下升级git到最新版

    $ sudo add-apt-repository ppa:git-core/ppa $ sudo apt-get update $ sudo apt-get install git

  7. ubuntu下nodejs和npm的安装及升级

    ubuntu 下 nodejs 和 npm 的安装及升级 参考:https://segmentfault.com/a/1190000007542620 一:ubuntu下安装 node 和 npm命令 ...

  8. ubuntu下卸载python2和升级python3.5

    卸载python只需一条语句就可以实现 sudu apt-get remove python ubuntu下安装python3 sudo apt-get install python3 但这样只安装了 ...

  9. 解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题 ||ubuntu下将普通用户权限升级为root用户权限的方法;

    其实我现在才知道linux系统对于用户权限管理比较严,在ubuntu下系统不允许root权限的用户进入图像界面系统.由于之前没弄过权限这个东西瞬间掉坑了了. 我是想修改一下root下的nginx.co ...

随机推荐

  1. ACM1019:Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  2. 20155321 2016-2017-2《Java程序设计》课堂实践项目

    20155321 2016-2017-2<Java程序设计>课堂实践项目 关于String类 split方法 charAt方法 项目题目: 模拟实现Linux下Sort -t : -k 2 ...

  3. Mysql本地安装多实例后启动遇到的问题

    一.本文紧接上一篇[win10-MySql免安装版-安装/多实例] 在上一篇文章里,安装Mysql解压版后,复制多份到本地,实现了多实例的安装 在后续启动其它实例的时候会遇到一些问题,以下就是自己遇到 ...

  4. Dlib简介及在windows7 vs2013编译过程

    Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...

  5. Linux无法su到普通用户

    无法通过su命令登录到普通用户 [root@linux-server ~]# su - tomcat su: cannot set user id: Resource temporarily unav ...

  6. Zabbix学习之路(七)之Nginx的状态监控

    1.安装nginx [root@linux-node2 ~]# yum install -y nginx [root@linux-node2 ~]# mkdir /etc/zabbix/zabbix_ ...

  7. spring源码-aop-5

    一.在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发 ...

  8. codevs2215 三角形蛋糕

    codevs2215 三角形蛋糕 原题链接 煞笔题??? 开始一看似乎没啥思路的样子 然后想了一下 额... 首先啃腚考虑缩进存储 然后看一下这样的性质 #-##----# -----#- ---#- ...

  9. idea 严重: Error configuring application listener of class org.springframework.web.context.Context 后面省略

    根本原因:jar文件没有同步发布到自己项目的lib目录中 解决方案:把之前在这个位置的jar文件,put into 到 /WEB-INF/lib 目录下即可

  10. Spring学习(九)-----Spring bean配置继承

    在 Spring,继承是用为支持bean设置一个 bean 来分享共同的值,属性或配置. 一个子 bean 或继承的bean可以继承其父 bean 的配置,属性和一些属性.另外,子 Bean 允许覆盖 ...