Have Composer auto-load PEAR's code (e.g. PEAR.php) for archive_tar from within vendor directory?

StackOverflow https://stackoverflow.com/questions/22461430

  •  16-06-2023
  •  | 
  •  

Question

I have a development machine with PEAR installed on it (in /usr/share/php/PEAR.php) and a production system without PEAR installed on it.

On the production box, I get this error that I don't get on the dev machine:

A PHP Error was encountered
Severity: Warning
Message: require_once(PEAR.php): failed to open stream: No such file or directory
Filename: Archive/Tar.php
Line Number: 42
Fatal error: require_once(): Failed opening required 'PEAR.php' (include_path='.:') in /www/application/vendor/pear/archive_tar/Archive/Tar.php on line 42

See line 42 here: https://github.com/pear/Archive_Tar/blob/master/Archive/Tar.php#L42

I don't want to install PEAR on the production box because it's installed system wide. It seems much cleaner to me if I can install PEAR.php and all its associated files from composer itself.

All the questions relating to Composer and PEAR that I can find are related to installing the package from Composer.

But what I want to do is have Composer auto-load the PEAR code from within the project's vendor directory so that I don't have to globally install PEAR on the production system.

There's a practically identical question here: How do I get PEAR.php with Composer?

But it looks like he's accepted his own answer which didn't even fix the problem.

My composer.json looks like:

{
    "require": {
        "pear/archive_tar": "*",
    }
}

It seems like, if what I propose is possible, I would add "pear/pear" or something to require and it would install the PEAR code itself in the project directory, but I can't find such a package.

Was it helpful?

Solution

Eventually found a Github gist where someone listed "pear-pear/PEAR" as the package you need:

}
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.php.net"
        }
    ],
    "require": {
        "pear-pear/PEAR": "*",
        "pear/archive_tar": "*"
    }
}

OTHER TIPS

I found the secret sauce: Composer doesn't actually seem to honor 'pear' as the alias for pear.php.net. So if you want pear (but not pear2)-style dependencies, here's my snippet:

"repositories": [
    {
        "type": "pear",
        "url": "https://pear.php.net"
    }
],
"require": {
    "pear-pear.php.net/PEAR": "*",
    "pear-pear.php.net/archite_tar": "*"
}

Note that the url must be 'https' or composer will complain and/or fail.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top