How to Install PHP 7.3 on an Arch Linux Webserver

Updated on May 31, 2019
How to Install PHP 7.3 on an Arch Linux Webserver header image

Prerequisites

  • A Vultr server running up to date Arch Linux (see this article.)
  • A running webserver, either Apache or Nginx
  • Sudo access.
  • Commands required to be ran as root are prefixed by #. The recommended way to run commands as root is to, as a regular user, prefix each of them with sudo.
  • Have a text editor installed, and be familiar with it, such as vi, vim, nano, emacs or a similar editor

Install PHP 7.3 On Your Webserver

Install PHP and FastCGI for PHP:

# pacman -S php-fpm

Visit PHP's timezone list

Set your timezone. For example, if you chose the category "America" and wanted to use "New_York", edit /etc/php/php.ini and set the following:

date.timezone = America/New_York

Start FastCGI for PHP, and make it start after every boot:

# systemctl enable --now php-fpm

Configure PHP for your webserver.

For Apache

Create the file /etc/httpd/conf/extra/php-fpm.conf, with the following contents. Make sure to copy this exactly as-is; a common error is putting spaces around the pipe character, but this is not a shell command, and there can be no spaces:

DirectoryIndex index.php index.html
<FilesMatch \.php$>
    SetHandler "proxy:unix:/run/php-fpm/php-fpm.sock|fcgi://localhost/"
</FilesMatch>

Allow Apache to use FastCGI by editing /etc/httpd/conf/httpd.conf, and add the following to the end of the LoadModule list:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

To allow using .php files on all websites hosted by Apache, edit /etc/httpd/conf/httpd.conf, and add this to the end. If you're running multiple host directories; for example, virtual hosts, or separate HTTP/HTTPS directories; and you want to only allow .php files on some of them, edit their configuration files. Within the VirtualHost block, add the following:

Include conf/extra/php-fpm.conf

Finally, restart Apache:

# systemctl restart httpd

For Nginx

Allow Nginx to use FastCGI for PHP by creating the file /etc/nginx/php.conf with the following contents:

# Correctly handle request like /test.php/foo/blah.php or /test.php/
fastcgi_split_path_info ^(.+?\.php)(/.*)$;

try_files $uri $document_root$fastcgi_script_name =404;

# Mitigate <nowiki>https://httpoxy.org/</nowiki> vulnerabilities
fastcgi_param HTTP_PROXY "";

fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;

Allow Nginx to use FastCGI by editing /etc/nginx/nginx.conf, and to every server block you want to use PHP with, add the following. Alternatively, if you are using virtual hosts, edit each host's configuration file:

location ~ \.php$ {
    root         /usr/share/nginx/html/;
    include      php.conf;
}

Restart Nginx:

# systemctl restart nginx

Test PHP

Within the appropriate directory, create test.php with the following contents:

<?php phpinfo(); ?>

In a web browser, visit http://YOUR-SERVER-WEB-ADDRESS-OR-IP/test.php, and you will see a webpage with your PHP version and configuration.

Remember to delete the test.php test file you just created.