与PHP5.3.5的战斗----记php5.3.5安装过程

摘自:http://blog.csdn.net/lgg201/article/details/6125189
这篇文章写的很是不错,,,也是我php的成长过程类似

author: selfimpr

mail: lgg860911@yahoo.com.cn

blog: http://blog.csdn.net/lgg201

最近想过一遍PHP的手册, 刚开始就遇到了困难, PHP5.3开始对于fpm的SAPI开始支持.user.ini样式的配置文件(也就是扫描每个目录下的.user.ini来决定使用的配置项), 原来装的是PHP5.2的版本, 在安装5.3的时候遇到了N多问题, 干耗了9个小时, 终于搞定了...写出来分享下, 顺便备忘.

目标: PHP 5.3.5 fpm和cli的SAPI方式都可用.

另安装apc, svn, memcache, memcached, php_libxslt几个扩展

首先是PHP的安装

wget http://cn2.php.net/get/php-5.3.5.tar.gz/from/this/mirror

tar zxvf php-5.3.5.tar.gz

cd php-5.3.5

./configure --prefix=/usr/local --enable-fpm --with-fpm-user=oo-www --with-fpm-group=oo-www --with-pcre-regex --with-zlib --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-mhash --enable-mbstring --with-mysql --with-mysql-sock --with-mysqli --enable-pcntl --with-pdo-mysql --enable-shmop --enable-sockets --enable-sqlite-utf8 --enable-zip --with-pear=/usr/local/lib/php/pear

make ZEND_EXTRA_LIBS='-liconv'

make test

make install

在上面安装PHP的过程中, 我被折磨了超过6个小时, 一开始都是网上找现成的./configure选项还有用原来5.2时候用过的, 总是会有各种问题...

后来, 实在没办法, ./configure --help 把configure的参数逐个看一遍, 大概了解下自己需要的

没有想到的是一次成功了...

make的时候加参数ZEND_EXTRA_LIBS='-liconv'是因为编译时需要iconv库, 但是configure的时候没有写到Makefile中, 还有一种方法是直接修改Makefile, 在链接库的地方(应该在100行左右)加上-liconv

好了, php装好了, 在/usr/local下

make install完成后给出的安装信息如下

Installing PHP SAPI module:       fpm //安装的SAPI

Installing PHP CLI binary:        /usr/local/bin/ //cli可执行文件

Installing PHP CLI man page:      /usr/local/man/man1/

Installing PHP FPM binary:        /usr/local/sbin/ //fpm的可执行文件

Installing PHP FPM config:        /usr/local/etc/ //fpm配置文件

Installing PHP FPM man page:      /usr/local/man/man8/

Installing build environment:     /usr/local/lib/php/build/ //构建路径(这个和phpize是编译扩展必须的, 而且此目录必须和phpzie中的路径一致, 注: 可以用文本编辑器打开phpize查看, 我曾经遇到过路径不一致导致扩展不能被编译的情况)

Installing header files:          /usr/local/include/php/

Installing helper programs:       /usr/local/bin/

program: phpize //编译扩展需要的可执行程序

program: php-config

Installing man pages:             /usr/local/man/man1/

page: phpize.1

page: php-config.1

Installing PEAR environment:      /usr/local/lib/php/pear/ //pear扩展安装路径

[PEAR] Archive_Tar    - already installed: 1.3.7

[PEAR] Console_Getopt - already installed: 1.2.3

[PEAR] Structures_Graph- already installed: 1.0.3

[PEAR] XML_Util       - already installed: 1.2.1

[PEAR] PEAR           - already installed: 1.9.1

接下来, 配置FPM

fpm会在/usr/local/etc下生成一个php-fpm.conf.default文件, 但是, 实际用的文件名为php-fpm.conf, 需要把这个文件拷贝一份, 修改一下

cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

主要是打开下面三项(我是开发机, 所以就开的小)

pm.start_servers = 5

pm.min_spare_servers = 5

pm.max_spare_servers = 10

然后拷贝ini文件, ini文件在源码目录下有两份

php.ini-development和php.ini-production, 顾名思义, 一个是开发版的, 一个是产品版的..

将其中一个拷贝到/usr/local/lib, 命名为php.ini

cp SOURCE_ROOT/php.ini-development /usr/local/lib/php.ini

由于我是原有项目, 所以, php.ini也带来了一点小纠结

error_report split方法在5.3中过期了, 会报错....另外, 通知级别的错误是不需要报告的...error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

short_open_tag 有哥们儿用了短标签

register_argc_argv 我们有CLI下的应用

enable_dl 需要使用动态链接库

date.timezone = "Asia/Chongqing" 不知道是不是因为装了calendar, 不设置这东西, 就有警告消息

allow_call_time_pass_reference 有哥们调用时传了引用参数

上面是我碰到的一些问题

当然, 其实有两个非常重要的指令需要提一下

include_path = ".:/usr/local/lib/php/pear" 包含路径, 这里我用了当前目录和安装时的pear目录, 应用中可能会需要包含自己的项目路径

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626" 扩展包路径, 下面提到的扩展配置, 如果没有给定路径, 都是基于这个路径来的.(注意: 看清楚那个20090626, 下面会提到我被它也纠结不少时间)

配置基本上就这样完成了, 接下来就是php-fpm程序的启动管理.

源码包中的sapi/fpm提供了init.d.php-fpm, 将它拷贝到/etc/init.d/, 命名为php-fpm

cp SOURCE_ROOT/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

好了, 接下来就可以使用/etc/init.d/php-fpm {start|stop|force-quit|restart|reload}来管理PHP-FPM了

完成了php的安装, 开始扩展的安装吧

我原来用php5.2的时候, 就编译好了扩展的, 直接把so文件拷贝过去, 启动fpm, 报错, 无法加载(这里的报错是因为上面提到的那个20090626, phpize在编译的时候, 会给扩展打上记号, 用php5.2的phpize编译的, php5.3中不能用了哦~~~, 怎么知道一个扩展的这个号呢, 很简单, phpize之后的输出内容中有)

无奈...

只好重新编译

编译的过程中手贱了一下, 用了pecl install apc, 结果又不知道咋了, 用不了....

只好老老实实的从源码重新编译

tar zxvf APC-3.1.6.tgz

cd APC-3.1.6

phpize

./configure

make

make install

其他的扩展安装方式都是一样的, 这里就不再罗嗦了....有一点需要注意的是memcached扩展是依赖于libmemcached的, 所以, 在安装memcached之前, 首先需要安装libmemcached, 并在安装memcached扩展的./configure阶段增加选项--with-libmemcached-dir指定libmemcached的路径

就这么多了....希望可以帮助到大家...上述过程及观点如有错误, 请指正, 以免误导其他朋友...谢谢

与PHP5.3.5的战斗----记php5.3.5安装过程的更多相关文章

  1. window 2008+apache2.4.4+php5.5+mysql-5.6.12+phpmyadmin4.0.4.1安装过程(参考他人文章基础上加上自己遇到的问题)

    一.window server2008的安装 1.我用U盘安装的,先用UltraISO把server2008刻录到U盘中,过程我搜了一下,帖个地址: http://wenku.baidu.com/vi ...

  2. 记一次wordpress安装过程中遇到的问题及解决办法

    Q:无法建立目录wp-content/uploads/2017/03.有没有上级目录的写权限?A:执行chmod 777 wp-content/ 提升目录权限 Q:安装主题或安装插件的时候,用到FTP ...

  3. 记一次WordPress 安装的过程

    安装WordPress你我他大家都会,记得10年的时候,哥已经玩转WordPress.dedecms.sns,那为何现在要记一次WordPress安装过程呢? 因为现在不会了! 之前安装都是在Wind ...

  4. 转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程

    一.编译安装apache 1.解决依赖关系 httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包.这 ...

  5. 【PHP】linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明(转)

    linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明:一.mysql5.0.2的安装配置过程及说明:1. #tar -zvxf mysql-5.0.2-alpha. ...

  6. 记一次RabbitMq 安装和配置坑

    记一次RabbitMq 安装和配置坑 正常情况下安装 先安装erl ,在安装rabbitmq 这个在windows下的安装没什么技巧,按照默认一路下一步就ok.安装好后可以到cmd测试是否安装好. 测 ...

  7. 记一次OutOfMemory定位过程-续

    在前文<记一次OutOfMemory定位过程>完成时最终也没有定位到ECS 中JVM Heap size无法控制的原因,今天再次尝试终于有了一些线索,翻查了ECS的部署脚本发现了memor ...

  8. php5下载,apache2.4与php5整合

    step1 php5下载 百度“php下载”,找到php官网 2. 点进去,选择windows downloads 3. 同样,X86对应32位,X64对应64位,Non Thread Safe是非线 ...

  9. PHP5.4 for Apache, php 5.4.0安装过程、方法、配置 ; Apache2.2支持php5.4的配置方法

    那我们如何选择下载哪个版本的PHP呢?如果你是在windows下使用Apache+PHP的,请选择VC6版本:如果你是在windows下使用IIS+PHP的,请选择VC9版本. 二.如何选择PHP5. ...

随机推荐

  1. AngularJS-----$compile

    原文:http://docs.ngnice.com/api/ng/service/$compile 写在前面的话: 之前我一直理解错误,我一直以为这句--function([scope], clone ...

  2. Android Mms专题之:Mms源码结构

    从软件的功能角度来讲,Mms分为对话列表,消息列表,短信编辑,彩信编辑,短信显示,彩信显示和配置. 从实现的角度来看,它分为GUI展示层,发送/接收,彩信解析,彩信附件,信息数据等,这些分类对应着源码 ...

  3. Influxdb简单实用操作

    新的infludb版本已经取消了页面的访问方式,只能使用客户端来查看数据 一.influxdb与传统数据库的比较 库.表等比较: influxDB 传统数据库中的概念 database 数据库 mea ...

  4. css汇总

    1.居中 parentElement{ display:flex;/*Flex布局*/ display: -webkit-flex; /* Safari */ align-items:center;/ ...

  5. OC基础:Date 分类: ios学习 OC 2015-06-22 19:16 158人阅读 评论(0) 收藏

    NSDate  日期类,继承自NSObject,代表一个时间点 NSDate *date=[NSDate date]; NSLog(@"%@",date);   //格林尼治时间, ...

  6. 苹果HomeKit联手海尔的三大原因

    2014已成智能家居元年,无论是资本市场还是巨头企业无不把触角向这一领域延伸.刚有人称,智能家居将成三星和谷歌对决,但不成想,前几天的苹果WWDC大会上,苹果就发布了自家的智能家居平台HomeKit. ...

  7. CentOS7.5最小化安装与初始化配置(做标准化)

    本文分享CentOS的标准化安装配置方法,方便集群批量装机配置 ------------------------- 完美的分割线 ---------------------------- 1.安装标准 ...

  8. 【问题】解决在微信公众号里面网站无法访问:oops something went wrong:(

    最近在用一个第三方微信公众平台托管工具连接微信公众平台时,发现一个问题——在微信里面的官网网站链接没法在微信里面打开(无论是手机端还是PC端),会出现Oops! Something went wron ...

  9. FutureTask的用法及两种常用的使用场景 + FutureTask的方法执行示意图

    from:  https://blog.csdn.net/linchunquan/article/details/22382487 FutureTask可用于异步获取执行结果或取消执行任务的场景.通过 ...

  10. leetcode:Palindrome Number【Python版】

    一次AC 题目要求中有空间限制,因此没有采用字符串由量变向中间逐个对比的方法,而是采用计算翻转之后的数字与x是否相等的方法: class Solution: # @return a boolean d ...