可以说,我很快就注意到了这个话题,我搜索了一下,发现有很多解决方案。然而这些解决方案对我来说都不起作用,不仅如此,我还打算更多地了解基于 Debian 的操作系统。
问题
- 我想知道如何在不使用第三方 PPA 的情况下自行从源代码编译 PHP 5.3 升级到 PHP 5.4.7。
- 这种方法 (如下所述) 是配置 PHP 5.4 的正确方法吗?我是源代码编译的新手。
设置
我运行的是 Ubuntu Server 12.04 64 位。我目前有:
- PHP 5.3
- MySQL 服务器
- Apache2
- Memcached
问题
我最初使用安装了 PHP 5.3 apt-get
。现在我希望升级到 PHP 5.4,因为它具有 OOP 中的特征和带有数组的结构以及所有其他最新补丁等优势。
可能的解决方案
我见过这个 ondrej/ppa 存储库,我拒绝使用它,因为它可能有用,但它是一个未知/不受信任的来源。另外,我没有学习如何从源代码进行管理,使用配置,制作和安装因此。
我见过一个从源代码编译的解决方案,本质上是我希望得到一些指导。
结论
我没有指望有人帮我填鸭式教育,我还出去阅读了一些手册,至少自己开始了行动;这就是我所取得的进步。
我做的第一件事是使用 su 进入 root 模式(这样可以节省输入 sudo 的时间)。
$ sudo su
我接下来做的事情是下载最新版本的 PHP(5.4.7)并提取其内容,准备在安装之前进行配置。
$ mkdir php5-new && cd !$
$ wget -O php-5.4.7.tar.bz2 http://php.net/get/php-5.4.7.tar.bz2/from/uk3.php.net/mirror
$ bzip2 -d php-5.4.7.tar.bz2
$ tar xvf php-5.4.7.tar.gz
$ cd php-5.4.7
$ ./configure --help
最后我决定举办一场盛大的聚会,我浏览了选项列表,并决定我需要列出全部我通缉包含在配置中。
$ ./configure --with-mysql --with-apache2 --with-libxml --with-openssl --with-zlib --with-bz2 --with-curl --with-dom --with-gd --with-imap --with-imap-ssl --with-mcrypt --with-mysqli --with-pdo-mysql --with-libxml --enable-ftp --enable-mbstring --enable-soap
最后,结果……
配置过程完成后,它会引发一个错误:
配置:错误:未找到 xml2-config。请检查您的 libxml2 安装。
进度更新(解决方案)
接受的答案就是解决方案。对于将来可能遇到此问题的任何人,我将添加一些额外的提示(扩展“Ladadadada”在下面所说的内容)。
我遇到了 OpenSSL 的另一个问题,因此我必须安装开发库;我使用以下命令完成此操作:
$ apt-cache search openssl | grep dev
$ apt-get install libssl-dev
$ dpkg -L openssl
然后我设置了--with-openssl=/usr/includes/openssl
抱怨evp.h。我尝试使用来定位此文件find / -type f -name evp.h
并在目录内发现它/usr/includes/openssl/evp.h
,因此我再次删除了=/usr/includes/openssl
。
答案1
您可能需要libxml2-dev
通过安装apt-get install libxml2-dev
,然后重试。这将安装此库的所有头文件和其他开发工具。其他模块也可能需要这样做。
这就是最好从二进制包安装而不是用这些不必要的包弄乱您的生产系统的原因之一。此外,要学习如何编译您自己的二进制文件,您不应该使用生产系统。
答案2
您的配置行中似乎有--with-libxml
两次。可能没有关系,但最好删除多余的一个。
除此之外,您是否安装了 libxml2?您将需要它。如果您做是否已安装,它在哪里?如果它不位于/usr/lib/
(例如,它位于/opt/
),则需要使用 指定它的路径--with-libxml=/path/to/libxml2
。
在尝试编译自己的版本之前,完全删除旧版本的 PHP 非常重要apt-get purge
。如果不这样做,通常会导致您的系统上在两个不同的路径下留下两个不同版本的 PHP,并产生一些难以调试的问题。构建已编译 PHP 的 .deb 并安装它也是一个好习惯,即使它只用于单个系统并且您不会担心依赖项,因为它会使以后的卸载变得更加容易。卸载这样的已编译包与构建 .deb 的工作量大致相同,因此您不妨这样做。
确保您还了解 PHP 的 CLI、CGI 和 Apache 模块版本之间的差异。在基于 Debian 的发行版中,这些版本都有单独的php.ini
文件。请确保卸载所有这些版本,并根据您运行 PHP 的方式编译正确的版本。