【问题标题】:How do I install PHP 7 (PHP next generation) on Ubuntu如何在 Ubuntu 上安装 PHP 7(PHP 下一代)
【发布时间】:2015-09-08 08:56:51
【问题描述】:

如何在 Ubuntu 上安装 PHP 7(PHP 下一代)?

我想在全新安装的 Ubuntu 上安装 PHP 7,看看我会遇到什么问题。

这是官方的(但指南很少):

https://wiki.php.net/phpng

【问题讨论】:

  • 在这里操作。我是否值得再从头开始构建 PHP,但对于版本 8 是否值得?想看的话点个赞吧。

标签: php ubuntu


【解决方案1】:

我自己进行了一次测试,并认为记录我在执行过程中遇到的问题以及我是如何克服这些问题从而为其他人免去一些痛苦和折磨会很有用。

然而,我确实(事后)找到了这个http://jcutrer.com/howto/linux/how-to-compile-php7-on-ubuntu-14-04,它比我在下面提供的指南更清晰。

来自指南(https://wiki.php.net/phpng):

./buildconf 
mkdir  ~/tmp 
cd ~/tmp
git clone https://git.php.net/repository/php-src.git
cd php-src

到目前为止一切顺利。此时我开始遇到问题:

./buildconf

报告我没有安装make。解决方案在这里找到: https://askubuntu.com/questions/192645/make-command-not-found

我试过了,但还是有问题,所以我这样做了:

sudo apt-get purge make  
sudo apt-get install make 

当我再次尝试 ./buildconf 时出现下一个问题,它抱怨我没有自动配置。解决方法如下:

sudo apt-get install autoconf  

现在终于运行 ./configure 命令并得到了这个:

配置:警告:如果您愿意,您将需要 re2c 0.13.4 或更高版本 重新生成 PHP 解析器。配置:错误:构建需要野牛 构建 GIT 结帐时的 PHP/Zend!

安装 Bison 似乎也安装了 re2c,因此这解决了这两个问题:

sudo apt-get install bison    

配置搅动了很长一段时间,然后吐了:

配置:错误:找不到 xml2-config。请检查您的 libxml2 安装。

应该很容易解决吧?运行:

sudo apt-get install libxml2

不。没那么容易。我们已经有了最新最好的:

libxml2 已经是最新版本了。

好的。也许我们可以像制作、清除和重新安装一样解决这个问题:

sudo apt-get purge libxml2 sudo apt-get install libxml2

不。在同样的错误上运行 ./configure barfs。所以来救援:

How to fix error with xml2-config not found when installing PHP from sources?

显然我们需要这个库的开发版本:

sudo apt-get install libxml2-dev

./configure 再次我们取得了进展...一个新的错误:

配置:错误:找不到 OpenSSL 的

从我们上次的尝试中学习,让我们尝试一下:

sudo apt-get install openssl-dev

sudo apt-get install open-ssl-dev

不,好的,让我们搜索一下:

apt-cache search openssl 

哇,这么多包。让我们缩小一点:

apt-cache search openssl | grep php

这给了我们一个较小的列表,但前面都有 php5,我们正在做一个 php7(phpng Next Generation 从头开始​​构建);这些软件包中的任何一个都可以使用吗?前往互联网寻求我们的解决方案:

https://serverfault.com/questions/415458/php-error-cannot-find-openssls-evp-h

sudo apt-get install libcurl4-openssl-dev pkg-config

让我们看看这是否让 ./configure 满意(不,但进展...一个新错误):

配置:错误:请重新安装 BZip2 发行版

再次搜索网络导致我们:

http://zgadzaj.com/how-to-install-php-53-and-52-together-on-ubuntu-1204

告诉我们这样做:

sudo apt-get install libbz2-dev

我们再一次向 ./configure 神祈祷,然后...

如果配置失败,请尝试 --with-vpx-dir= 配置:错误:找不到 jpeglib.h。

到互联网!!!

找到这个:http://www.omniweb.com/wordpress/?p=1040

sudo apt-get install libjpeg-dev 

再次尝试./configure,调查结果如下:

配置:错误:未找到 png.h。

来自与上面相同的网站,它说要这样做:

sudo apt-get install libpng-dev

再次尝试./configure 并调查说:

找不到配置错误xpm.h

我在黑暗中捅了一刀,然后用:

sudo apt-get install libxpm-dev

再次向./configure神祈祷,回复是:

配置:错误:找不到 freetype-config。

无所不知的 Google 将我们引向这里的 SO 神:

Configure php 5.3 fail with error : freetype.h not found (but libfreetype6-dev is installed)

sudo apt-get install libfreetype6-dev 

现在你可能已经认出了以下模式:

  1. 运行 ./configure

  2. 在您喜欢的搜索引擎上搜索错误消息或直接搜索 就这样。

  3. 通过 apt-get 安装缺少的组件。

  4. 转到 1.

所以从这里开始,我将只显示错误以及解决问题的 apt-get 命令或其他命令:

配置:错误:无法找到 gmp.h

build php5.3.8 on ubuntu , get error: configure: error: Unable to locate gmp.h

sudo apt-get install libgmp-dev  
sudo apt-get install libgmp3-dev
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

配置:错误:找不到 mcrypt.h。请重新安装 libmcrypt。

sudo apt-get install libmcrypt-dev

配置:错误:请重新安装 mysql 发行版

http://www.spiration.co.uk/post/1332/install%20PDO_MYSQL%20-%20mysql_config%20and%20header%20files%20problem

sudo apt-get install libmysqlclient15-dev  

配置:错误:找不到 pspell

sudo apt-get install libpspell-dev

配置:错误:在 /usr/ 下的任何地方都找不到 recode.h usr/local /usr /opt.

sudo apt-get install librecode-dev

配置:警告:无法识别的选项:--with-t1lib

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=658248

没有解决办法。似乎是一个回归错误。解决方法是从配置选项中删除 --with-t1lib。我认为这可能仅适用于 Windows 版本,但我不确定。

配置:警告:无法识别的选项:--with-my-sql

没有解决办法。解决方法是从配置选项中删除 --with-mysql 开关。因为我们包含了 pdo-mysql,所以这可能不是问题。

最后我们可以使用这个命令来实际构建 PHP7(我建议你现在给自己泡杯咖啡,因为这需要一些时间):

make

使用命令 sudo make install 来实际安装我们的 php 构建:

sudo make install 

要检查一切是否正常并且我们有正确的版本,请在终端中执行:

cd $HOME/tmp/usr/bin
./php -v

PHP 7.0.0-dev (cli)(构建时间:2015 年 6 月 22 日 18:11:13) 版权所有 (c) 1997-2015 PHP Group Zend Engine v3.0.0-dev, 版权所有 (c) 1998-2015 Zend Technologies

【讨论】:

  • 这是迄今为止我在 Stack Overflow 上看到的最长的答案! :)
  • 这家伙需要一座纪念碑。谢谢你的精彩回答,你拯救了我的一天!我只有一个问题,在$HOME/tmp/ dir 中安装 PHP 是否是一种好方法?也许/usr 会更好?
  • sudo apt-get install libcurl4-openssl-dev pkg-config 在某些安装过程中可能仍然无法工作。这是因为 curl 现在位于 /usr/include/x86_64-linux-gnu/curl 下。在我们等待未来版本的更新时,一个临时的解决方法是创建一个指向该位置的符号链接。 cd /usr/include sudo ln -s x86_64-linux-gnu/curl
  • 我已经走了这么远......我在xpm.h 失败了。然后我读了这个答案,我就像“哦,所以我不是唯一一个有问题的人”。多亏了这篇文章,我安装了所有需要的东西,而无需等待数十次 configure 来告诉我缺少什么。谢谢!另外,我没有与 MYSQL 相关的错误,不知道为什么(Debian 7,之前有 Apache2.2 和 PHP 5.6,还安装了一些 MYSQL)
  • @Forien 不客气。很高兴你解决了。通过从源代码构建 PHP,我学到了很多东西。但我通常在我的大部分 PHP 安装中使用 Ondřej Surý 的 PPA(如下)。
【解决方案2】:

您可以使用php-build 来构建和安装 PHP 7(和其他 PHP 版本)。如果您不熟悉 PHP 构建过程,会容易得多。

【讨论】:

    【解决方案3】:

    您可以安装支持 Ubuntu 和 PHP 7 的控制面板。例如,ServerPilot supports Ubuntuinstalls PHP 7

    【讨论】:

    • 请注意,ServerPilot 不是托管公司,但他们协助管理现有服务器。
    【解决方案4】:

    Ondřej Surý 的 PPA 为 https://launchpad.net/~ondrej/+archive/ubuntu/php

    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
    sudo apt-get install php7.0
    

    使用 PPA 肯定比从源代码构建更容易!

    已安装 PHP 5.x 的用户须知; apt-get 在我尝试在带有 PHP 5 的盒子上安装安装 php7.0 时抱怨了一点,但是在我做了 apt-get remove php5 以摆脱我现有的 PHP 5.6 安装然后明确地做了 sudo apt-get install php7.0-common 我能够让sudo apt-get install php7.0 通过。不知道为什么这是必要的;如果比我更了解 Apt 的人想编辑一些更好的说明(或完全提供更好的答案并要求我删除这个),请随意。

    【讨论】:

      【解决方案5】:

      我是 OP。我的建议是按照@Mark Amery 的建议在https://launchpad.net/~ondrej/+archive/ubuntu/php-7.0 使用 Ondřej Surý 的 PPA

      如果你想要从源代码安装 PHP 7 的乐趣和游戏,那么这里是我用于配置和构建的脚本(注意“make -j4”是如果你有一个 4 核机器并且想要它在构建过程中每个内核上的并行线程):

      #!/bin/sh
      ./buildconf --force
      
      ./configure \
      --prefix=/usr/php7 \
      --with-config-file-path=/etc/php7 \
      --enable-phpdbg \
      --with-pdo-mysql=mysqlnd \
      --with-mysqli=mysqlnd \
      --with-pgsql \
      --with-pdo-pgsql \
      --with-pdo-sqlite \
      --enable-intl \
      --with-pear \
      --with-gd \
      --with-jpeg-dir=/usr \
      --with-png-dir=/usr \
      --enable-exif \
      --enable-zip \
      --with-zlib \
      --with-zlib-dir=/usr \
      --with-mcrypt=/usr \
      --enable-soap \
      --enable-xmlreader \
      --with-xsl \
      --with-curl=/usr \
      --with-tidy \
      --with-xmlrpc \
      --enable-sysvsem \
      --enable-sysvshm \
      --enable-shmop \
      --enable-pcntl \
      --with-readline \
      --enable-mbstring \
      --with-curl \
      --with-gettext \
      --enable-sockets \
      --with-bz2 \
      --with-openssl \
      --with-gmp \
      --enable-bcmath \
      --enable-calendar \
      --enable-ftp \
      --with-pspell=/usr \
      --with-enchant=/usr \
      --enable-wddx \
      --with-imap \
      --with-imap-ssl \
      --with-freetype-dir=/usr/local \
      --with-xpm-dir=/usr \
      --with-kerberos \
      --enable-sysvmsg 
      
      make -j4 
      sudo make install
      

      【讨论】:

        【解决方案6】:

        使用终端在 Ubuntu 上安装 PHP7(Nightly Build - latest build)

        我会假设你已经安装了 apache2,如果没有,那么使用以下命令安装它:

        apt-get install apache2
        

        检查 apache 是否正在运行:

        service apache2 status
        

        你会看到类似的东西:

        apache2.service - LSB: Apache2 web server
        Loaded: loaded (/etc/init.d/apache2)
        Active: ACTIVE (RUNNING)
        

        如果 apache 正在运行,则执行 PHP 7 安装过程:

        首先使用您喜欢的文本编辑器将 PHP7 存储库添加到您的源列表 /etc/apt/sources.list:

        deb http://repos.zend.com/zend-server/early-access/php7/repos ubuntu/ 
        

        添加 PHP 7 存储库后,使用以下命令更新您的系统:

        apt-get update
        

        现在,如果一切正常,您应该可以使用以下命令安装 PHP7 Nightly Build:

        apt-get install php7-nightly
        

        在安装过程中,可能会出现警告:“您要继续吗?如果确实按 Enter。按下回车后,你也会得到类似下面的警告

        WARNING: The following packages cannot be authenticated!
          php7-nightly
        Install these packages without verification? [y/N]
        

        键入 Y,然后按 Enter 继续。

        安装完成!现在您需要让 PHP7 与 Apache 一起工作,为此,请使用以下命令将 PHP7 的库和模块复制/移动到 Apache 目录:

        cp /usr/local/php7/libphp7.so /usr/lib/apache2/modules/
        cp /usr/local/php7/php7.load /etc/apache2/mods-available/
        

        移动文件后,您需要编辑 /etc/apache2/apache2.conf 并将以下行添加到文件底部。这将告诉 apache 提供 php 文件

        <FilesMatch \.php$>
        SetHandler application/x-httpd-php
        </FilesMatch>
        

        现在您已修复 apache2.conf,运行以下命令以启用 PHP mpm 模块并切换到 mpm_prefork。

        a2dismod mpm_event && a2enmod mpm_prefork && a2enmod php7
        

        重新启动 Apache 以使您所做的更改生效:

        service apache2 restart
        

        现在是测试 PHP 7 的时候了

        要测试 PHP7,您将使用您喜欢的编辑器并插入以下代码行,在 /var/www/html/ 中创建一个名为 info.php 的 PHP 文件。

        <?php
        phpinfo();
        ?>
        

        现在您可以转到您喜欢的浏览器并尝试以下网址

        http://localhost/info.php
        

        在页面顶部,检查 PHP 版本是否为 7.0 或更高版本。

        PHP7 version example

        既然您已验证它可以正常工作,您应该删除您的 info.php,因为它存在安全风险。使用以下命令将其删除:

        rm /var/www/html/info.php

        Source:https://www.atlantic.net/community/howto/try-php7-debian-8-2-lamp-stack/

        【讨论】:

          【解决方案7】:

          我看到其他用户正在发布二进制文件,但如果您想自己编译,请尝试使用 auto-apt。

          要从源代码编译任何应用程序,您可以使用 auto-apt。它不是一个众所周知的工具,但它对使用大量外部库编译应用程序有很大帮助。

          Auto-apt 创建一个对配置脚本的驱动检查,并检测它正在寻找的 configure.sh 脚本的哪些包,如果你想要它当时正在查看的脚本的功能,它允许你安装它们。

          sudo apt-get install auto-apt
          sudo auto-apt update
          sudo auto-apt updatedb && sudo auto-apt update-local
          sudo auto-apt run ./configure
          

          更多信息:https://help.ubuntu.com/community/AutoApt

          【讨论】:

            【解决方案8】:

            我按照这个 => http://blog.idojo.co/how-to-setup-a-lamp-stack-with-all-the-latest-softwares/ 编译了自己的 php 7,说明非常简单,根据您的需要调整配置选项,默认配置选项在 ubuntu 服务器 14.04 上对我来说很好......

            灯栈包括 Apache 2.4.18MySQL 5.7.10PHP 7.0.4

            【讨论】:

              【解决方案9】:

              在 Ubuntu 16 上

              apt-get 更新

              apt-get install php libapache2-mod-php php-mcrypt

              这个安装了php7

              【讨论】:

                猜你喜欢
                • 2011-11-06
                • 2019-07-03
                • 2023-03-21
                • 2018-09-15
                • 2019-09-04
                • 1970-01-01
                • 1970-01-01
                • 2017-08-29
                • 2016-01-30
                相关资源
                最近更新 更多