如何构建 PHP 7.3?

rok*_*ket 5 server php compiling git apache2

我在从 git 构建 PHP 7.3 包时遇到问题。目前我正在使用 Ubuntu 16.04 和 utdatet php 7.0.x。(不可能在我的 VPS 上将 Ubuntu 16.04 升级到 18.04,因为它在启动时崩溃。我只有 Virtuozzo 来调试,我找不到它崩溃的点,所以升级到 18.04 还不是一个选项。)

到目前为止我的步骤:

我已经安装了所有用于构建的程序(git、build Essential、libtool、bison 和 re2c)。

我从 GitHub 克隆了 git:

git clone https://github.com/php/php-src.git 
Run Code Online (Sandbox Code Playgroud)

然后我选择了我想要的分支:

git checkout PHP-7.3 
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

./buildconf
Run Code Online (Sandbox Code Playgroud)

你下一步怎么做?

我需要以下软件包:

  php7.3
  libapache2-mod-php7.3
  php7.3-mysql
  mysql-server

我没有搜索 PPA,因为我想自己做,以便边做边学。

kar*_*rel 11

  1. 安装依赖项。

    Ubuntu 16.04:

    sudo apt install autoconf automake bison build-essential curl flex \
      libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 \
      libreadline-dev libsqlite3-dev libzip-dev libzip4 nginx openssl \
      pkg-config re2c sqlite3 zlib1g-dev libonig2 libonig-dev
    
    Run Code Online (Sandbox Code Playgroud)

    Ubuntu 18.04

    sudo apt install autoconf automake bison build-essential curl flex \
      libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 \
      libreadline-dev libsqlite3-dev libzip-dev libzip4 nginx openssl \
      pkg-config re2c sqlite3 zlib1g-dev libonig4 libonig-dev
    
    Run Code Online (Sandbox Code Playgroud)

    Ubuntu 20.04

    sudo apt install autoconf automake bison build-essential curl flex \
      libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline8 \
      libreadline-dev libsqlite3-dev libzip-dev libzip5 nginx openssl \
      pkg-config re2c sqlite3 zlib1g-dev libonig5 libonig-dev
    
    Run Code Online (Sandbox Code Playgroud)

    因此,您不会覆盖系统上任何现有的 PHP 安装,而是将 PHP 安装在您的主目录中。为 PHP 二进制文件创建一个目录。

     mkdir -p ~/bin/php7-latest/
    
    Run Code Online (Sandbox Code Playgroud)
  2. GitHub下载 PHP 7.3 ,解压,然后将目录更改cd为新目录。您也可以从php.net/downloads.php下载 PHP 7.3,安装说明完全相同。通常,这将是下载 PHP 7.3 的首选方式,但我在此答案中使用来自https://github.com/php/的 PHP 7.3,以匹配问题中询问的 PHP 7.3 存档。

  3. 配置 PHP。删除您不需要的任何选项(如 MySQL 或 Postgres (--with-pdo-pgsql))

     ./configure --prefix=$HOME/bin/php-latest \
         --enable-mysqlnd \
         --with-pdo-mysql \
         --with-pdo-mysql=mysqlnd \
         --with-pdo-pgsql=/usr/bin/pg_config \
         --enable-bcmath \
         --enable-fpm \
         --with-fpm-user=www-data \
         --with-fpm-group=www-data \
         --enable-mbstring \
         --enable-phpdbg \
         --enable-shmop \
         --enable-sockets \
         --enable-sysvmsg \
         --enable-sysvsem \
         --enable-sysvshm \
         --enable-zip \
         --with-libzip=/usr/lib/x86_64-linux-gnu \
         --with-zlib \
         --with-curl \
         --with-pear \
         --with-openssl \
         --enable-pcntl \
         --with-readline
    
    Run Code Online (Sandbox Code Playgroud)

    可能您不需要删除任何选项,除非--with-pdo-pgsql=/usr/bin/pg_config未安装 PostgreSQL。如果您不删除特定于未安装包的选项,则此命令将返回一条错误消息,告诉您必须删除哪个选项才能成功运行该命令。

  4. 编译二进制文件:

    make # wait until make is finished
    
    Run Code Online (Sandbox Code Playgroud)

    当 make 完成时,您将看到以下消息:

    sudo apt install autoconf automake bison build-essential curl flex \
      libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 \
      libreadline-dev libsqlite3-dev libzip-dev libzip4 nginx openssl \
      pkg-config re2c sqlite3 zlib1g-dev libonig2 libonig-dev
    
    Run Code Online (Sandbox Code Playgroud)

    警告:make test需要很长时间才能完成,所以不要在电脑繁忙的时候运行它。

    sudo apt install autoconf automake bison build-essential curl flex \
      libtool libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 \
      libreadline-dev libsqlite3-dev libzip-dev libzip4 nginx openssl \
      pkg-config re2c sqlite3 zlib1g-dev libonig4 libonig-dev
    
    Run Code Online (Sandbox Code Playgroud)
  5. 将 PHP.ini 文件复制到安装目录

    cp php.ini-development ~/bin/php-latest/lib/
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重命名两个文件。

    cd ~/bin/php-latest/etc/  
    mv php-fpm.conf.default php-fpm.conf
    mv php-fpm.d/www.conf.default php-fpm.d/www.conf
    
    Run Code Online (Sandbox Code Playgroud)
  7. 为您的二进制文件创建符号链接。

    cd ~/bin
    ln -s php-latest/bin/php php
    ln -s php-latest/bin/php-cgi php-cgi
    ln -s php-latest/bin/php-config php-config
    ln -s php-latest/bin/phpize phpize
    ln -s php-latest/bin/phar.phar phar
    ln -s php-latest/bin/pear pear
    ln -s php-latest/bin/phpdbg phpdbg
    ln -s php-latest/sbin/php-fpm php-fpm
    
    Run Code Online (Sandbox Code Playgroud)
  8. 将您的本地 PHP 链接到 php 命令。您需要注销然后重新登录 php 才能切换到本地版本,而不是从默认的 Ubuntu 存储库中安装的版本。

    # add this to .bashrc
    if [ -d "$HOME/bin" ] ; then
      PATH="$HOME/bin:$PATH"
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  9. 启动 PHP-FPM

    sudo ~/bin/php-latest/sbin/php-fpm  
    
    Run Code Online (Sandbox Code Playgroud)

    如果您在没有 sudo 的情况下以普通用户身份运行上述命令,它将显示以下通知:

    NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root.    
    NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root.    
    
    Run Code Online (Sandbox Code Playgroud)

来源:来自https://github.com/php/php-src.git 的php-src-master 目录中的安装文件包含指向https://php.net/install的链接,这些说明是从该链接中修订的。除了几个小的修订之外,我还添加了有关如何在您的主目录中本地安装 PHP 7.3 而不需要 root 权限的信息。