Files
php-the-right-way/_posts/04-03-01-PEAR.md
Peter Kokot a494f29d9a Fix PEAR with Composer
Composer version 2 removed PEAR support.
2023-01-27 08:47:55 +01:00

3.5 KiB

title, isChild, anchor
title isChild anchor
PEAR true pear

PEAR

A veteran package manager that some PHP developers enjoy is [PEAR][1]. It behaves similarly to Composer, but has some notable differences.

PEAR requires each package to have a specific structure, which means that the author of the package must prepare it for usage with PEAR. Using a project which was not prepared to work with PEAR is not possible.

PEAR installs packages globally, which means after installing them once they are available to all projects on that server. This can be good if many projects rely on the same package with the same version but might lead to problems if version conflicts between two projects arise.

How to install PEAR

You can install PEAR by downloading the .phar installer and executing it. The PEAR documentation has detailed [install instructions][2] for every operating system.

If you are using Linux, you can also have a look at your distribution package manager. Debian and Ubuntu, for example, have an apt php-pear package.

How to install a package

If the package is listed on the [PEAR packages list][3], you can install it by specifying the official name:

{% highlight console %} pear install foo {% endhighlight %}

If the package is hosted on another channel, you need to discover the channel first and also specify it when installing. See the [Using channel docs][4] for more information on this topic.

  • [Learn about PEAR][1]

Handling PEAR dependencies with Composer

If you are already using [Composer][5] and you would like to install some PEAR code too, you can use Composer to handle your PEAR dependencies. PEAR repositories are no longer directly supported by Composer version 2, so you must manually add a repository to install PEAR packages:

{% highlight json %} { "repositories": [ { "type": "package", "package": { "name": "pear2/pear2-http-request", "version": "2.5.1", "dist": { "url": "https://github.com/pear2/HTTP_Request/archive/refs/heads/master.zip", "type": "zip" } } } ], "require": { "pear2/pear2-http-request": "*" }, "autoload": { "psr-4": {"PEAR2\HTTP\": "vendor/pear2/pear2-http-request/src/HTTP/"} } } {% endhighlight %}

The first section "repositories" will be used to let Composer know it should "initialize" (or "discover" in PEAR terminology) the pear repo. Then the require section will prefix the package name like this:

pear-channel/package

The "pear" prefix is hardcoded to avoid any conflicts, as a pear channel could be the same as another packages vendor name for example, then the channel short name (or full URL) can be used to reference which channel the package is in.

When this code is installed it will be available in your vendor directory and automatically available through the Composer autoloader:

vendor/pear2/pear2-http-request/pear2/HTTP/Request.php

To use this PEAR package simply reference it like so:

{% highlight php %}

<?php require __DIR__ . '/vendor/autoload.php'; use PEAR2\HTTP\Request; $request = new Request(); {% endhighlight %} * [Learn more about using repositories with Composer][6] [1]: https://pear.php.net/ [2]: https://pear.php.net/manual/installation.getting.php [3]: https://pear.php.net/packages.php [4]: https://pear.php.net/manual/guide.users.commandline.channels.php [5]: /#composer_and_packagist [6]: https://getcomposer.org/doc/05-repositories.md