PHP

Introduction

PHP is a server-side scripting language designed primarily for web development but also used as a general-purpose programming language.


Versions

Release types

Each release branch of PHP is fully supported for two years beginning with its initial stable release. We provide different point releases and apply security updates on a regular basis. Currently, these PHP versions are available: 5.6, 7.0, 7.1, and 7.2.

Standard version

If you don’t select a certain version, our default will be used. We decided to default to version 7.1, which is considered to be stable by the developers.

Show available versions

Use uberspace tools version list php to show all selectable versions:

[eliza@dolittle ~]$ uberspace tools version list php
- 5.6
- 7.0
- 7.1
- 7.2
[eliza@dolittle ~]$

Change version

You can select the PHP version with uberspace tools version use php <version>. You can choose between release branches:

[eliza@dolittle ~]$ uberspace tools version use php 7.1
Selected PHP version 7.1
The new configuration is adapted immediately. Patch updates will be applied automatically.
[eliza@dolittle ~]$
[eliza@dolittle ~]$ uberspace tools version use php 5.6
Selected PHP version 5.6
The new configuration is adapted immediately. Patch updates will be applied automatically.
[eliza@dolittle ~]$

Selected version

You can check the selected version by executing uberspace tools version show php on the command line:

[eliza@dolittle ~]$ uberspace tools version show php
Using 'PHP' version: '7.1'
[eliza@dolittle ~]$

Update policy

We update all versions on a regular basis. Once the security support ends, the branch reaches its end of life, is no longer supported and will be removed from our servers.

Branch State Security Support Until
5.6 Security fixes only 31 Dec 2018
7.0 Active support 3 Dec 2018
7.1 Active support 1 Dec 2019
7.2 Active support 30 Nov 2020

Connection to webserver

We use the PHP FastCGI Process Manager (FPM) to connect the PHP interpreter to the webserver. Every user has its own PHP-FPM instance that is always running with the following configuration:

pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 900s;
; The number of requests each child process should execute before respawning.
pm.max_requests = 500

How to publish

Put your PHP files into your DocumentRoot. The file extension should be .php. For security reasons we don’t parse PHP code in every file.


Configuration

Provided configuration

We use a standard php.ini configuration with minimal modifications to fit the needs of popular software:

realpath_cache_ttl = 300
max_execution_time = 600
max_input_time = 600
max_input_vars = 1500
memory_limit = 256M
date.timezone = Europe/Berlin

We also set the timezone so error logs have the correct times.

Own configuration

There are two configuration directories for php.ini files in your uberspace account: ~/etc/php.d and ~/etc/php.early.d. In most cases, you will only need ~/etc/php.d, but some applications require their directives to be at the start of the configuration. Only in those cases will you need ~/etc/php.early.d.

~/etc/php.d

This is the default directory for php.ini files. Any files inside this directory will be loaded additonally to the existing, global configuration and will overwrite the default values.

~/etc/php.early.d

If your application requires its directives to be loaded before the rest of the configuration, create the ~/etc/php.early.d directory. Then put these directives into a .ini file and place it there.

Tip

You need to reload PHP whenever you change your configuration files: uberspace tools restart php checks your configuration for sanity and restarts your PHP instance.

You can adjust configuration directives for all modes: PHP_INI_SYSTEM, PHP_INI_USER, PHP_INI_PERDIR and PHP_INI_ALL. Put as many directives as you want into these files.

Example

In the configuration we set timezone to Europe/Berlin. Let’s say you want to set the timezone directive to UTC: Create a file ~/etc/php.d/timezone.ini with your new settings and reload your configuration.

When there is an error in your configuration, uberspace tools restart php tells you what to do. In this case we won’t reload your configuration to make sure the invalid configuration does not break your PHP setup.

In this case fix the value and run uberspace tools restart php again.

[eliza@dolittle ~]$ php -i | grep date.timezone
date.timezone => Europe/Berlin => Europe/Berlin
[eliza@dolittle ~]$ echo "date.timezone = UTC" > ~/etc/php.d/timezone.ini
[eliza@dolittle ~]$ uberspace tools restart php
Your php configuration has been loaded.
[eliza@dolittle ~]$ php -i | grep date.timezone
date.timezone => UTC => UTC
[eliza@dolittle ~]$ cat ~/etc/php.d/timezone.ini
date.timezone = idontexist
[eliza@dolittle ~]$ uberspace tools restart php
Your php configuration is invalid an cannot be loaded. Please examine the following output.

PHP Warning:  Unknown: Invalid date.timezone value 'idontexist', we selected the timezone 'UTC' for now. in Unknown on line 0

Provided modules

We provide the following modules: bcmath, gd, gmp, imagick, imap, intl, json, ldap, mbstring, mcrypt, mysqlnd, pear, pecl-apcu, pecl-gnupg, pecl-zip, pgsql, posix, process, shmop, soap, sysvmsg, sysvsem, sysvshm, tidy, xml, xmlrpc.


Debugging

  • If you want to debug your PHP application, the errorlog is a good place to start.
  • Make sure your application is compatible with the selected PHP version.