源码安装php5.4,ubuntu16.04下编译安装php5.4的方法及部分可能出现的错误

前言

一般而言,除非对编译安装十分熟练或是有特殊要求,直接从系统支持的源中安装是linux下最有效率的方法,不幸的是,ubuntu官方源在12 LTS后就不再维护php5.4,而12之前的系统则已经没有可用的官方apt源,就连网上大多推崇的某私人源现在也只支持到php5.6;更不幸的是,php不少常用函数在5.6时经历了较大的改变——因此,编译安装几乎是面对使用php5.4编写的系统时的唯一选择了

在过去的两周里我面对的正是这种窘境,故留此笔记,希望能帮到其他不擅长编译安装的朋友们

编译前需要了解的一些tips

编译步骤:

下载源码

源码可以在php官网等地方下载到,这里给出一个地址,注意如果去官网下载的话要注意版本,根据你使用的是什么服务程序(apache等)以及apache的版本等会有v9、v6、no thread等等不同,请认真阅读说明

下载必要的依赖包

为了编译你需要一些必要的依赖,虽然有些依赖包可以在后续的过程中根据提示安装,但是有些依赖包几乎是编译必须的,比如gcc等(一般系统都会有,但是如果你使用的是docker镜像或是精简版则很可能没有),这里给出一个参考apt-get install gcc libxml2-devel make automake autoconf libtool bison flex若是出现错误可以apt-get update并选择一个个安装,其中部分包可能名字不同,例如libxml2-devel如果没有的话可以试试libxml2-dev

设定编译参数

详细的参数会在下文讲,这里你只需要知道编译参数通过./configure后面带的参数来指定,每个参数用--开头并用空格分隔,例如--with-mcrypt。想要知道php的configure脚本有哪些参数可以通过./configure --help来查看。详细的可以参考这篇中文资料和对其中三个重要参数的详细解析

编译

编译命令主要包括make、make install两个步骤,其中make完之后可以执行make test测试,如果想重新编译可以make clean

编译后必要的一些设置

主要是移动设置文件和对环境变量、php-fpm的一些设置

如果是打算LAMP环境强烈建议先安装apache再安装php!

先安装apache可能会导致部分依赖包无法加载的问题,如果是初心者建议先通过apt源安装apache再编译安装php,mysql倒是影响不大

编译....开始!

进入下载源码包的目录解压tar -zxvf php-5.4.45.tar.gz

进入解压出来的目录,执行

./configure --prefix=/usr/share/php5.4 --with-apxs2=/usr/bin/apxs --with-config-file-path=/etc/php/5.4 --with-curl --with-pear --with-gd --with-jpeg-dir --with-png-dir --with-zlib --with-xpm-dir --with-freetype-dir --with-mcrypt --with-mhash --with-mysql --with-mysqli --enable-pdo --with-pdo-mysql --with-openssl --with-xmlrpc --with-xsl --with-gettext --enable-exif --enable-wddx --enable-zip --enable-bcmath --with-bz2 --enable-calendar --enable-ftp --enable-mbstring --enable-soap --enable-sockets --enable-shmop --enable-dba --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-debug --enable-maintainer-zts ZEND_EXTRA_LIBS='-liconv'

其中--prefix参数指定的是php的安装目录,后面不少设置中如果要用到php的安装目录都是这个路径。--with-apxs2则是为了编译出libphp5.so模块,后面配置apache支持php的时候可能会用到,路径为系统中apache安装的apxs的路径(不知道的话可以用find查找一下),如果没有该路径则安装apt-get install apache2-devel(apache的开发版本)即可(注意,如果系统里面没有apxs,可能是因为系统版本是ubuntu12及之前的版本,在这些版本里改成--with-apxs2=/usr/bin/apxs2这样,路径同样自己搜索,只是改成搜索apxs2)。其他的可以酌情增减

执行make及make install,出现类似

[PEAR] Archive_Tar - installed: 1.3.12

[PEAR] Console_Getopt - installed: 1.3.1

[PEAR] Structures_Graph- installed: 1.0.4

[PEAR] XML_Util - installed: 1.2.3

[PEAR] PEAR - installed: 1.9.5

Wrote PEAR system config file at: /usr/local/php/etc/pear.conf

You may want to add: /usr/local/php/lib/php to your php.ini include_path

/usr/local/php/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin

ln -s -f /usr/local/php/bin/phar.phar /usr/local/php/bin/phar

Installing PDO headers: /usr/local/php/include/php/ext/pdo/

即为安装成功(上面引用的是别人的信息,自己的忘记截图了,路径可能不同)

移动配置文件cp php.ini-production /usr/share/php5.4/etc/php.ini,后面的地址的前半部分是之前prefix指定的路径

做到这里,通用的步骤就做完了,依据各人情况不同可能有不同的报错(,大部分可以通过百度解决,本文下一部分将介绍一些比较常见/奇怪的报错以及如果你选择使用php-fpm的话需要额外做哪些步骤

几乎一定会出现但不一定在下面被提到的报错:(

关于php-fpm与apxs

详细的解释可以参考这里,简单来说就是apache管理php的两种模式,只能选其一,否则会报

You've configured multiple SAPIs to be build.You can build only one SAPI module and CLI binary at the same time.

的错误。由于我不清楚fastcgi如何配置,这里选择模块模式,即在编译参数中增加--with-apxs2选项,同时去掉php-fpm的选项。如果你选择使用php-fpm来管理php,请使用以下编译参数

./configure --prefix=/usr/share/php5.4 --with-config-file-path=/etc/php/5.4 --with-curl --with-pear --with-gd --with-jpeg-dir --with-png-dir --with-zlib --with-xpm-dir --with-freetype-dir --with-mcrypt --with-mhash --with-mysql --with-mysqli --enable-pdo --with-pdo-mysql --with-openssl --with-xmlrpc --with-xsl --with-gettext --with-fpm-user=www-data --with-fpm-group=www-data --enable-fpm --enable-exif --enable-wddx --enable-zip --enable-bcmath --with-bz2 --enable-calendar --enable-ftp --enable-mbstring --enable-soap --enable-sockets --enable-shmop --enable-dba --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-debug --enable-maintainer-zts --enable-embed ZEND_EXTRA_LIBS='-liconv'

注意到enable-embed的选项也要改,这是网上大部分资料没有提到的

如果你选择php-fpm

在make install之后,还要执行以下步骤以配置并启动php-fpm

cp /usr/share/php5.4/etc/php-fpm.conf.default /usr/share/php5.4/etc/php-fpm.conf

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

chmod +x /etc/init.d/php-fpm

找不到php-fpm也可以find一下。之后可以/usr/share/php5.4/sbin/php-fpm -t测试是否配置正确,并进入init.d目录启动php-fpm

错误:Cannot find OpenSSL's

安装下列包:

apt-get install libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libmysqlclient-dev libpq-dev libicu-dev libfreetype6-dev libldap2-dev libxslt-dev

错误:Please reinstall the BZip2 distribution

安装这个sudo apt-get install libbz2-dev,网上很多资料说的包名都是centos下的,ubuntu的要装这个才找得到

错误: mcrypt.h not found. Please reinstall libmcrypt

可以直接安装,如果安装后还是不行参考这个

错误:Cannot find OpenSSL's libraries

先安装sudo apt-get install libcurl4-openssl-dev,如果还是不行就做个软链接ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib

错误:configure: error: libXpm.(a|so) not found.

先安装apt-get install libxpm-dev,若还是不行

制作软链接帮编译程序找到相关文件

cd /usr/lib/

64位的OS

ln -s /usr/lib/x86_64-linux-gnu/libXpm.a

ln -s /usr/lib/x86_64-linux-gnu/libXpm.so

ln -s /usr/lib/x86_64-linux-gnu/libXpm.so.4

ln -s /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0

32位的OS

ln -s /usr/lib/i386-linux-gnu/libXpm.a

ln -s /usr/lib/i386-linux-gnu/libXpm.so

ln -s /usr/lib/i386-linux-gnu/libXpm.so.4

ln -s /usr/lib/i386-linux-gnu/libXpm.so.4.11.0

路径可以自己find

啥都装了但是输入php -v提示command not found

系统变量没设置好。系统变量可以echo $PATH查看,若没有php相关则export PATH=$PATH:/usr/local/php/bin即可

apache无法解析php

ubuntu下找到apache2.conf(修改前最好先备份!),添加以下内容

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

LoadModule那一行最后的那个路径是libphp5.so的路径,可以find一下,一般在apache2目录下面。如果你找到只有php目录下面有的话,那说明你很可能没编译成功这个模块

修改apache2.conf后重启失败并报错:Can't locate API module structure `php5_module' in file /usr/local/php5/libphp5.so

说明你没编译成功这个模块,建议重新编译php并加上--with-apxs2的参数

一些可能有用的参考文章

结语

我也不清楚为什么我的文章有这么多是关于环境配置的,但是说真的这两周的经历让我对编译安装有了深深的阴影(笑,希望下次不用花这么多时间配置吧w

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值