从头开始编译 PHP 5.5 已翻译 100%

oschina 投递于 2013/05/20 23:07 (共 10 段, 翻译完成于 05-21)
阅读 11277
收藏 60
PHP
5
加载中

总是有些操作系统的(PHP)软件包落后于PHP最新版本的PHP,比如Ubuntu。这种落后意味着你要等待一年甚至更长时间,才能更新到最新、最伟大的PHP版本,除非你使用外部的库如Dotdeb。当然,即使你使用了外部库,你会发现很多安全性和错误修正仍然有些滞后。

相反,我采用自已制作的PHP版本。这非常容易就能做到,并且任何开发人员都能做到。本文中我介绍了如何在Ubuntu中做一个最新的(PHP包)。

裴宝亮
裴宝亮
翻译于 2013/05/21 09:25
2

为什么考虑“推出(rolling)你自已的”PHP安装包

(Ubuntu)有很多的(一吨,a ton of)PHP软件包。有些人选择默认的包套件建成(PHP环境),还有一些人选择Dotdeb。但是对于真正专业的PHP开发人员,了解如何针对他们的操作系统编译安装PHP是比较重要的。

在我的例子中,我想要使用最新版本的PHP,因为我的工具( tools经常跟踪(track )最新的版本(PHPUnit,PHPMD,等等)。 因此,那些小的改进以对我很有用。

裴宝亮
裴宝亮
翻译于 2013/05/21 09:41
2

准备开始(Getting started)

需要指出的是,我从一个之前没有安装过Apache和PHP的Ubuntut系统开始,完全它是完全纯净的系统。如果你打算从一台已安装了这些软件(PHP,Apache)的服务器开始,你需要修改你的说明(modify your instructions)。

我假设你以root身份运行这些命令,因此,这些命令中都不包含sudo。如果你使用的不是root身份,那么加上sudo(声明适用于非root身份运行,除非你知道你在做什么)。

裴宝亮
裴宝亮
翻译于 2013/05/21 09:56
1

准备环境(Preparing the environment)

为了能正解安装PHP,我们需要准备一些依赖包(dependencies)。

我喜欢有Apache,MySQL和Postgres的支持,所以我们要确保这些软件已安装,以便PHP能打到它们:

aptitude install build-essential vim

aptitude install apache2 apache2-mpm-prefork apache2-prefork-dev apache2-utils apache2.2-common

aptitude install postgresql-9.1 postgresql-client-9.1 postgresql-client-common postgresql-common postgresql-server-dev-9.1

aptitude install mysql-client mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 libmcrypt-dev curl openssl

注意,这里我还需要安装一些其它的包,如:openssl,curl,libmcrypt-dev,以及build-essential (它对make和make install是必须的)。

裴宝亮
裴宝亮
翻译于 2013/05/21 10:04
1

安装PHP依赖的包(Building the dependencies for PHP)

PHP还有很多其它有依赖关系的包,因此把这些都构建好是好重要的。庆幸的是,我们可以使用一条简单的命令来构建这些PHP依赖的包:

apt-get build-dep php5

这个命令会获取并构建(安装)所有PHP5所依赖的包。记住,你可以跳过这个步骤并自己安装这些包,如果你愿意的话(或者你需要一些特殊的配置)。

如果你不运行这个命令或安装这些依赖包(库), 你会从PHP的配置命令中得到很多令人不愉快的错误。

裴宝亮
裴宝亮
翻译于 2013/05/21 10:18
1

配置并安装PHP

一旦你处理完了这些依赖关系,接下来是时候来构建PHP了。当你下载完PHP5.5(可以从www.php.net得到最新的RC1版本),解压缩它并进入(解压后的)目录。

我喜欢在我安装的PHP中使用漂亮的标准配置。 不过,这里也包含一些独特的设置,我将解释一下:

  • –enable-opcache:这个配置是在5.5中新增的。Zend Opcache已被集成到PHP 5.5的核心中,这个配置用于在你编译PHP 5.5时启用opcache。它默认是禁用的。
  • –prefix=/opt/php:prefix用来告诉安装器PHP的安装目录。我使用 /opt/php 这样所有的PHP文件都存储在同一个地方。如果去掉这个选项,PHP会被安装到操作系统指定的地方。
  • –with-config-file-path=/opt::我发现在PHP 5.4中,如果不指定这项,PHP就无法找到INI文件。如果你愿意,你可以去除这个选项。
./configure --enable-opcache --prefix=/opt/php --with-apxs2=/usr/bin/apxs2 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pgsql=/usr --with-tidy=/usr --with-curl=/usr/bin --with-openssl-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-pdo-pgsql=/usr --with-pdo-mysql=mysqlnd --with-xsl=/usr --with-ldap --with-xmlrpc --with-iconv-dir=/usr --with-snmp=/usr --enable-exif --enable-calendar --with-bz2=/usr --with-mcrypt=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --enable-mbstring --enable-zip --with-pear --with-libdir=/lib/x86_64-linux-gnu --with-config-file-path=/opt 
裴宝亮
裴宝亮
翻译于 2013/05/21 10:39
1
当你运行完./configure命令后,你需要运行 make来编译PHP。
make

当make运行完成这后,系统会提示你运行make test如果你编译的是一个未发布的社区版本就要运行这个测试。报告你在测试时的任何故障。如果你遇到的故障,运行make干净,并重新编译。

运行完成make test之后,就可以安装PHP了。运行make installPHP安装到你在配置中指定的目录中。

make install 
裴宝亮
裴宝亮
翻译于 2013/05/21 10:56
1

配置Apache

当你从一个包中安装PHP,通常都会在Apache中安装相应的配置。不过,这是我的经验,为了使Apache识别PHP文件,我需要将正确的信息插入到Apache(的配置文件)中。下面这些就是我在apache.conf中的配置:

<IfModule php5_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php .phps
        <IfModule dir_module>
                DirectoryIndex index.html index.php
        </IfModule>
</IfModule>

在完成此配置后请务必重启Apache。

裴宝亮
裴宝亮
翻译于 2013/05/21 11:04
1

善后(Cleaning up)

PHP不会自动的安装一个INI文件,因此这件事需要你自已来做。需要注意的是在你解压得到的目录中有两个文件:php.ini-development,和php.ini-production。为你的服务器选择正确的(你需要的)配置文件,并将它复制到你指定的INI放置目录中。

为了能从命令行中直接运行PHP(命令),你需要将PHP的bin目录的位置添加到环境变量(path)中。我的bin目录是/opt/php/bin。编辑~/.profile文件并添加下面这行:

export PATH=$PATH:/opt/php/bin
裴宝亮
裴宝亮
翻译于 2013/05/21 11:12
1

这会将PHP的bin目录添加到环境变量中。你可能还需要将 PHP的bin目录添加到你的sudoers文件。 运行 visudo命令,以root身份编辑安全路径(the secure path)将正确的目录(PHP的bin目录)添加进去。

为了能使用PHP5.5的opcode缓存,你需要在你的php.ini文件中添加zend_extension=opcache.so 。还要将opcache.enable=0这行,改为opcache.enable=1 (在php.ini的第1865行)。

裴宝亮
裴宝亮
翻译于 2013/05/21 11:22
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(23)

fengyqf
fengyqf

引用来自“长工”的评论

引用来自“fengyqf”的评论

既然从头编译php那就不要
apt-get build-dep php5
让人感觉太失水准了。应该从一个(安装过gcc编译环境的)最小化安装的系统上、下载源码编译安装,比如 http://blog.path8.net/archives/6068.html

你太失水准了,应该重新构建一个更好的Linux,然后重新构建一个更好gcc,然后在这个全新的Linux和Gcc上下载源代码修改构建PHP5.

我的意思是,既然要编译全新的php,那就把php相关的依赖包全部搞成最新版,自己编译。自己编译程序,总是要遇到依赖包的问题,正好练习练习;有些软件的依赖包,可能不包含于发行版中。
赵云30
赵云30

引用来自“fengyqf”的评论

既然从头编译php那就不要
apt-get build-dep php5
让人感觉太失水准了。应该从一个(安装过gcc编译环境的)最小化安装的系统上、下载源码编译安装,比如 http://blog.path8.net/archives/6068.html

你太失水准了,应该重新构建一个更好的Linux,然后重新构建一个更好gcc,然后在这个全新的Linux和Gcc上下载源代码修改构建PHP5.
赵云30
赵云30

引用来自“後方之水”的评论

引用来自“mahone”的评论

引用来自“後方之水”的评论

引用来自“mahone”的评论

引用来自“後方之水”的评论

gentoo表示没有压力

为什么没压力?求解,请教。

简单来说呢,因为gentoo的源里面的php就是5.5的:
http://packages.gentoo.org/package/dev-lang/php

而且,gentoo的软件安装方式就是编译安装,全自动的哦,亲

emerge是gentoo的安装软件的命令,类似于debian系的apt和RH系的yum

所以,我可不可以这样理解。gentoo其实和ubuntu是差不多的,一个是apt,一个是emerge。只是gentoo更新的非常快,已经是5.5了,但是ubuntu更新的慢,还是5.3

所有发行版都差不多呀,所以我觉得那些问人家推荐用什么发行版比较好的问题很无聊,顺不顺手好不好用要自己用过才知道,并且是每个人的感觉都不一样的。

你比人无聊得多.
fengyqf
fengyqf
既然从头编译php那就不要
apt-get build-dep php5
让人感觉太失水准了。应该从一个(安装过gcc编译环境的)最小化安装的系统上、下载源码编译安装,比如 http://blog.path8.net/archives/6068.html
WJ_Cody
WJ_Cody
一直源码编译5.4的…
Choate
Choate
很好很强大,不过可以用一些rpm包来安装,或者自己封装rpm包更好,虽然我不会,但是我很希望有人能够出点这样的教程,以后给公司的新人安装PHP的时候就不用进行那么繁琐的工作了。
b33d8041
b33d8041

引用来自“mahone”的评论

引用来自“biergaizi2009”的评论

直接 emerge php 不就行了?现在我服务器上就是 5.5。

怎么ermerge?

用 Gentoo 就能 emerge。
傅小黑
傅小黑

引用来自“聂永生”的评论

为什么要编译呢?直接apt不就行了?

apt源里还没有5.5的
铂金小虎
铂金小虎
才能更新到最新、最伟大的PHP版本
encro
encro
而且使用apt,yum可以保持一直最新,而不是每台机器去编译。
返回顶部
顶部