如何在 Debian Linux 8.x/7.x 上安装 PHP 7 [jessie/wheezy]
PHP 7 是一种用于交付应用程序的动态脚本语言。与 PHP 5.6 相比,您可以获得 2 倍的性能和 50% 的内存消耗,从而让您无需添加任何硬件即可为更多并发用户提供服务。但是,Debian 8.x 稳定版不包含 PHP 7。在本教程中,您将了解如何在 Debian 8.7 服务器上安装 PHP 7。请注意,Debian 9.0“Stretch”默认包含 PHP 7。
相关:如何在 Ubuntu Linux 14.04 LTS 上安装 PHP 7
在 Debian 8.7 上安装 PHP 7 的步骤
- 首先,删除旧版 PHP 5.6
- 配置 dotdeb 是 PHP 7 的额外存储库
- 安装 PHP 7
- 重新配置 Web 服务器
- 重启 Web 服务器
要列出您的 Debian 版本,请输入:
使用以下语法保存现有配置文件:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.7 (jessie)
Release: 8.7
Codename: jessie
$ sudo tar zcvf /root/etc.backup.tar.gz /etc/
步骤#1:删除旧的php 5.6(如果已安装)
首先,列出所有已安装的旧 php 5.x 包,输入:
$ dpkg --list | grep php | awk '/^ii/{ print $2}'
示例输出:
图 01:Debian Linux 列出系统上安装的 PHP 包
$ x="$(dpkg --list | grep php | awk '/^ii/{ print $2}')"
$ sudo apt-get --purge remove $x
图 02:删除旧的 php 5.6 包
步骤2:配置dotdeb
Dotdeb 是一个额外的存储库,为您的 Debian 服务器提供最新的软件包(例如 PHP 7 等)。它支持 Debian 8.x“Jessie”和 Debian 7.x“Wheezy”。
Debian 8.x “Jessie”的配置
以 root 用户身份将以下两行附加到 /etc/apt/sources.list::
保存并关闭文件。这是我更新的文件:
示例输出:
$ sudo -s
# echo 'deb http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
# echo 'deb-src http://packages.dotdeb.org jessie all' >> /etc/apt/sources.list
$ cat /etc/apt/sources.list
图 03:针对 Debian 8.x“jessie” 更新 /etc/apt/sources.list。
Debian 7.x “Wheezy”的配置
/etc/apt/sources.list以 root 用户身份附加以下两行:
保存并关闭文件。
$ sudo -s
# echo 'deb http://packages.dotdeb.org wheezy all' >> /etc/apt/sources.list
# echo 'deb-src http://packages.dotdeb.org wheezy all' >> /etc/apt/sources.list
自2017 年 2 月 15 日起,上述针对 Debian 7.x “Wheezy” 的说明不再有效。请使用以下说明从源代码编译 PHP 7:
下载和编译所有内容需要一些时间。最后您应该会看到以下内容:
$ sudo apt-get install git
$ cd /tmp
$ git clone https://github.com/kasparsd/php-7-debian.git
$ cd php-7-debian/
$ ./build.sh
Generating phar.php Generating phar.phar PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. invertedregexiterator.inc pharcommand.inc directorytreeiterator.inc clicommand.inc directorygraphiterator.inc phar.inc Build complete. Don't forget to run 'make test'. Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/ Installing PHP CLI binary: /usr/local/php7/bin/ Installing PHP CLI man page: /usr/local/php7/php/man/man1/ Installing PHP FPM binary: /usr/local/php7/sbin/ Installing PHP FPM config: /usr/local/php7/etc/ Installing PHP FPM man page: /usr/local/php7/php/man/man8/ Installing PHP FPM status page: /usr/local/php7/php/php/fpm/ Installing phpdbg binary: /usr/local/php7/bin/ Installing phpdbg man page: /usr/local/php7/php/man/man1/ Installing PHP CGI binary: /usr/local/php7/bin/ Installing PHP CGI man page: /usr/local/php7/php/man/man1/ Installing build environment: /usr/local/php7/lib/php/build/ Installing header files: /usr/local/php7/include/php/ Installing helper programs: /usr/local/php7/bin/ program: phpize program: php-config Installing man pages: /usr/local/php7/php/man/man1/ page: phpize.1 page: php-config.1 /tmp/php-7-debian/php-src/build/shtool install -c ext/phar/phar.phar /usr/local/php7/bin ln -s -f phar.phar /usr/local/php7/bin/phar Installing PDO headers: /usr/local/php7/include/php/ext/pdo/
要在 Debian 7.x 上安装 PHP 7:
$ sudo ./install.sh
示例输出:
update-rc.d: using dependency based boot sequencing
您可以验证 PHP 版本:
所有 PHP 配置文件都存储在 /usr/local/php7 下:
$ /usr/local/php7/bin/php --version
PHP 7.1.1 (cli) (built: Feb 15 2017 18:49:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.1, Copyright (c) 1999-2017, by Zend Technologies
/usr/local/php7/lib/php.ini /usr/local/php7/etc/php-fpm.conf /usr/local/php7/etc/php-fpm.d/www.conf /usr/local/php7/etc/conf.d/modules.ini
当 Debian init 脚本被添加到:
/etc/init.d/php7-fpm
有关在 Debian 7.x 上使用 PHP 7 的更多信息,请参阅此页面。以下其余说明仅适用于 Debian 版本 8.x。
步骤 3:获取并安装 GnuPG 密钥(仅限“jessie”)
输入以下命令
刷新 apt 数据库以包含新包:
示例输出:
$ cd /tmp
$ wget https://www.dotdeb.org/dotdeb.gpg
$ sudo apt-key add dotdeb.gpg
$ rm dotdeb.gpg
$ sudo apt-get update
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB] Ign http://ftp.us.debian.org stable InRelease Get:2 http://packages.dotdeb.org jessie InRelease [9,840 B] Hit http://ftp.debian.org jessie-updates InRelease Hit http://ftp.us.debian.org stable Release.gpg Get:3 http://packages.dotdeb.org jessie/all Sources [30.0 kB] Get:4 http://ftp.debian.org jessie-updates/main amd64 Packages/DiffIndex [5,932 B] Hit http://ftp.us.debian.org stable Release Get:5 http://security.debian.org jessie/updates/main amd64 Packages [313 kB] Hit http://ftp.debian.org jessie-updates/contrib amd64 Packages Hit http://ftp.us.debian.org stable/main amd64 Packages Get:6 http://packages.dotdeb.org jessie/all amd64 Packages [111 kB] Get:7 http://ftp.debian.org jessie-updates/non-free amd64 Packages/DiffIndex [736 B] Hit http://ftp.us.debian.org stable/contrib amd64 Packages Get:8 http://security.debian.org jessie/updates/contrib amd64 Packages [2,506 B] Hit http://ftp.debian.org jessie-updates/contrib Translation-en Hit http://ftp.us.debian.org stable/non-free amd64 Packages Get:9 http://ftp.debian.org jessie-updates/main Translation-en/DiffIndex [2,704 B] Get:10 http://security.debian.org jessie/updates/non-free amd64 Packages [14 B] Get:11 http://security.debian.org jessie/updates/contrib Translation-en [1,211 B] Hit http://ftp.us.debian.org stable/contrib Translation-en Get:12 http://ftp.debian.org jessie-updates/non-free Translation-en/DiffIndex [736 B] Get:13 http://security.debian.org jessie/updates/main Translation-en [168 kB] Hit http://ftp.us.debian.org stable/main Translation-en Get:14 http://security.debian.org jessie/updates/non-free Translation-en [14 B] Hit http://ftp.us.debian.org stable/non-free Translation-en Ign http://packages.dotdeb.org jessie/all Translation-en_IN Ign http://packages.dotdeb.org jessie/all Translation-en Fetched 708 kB in 10s (69.8 kB/s) Reading package lists... Done
步骤#4:安装 PHP 7(仅限“jessie”)
您在步骤 #1 中创建了一个名为 $x 的 shell 变量。要安装 php5 包的等效项,请输入:
示例输出:
$ y="$(sed 's/php5/php7.0/g' <<$x)"
$ echo Old PHP5 packages name: $x
Old PHP5 packages name: libapache2-mod-php5 php-pear php5 php5-cgi php5-cli php5-common php5-fpm php5-gd php5-json php5-mysql php5-readline
$ echo New PHP7 packages name: $y
New PHP7 packages name: libapache2-mod-php7.0 php-pear php7.0 php7.0-cgi php7.0-cli php7.0-common php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-readline
$ sudo apt-get install $y
图 4:在我的 Debain 8.7 服务器上安装 PHP7
如何搜索 PHP7 包(仅限“jessie”)?
$ apt-cache search php7.0-\*
$ apt-cache search php7.0-\* | grep -i mysql
第一个命令的示例输出:
libapache2-mod-php7.0 - server-side, HTML-embedded scripting language (Apache 2 module) libphp7.0-embed - HTML-embedded scripting language (Embedded SAPI library) php-all-dev - package depending on all supported PHP development packages php7.0 - server-side, HTML-embedded scripting language (metapackage) php7.0-apcu - APC User Cache for PHP php7.0-apcu-bc - APCu Backwards Compatibility Module php7.0-bcmath - Bcmath module for PHP php7.0-bz2 - bzip2 module for PHP php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary) php7.0-cli - command-line interpreter for the PHP scripting language php7.0-common - documentation, examples and common module for PHP php7.0-curl - CURL module for PHP php7.0-dba - DBA module for PHP php7.0-dbg - Debug symbols for PHP7.0 php7.0-dev - Files for PHP7.0 module development php7.0-enchant - Enchant module for PHP php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary) php7.0-gd - GD module for PHP php7.0-geoip - GeoIP module for PHP php7.0-gmp - GMP module for PHP php7.0-igbinary - igbinary serializer for PHP php7.0-imagick - Provides a wrapper to the ImageMagick library php7.0-imap - IMAP module for PHP php7.0-interbase - Interbase module for PHP php7.0-intl - Internationalisation module for PHP php7.0-json - JSON module for PHP php7.0-ldap - LDAP module for PHP php7.0-mbstring - MBSTRING module for PHP php7.0-mcrypt - libmcrypt module for PHP php7.0-memcached - memcached extension module for PHP, uses libmemcached php7.0-mongodb - MongoDB driver for PHP php7.0-msgpack - MessagePack serializer for PHP php7.0-mysql - MySQL module for PHP php7.0-odbc - ODBC module for PHP php7.0-opcache - Zend OpCache module for PHP php7.0-pgsql - PostgreSQL module for PHP php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary) php7.0-pspell - pspell module for PHP php7.0-readline - readline module for PHP php7.0-recode - recode module for PHP php7.0-redis - PHP extension for interfacing with Redis php7.0-snmp - SNMP module for PHP php7.0-soap - SOAP module for PHP php7.0-sqlite3 - SQLite3 module for PHP php7.0-ssh2 - Bindings for the libssh2 library php7.0-sybase - Sybase module for PHP php7.0-tidy - tidy module for PHP php7.0-xdebug - Xdebug Module for PHP php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP php7.0-xmlrpc - XMLRPC-EPI module for PHP php7.0-xsl - XSL module for PHP (dummy) php7.0-zip - Zip module for PHP
如何单独安装 PHP7 包?
或者,你也可以只安装所需的 PHP7 包。在此示例中,安装 php7、php-fpm、php7-mysql 和 php7-gd:
$ sudo apt-get install php7.0 php7.0-fpm php7.0-gd php7.0-mysql
让我们检查 PHP 版本,运行:
php -v
php --version
步骤#5:重新配置 Web 服务器和 php 7(仅限“jessie”)
您的 php7 配置文件位于 /etc/php/7.0/ 目录中,如下所示:
- /etc/php/7.0/apache2/ – 带有 Apache 2 的 PHP 7
- /etc/php/7.0/fpm/ – 适用于 Nginx/Lighttpd/Apache2 和其他服务器的 PHP 7 fpm。
- /etc/php/7.0/mods-available/ – 所有 PHP 模块(如 gd/mysql/memecached 等)的 php ini 配置文件。
您需要根据您的设置编辑文件并配置 Web 服务器。
示例:配置 Lighttpd Web 服务器以使用 PHP 7
编辑/etc/lighttpd/conf-enabled/15-fastcgi-php.conf文件,输入:
$ sudo vi /etc/lighttpd/conf-enabled/15-fastcgi-php.conf
附加/编辑如下(注意更新的/run/php/php7.0-fpm.sock路径):
fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/run/php/php7.0-fpm.sock", "max-procs" => 1, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "4", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" )) )
保存并关闭文件。按照步骤6重新启动Web服务器。
示例:配置 Nginx Web 服务器以使用 PHP 7
编辑/etc/nginx/sites-enabled/default文件,输入:
$ sudo vi /etc/nginx/sites-enabled/default
首先在文件顶部添加以下内容:
# Upstream to abstract backend connection(s) for PHP 7. upstream myphpsevenbackend { server unix:/run/php/php7.0-fpm.sock; }
接下来,找到服务器块并进行如下更新/编辑/附加操作:
# Pass all .php files onto a php-fpm/php-fcgi server. # index index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in php.ini (default) # include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass myphpsevenbackend; }
保存并关闭文件。按照步骤6重新启动Web服务器。
示例:配置 Apache 2 Web 服务器以使用 PHP 7(仅限“jessie”)
要在 Apache2 中启用 PHP 7.0 FPM,请输入:
按照步骤#6 重新启动 Web 服务器。
$ sudo a2enmod proxy_fcgi setenvif
Considering dependency proxy for proxy_fcgi:
Enabling module proxy.
Enabling module proxy_fcgi.
Module setenvif already enabled
To activate the new configuration, you need to run:
service apache2 restart
$ sudo a2enconf php7.0-fpm
Enabling conf php7.0-fpm.
To activate the new configuration, you need to run:
service apache2 reload
步骤#6:重新启动Web服务器
如果您使用的是 lighttpd 网络服务器,请输入:
$ sudo systemctl restart lighttpd.service
如果您使用的是 Nginx 网络服务器,请输入:
$ sudo systemctl restart nginx.service
如果您使用的是 Apache 2 网络服务器,请输入:
$ sudo systemctl reload apache2.service
测试您的设置
在您的 DocumentRoot 中创建一个名为 test.php 的文件(例如 /var/www/html/test.php):
<?php /* test.php */ phpinfo(); ?>
保存并关闭文件。打开 Web 浏览器并输入 url:
http://your-domain/test.php
或
http://server.ip.address.here/test.php
示例输出:
图 05:phpinfo() 显示有关 PHP 7 的信息
如何停止/启动/重新启动 php7.0-fpm(仅限“jessie”)?
语法如下
$ sudo systemctl stop php7.0-fpm.service
$ sudo systemctl start php7.0-fpm.service
$ sudo systemctl restart php7.0-fpm.service
$ sudo systemctl reload php7.0-fpm.service
关于 php7.0-fpm 配置文件的说明(仅限“jessie”)
- /etc/php/7.0/fpm/php.ini– PHP 7 配置文件。
- /etc/php/7.0/fpm/php-fpm.conf– PHP 7 FPM 配置文件。
- /etc/php/7.0/fpm/pool.d/www.conf– PHP 7 FPM 的默认池。在这里您可以定义用户/组、FastCGI 请求路径、进程管理器和子进程值、php 错误文件、内存限制等等。
无论何时对上述任何一个文件进行更改,请使用以下语法重新加载/重新启动 php7.0-fpm.service:
$ sudo systemctl reload php7.0-fpm.service
因此,您已成功在 Debian Linux 7.x 或 8.x 服务器上启用并配置了 PHP 7。