francois

Francois Laupretre

Contents

PHP RFC: Allow loading extensions by name

Introduction

This RFC proposes a unified way to configure the list of PHP extensions to load.

Today, 'extension=' and 'zend_extension=' lines in php.ini must contain the extension's file name. Unfortunately, the filename depends on the platform PHP is running on :

  1. On Unix-like environments, the file name has the form '<extension-name>.<suffix>'. <suffix> is 'so' on every system, except HP-UX, where it is 'sl'.
  2. On Windows, the file name has the form 'php_<extension-name>.dll'.

While seasoned PHP administrators are used to this mechanism, this is a real issue for newcomers.

Under Unix/Linux, the typical mistake is to uncomment an 'extension=php_xxx.dll' line in the php.ini file.

On Windows, the situation for newcomers is still more confusing, as the distributed 'php.ini' files wrongly state that the Windows syntax is 'extension=modulename.extension', giving the wrong example of 'extension=mysqli.dll'. Ten lines below, the '.ini' file contains the right ';extension=php_mysql.dll' syntax but these conflicting directives are very confusing.

The issue may also appear when writing documentation and platform-agnostic scripts.

To summarize, I think that a unified syntax to enable extensions on every environment would make the life easier for a lot of people, especially those coming to PHP.

The issue is quite easy to solve because the logic to compute the file name from an extension name is well-known.

Proposal

This RFC proposes an extension to the mechanism used to load PHP and Zend extensions. In addition to file names, it adds support for bare extension name. Note that the current syntax, using file names, remains supported as before.

Example :

extension=bz2
zend_extension=xdebug

'extension=bz2', for example, will cause PHP to load a file named 'php_bz2.dll' on Windows, a file named 'bz2.so' on Linux, and a file named 'bz2.sl' on HP-UX.

Example php.ini files are modified because loading extensions by name becomes the recommended way of configuring additional extensions to load. File names remain supported as legacy.

Cases where the extension name is accepted :

  1. 'extension=' INI setting
  2. 'zend_extension=' INI setting
  3. as argument to the dl() function

Cases where the extension name cannot be used :

  1. The '-z' CLI option still requires an absolute file path.
  2. When specifying an absolute path, a filename must be provided. A line mixing a specific directory with an extension name, like 'extension=/path/to/extensions/bz2', is invalid.

Backward Incompatible Changes

None, as file names remain supported.

Proposed PHP Version(s)

7.2

RFC Impact

To SAPIs

None

To Existing Extensions

None

To Opcache

None

New Constants

None

Open Issues

This RFC does not pretend solving every difference that may exist between Windows and Unix '.ini' configuration files.

Unaffected PHP Functionality

The '-z' CLI option does not support extension names.

Patches and Tests

Implementation

After the project is implemented, this section should contain

  1. the version(s) it was merged to
  2. a link to the git commit(s)
  3. a link to the PHP manual entry for the feature

References

Rejected Features

Keep this updated with features that were discussed on the mail lists.

Votes

An option needs 50%+1 votes to win

Allow loading extensions by name (81% approved)
User Vote
ab No
ashnazg Yes
bishop Yes
bukka Yes
bwoebi Yes
colinodell Yes
davey Yes
derick Yes
dm Yes
emir Yes
francois Yes
galvao Yes
kelunik Yes
krakjoe No
lcobucci No
mrook Yes
pollita No
sammyk Yes
tpunt Yes
trowski Yes
zeev Yes