起因:

在现有的 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. less-7

    题目是要求导出文件GET字符型注入 看看代码 这里可以使用报错注入 先按要求用导出文件做 导出文件就是可以向服务器写入文件,但是利用的时候要知道数据库,网站的路径 我们现在less-1查看 www目录 ...

  2. 用函数指针将字符串 ”hello world“ 输出为 "world hello”

    /************************************************************************* > File Name: 指针数组2.c & ...

  3. Python学习笔记——常用的内置函数

    一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...

  4. nodejs fastdfs

    node端fastdfs客户端上传文件 var FdfsClient = require('fdfs'); var fdfs = new FdfsClient({ // tracker servers ...

  5. Hive中Join的类型和用法

    关键字:Hive Join.Hive LEFT|RIGTH|FULL OUTER JOIN.Hive LEFT SEMI JOIN.Hive Cross Join Hive中除了支持和传统数据库中一样 ...

  6. #20155331 2016-2017-2 《Java程序设计》第3周学习总结

    20155331 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 程序中的类由两个部分组成:属性和方法.属性对应的是对象的特征:方法对应的是对象的行为 ...

  7. 查询表的大小(mysql)

    --所有表的大小 select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from information_schema.tables where ...

  8. Python闭包相关问题

    闭包的概念一直是似懂非懂,看过了原理,却不知道怎么实际应用. 刚好看到Python的late binding问题,记录如下,以备后续增补. >>> def create_multip ...

  9. 四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 本章内容与上一张<利用Enterprise ...

  10. [转]操作系统Unix、Windows、Mac OS、Linux的故事

    [写得很江湖气,可惜找不到原作者了] 文章转自:http://blog.csdn.net/wenmingchan/article/details/49925379 http://www.jb51.ne ...