Installing from packages on Debian GNU/Linux and related distributions

While PHP can be installed from source, it is also available through packages from » Debian GNU/Linux. This is also true for other distributions based on Debian, such as Ubuntu, Kali Linux, and Linux Mint.

Warning

Builds from third-parties are considered unofficial and not directly supported by the PHP project. Any bugs encountered should be reported to the provider of those unofficial builds unless they can be reproduced using the builds from » the official download area.

The packages can be installed using either the apt or aptitude commands. This manual page uses these two commands interchangeably.

Using APT

First, note that other related packages may be desired like libapache-mod-php to integrate with Apache 2, and php-pear for PEAR.

Second, before installing a package, it's wise to ensure the package list is up to date. Typically, this is done by running the command apt update.

Example #1 Debian Install Example with Apache 2

# apt install php-common libapache2-mod-php php-cli

APT will automatically install the PHP module for Apache 2 and all of its dependencies, and then activate it. Apache should be restarted in order for the changes take place. For example:

Example #2 Stopping and starting Apache once PHP is installed

# /etc/init.d/apache2 stop
# /etc/init.d/apache2 start

Better control of configuration

In the last section, PHP was installed with only core modules. It's very likely that additional modules will be desired, such as MySQL, cURL, GD, etc. These may also be installed via the apt command.

Example #3 Methods for listing additional PHP packages

# apt-cache search php
# apt search php | grep -i mysql
# aptitude search php

The list of packages will include a large number of packages that includes basic PHP components, such as php-cgi, php-cli, and php-dev, as well as many PHP extensions. When extensions are installed, additional packages will be automatically installed as necessary to satisfy the dependencies of those packages.

Example #4 Install PHP with MySQL, cURL

# apt install php-mysql php-curl

APT will automatically add the appropriate lines to the different php.ini related files like /etc/php/7.4/php.ini, /etc/php/7.4/conf.d/*.ini, etc. and depending on the extension will add entries similar to extension=foo.so. However, restarting the web server (like Apache) is required before these changes take affect.

Common Problems

  • If the PHP scripts are not parsing via the web server, then it's likely that PHP was not added to the web server's configuration file, which on Debian may be /etc/apache2/apache2.conf or similar. See the Debian manual for further details.
  • If an extension was seemingly installed yet the functions are undefined, be sure that the appropriate ini file is being loaded and/or the web server was restarted after installation.
add a note

User Contributed Notes 2 notes

up
73
thumbs at apache dot org
12 years ago
To refresh this document, perhaps it would be worth mentioning more modern methods to serve php content under apache httpd.Specifically, the preferred method is now fastcgi, using either of those recipes:(mod_fastcgi, httpd 2.2)http://wiki.apache.org/httpd/php-fastcgi(mod_fcgid, httpd 2.2)http://wiki.apache.org/httpd/php-fcgid(mod_proxy_fcgi, httpd 2.4)http://wiki.apache.org/httpd/PHP-FPMWhile the legacy mod_php approach is still applicable for some older installations, the fastcgi method is much faster, and require much less RAM to operate, based on similar traffic patterns.Thank you!
up
42
kearney dot taaffe at gmail dot com
7 years ago
Compiling PHP on Ubuntu boxes.If you would like to compile PHP from source as opposed to relying on package maintainers, here's a list of packages, and commands you can runSTEP 1:sudo apt-get install autoconf build-essential curl libtool \  libssl-dev libcurl4-openssl-dev libxml2-dev libreadline7 \  libreadline-dev libzip-dev libzip4 nginx openssl \  pkg-config zlib1g-devSo you don't overwrite any existing PHP installs on your system, install PHP in your home directory. Create a directory for the PHP binaries to live    mkdir -p ~/bin/php7-latest/STEP 2:# download the latest PHP tarball, decompress it, then cd to the new directory.STEP 3:Configure PHP. Remove any options you don't need (like MySQL or 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-readlineSTEP 4:compile the binaries by typing: makeIf no errors, install by typing: make installSTEP 5:Copy the PHP.ini file to the install directory    cp php.ini-development ~/bin/php-latest/lib/ STEP 6:cd ~/bin/php-latest/etc; mv php-fpm.conf.default php-fpm.confmv php-fpm.d/www.conf.default php-fpm.d/www.confSTEP 7:create symbolic links for your for your binary files   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-fpmSTEP 8: link your local PHP to the php command. You will need to logout then log back in for php to switch to the local version instead of the installed version# add this to .bashrcif [ -d "$HOME/bin" ] ; then  PATH="$HOME/bin:$PATH"fiSTEP 9: Start PHP-FPM    sudo ~/bin/php7/sbin/php-fpm
To Top