Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: Class 'Phar' not found

Tags:

php

phar

I try to use the Silex framework as base for my web application. However, if I try to include the *.phar archive, PHP throws the following error:

Fatal error: Class 'Phar' not found in /var/www/framework/silex.phar on line 11

The following relevant lines are in my /etc/php/php.ini (as suggested in the docs of Silex):

extension=phar.so
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off

The PHAR library is present in /usr/lib/php/modules/phar.so which is set as the extension path for all libraries in my php.ini

Does anyone know why PHP is throwing this error?

like image 401
SecStone Avatar asked Jan 13 '12 13:01

SecStone


3 Answers

Try specifying the path to the extension:

php -d extension=phar.so composer.phar <your_script>

Other options:

Based on the information you provided, there are a few possibilities:

  • You are using a different php.ini. Check the output of phpinfo() to confirm, and ensure that you are editing the active one.

  • /usr/lib/php/modules/phar.so is not readable. Ensure that the web server user can read this file.

  • Your web server has not been restarted since you last added the phar-related information to php.ini. Restart your webserver.

like image 57
George Cummins Avatar answered Nov 13 '22 21:11

George Cummins


This works for me:

php -d extension=phar.so composer.phar [... your command ...]

This includes the phar extension for the current runtime. Works for shared / VPC servers.

like image 22
Indivision Dev Avatar answered Nov 13 '22 19:11

Indivision Dev


On CentOS ...

  • phar.so is contained in the php-common package.
  • the phar executable is contained in the php-cli package.
  • php-mbstring and php-bz2 also seems to be required.

When php -m | grep phar returns nothing, one has to add these .ini files for the CLI:

sudo cp /etc/php-zts.d/phar.ini /etc/php-cli.d/phar.ini
sudo cp /etc/php-zts.d/mbstring.ini /etc/php-cli.d/mbstring.ini
sudo cp /etc/php-zts.d/bz2.ini /etc/php-cli.d/bz2.ini

Alternatively, one can add the same module .ini files as the webserver uses:

sudo cp /etc/php-zts.d/* /etc/php-cli.d/

It should look alike this:

$ php --ini

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php-cli.d/
Additional .ini files parsed:      /etc/php-cli.d/bz2.ini,
/etc/php-cli.d/mbstring.ini,
/etc/php-cli.d/phar.ini

Then one can run it:

$ php ./composer.phar
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/

And move it below the $PATH:

sudo mv ./composer.phar /usr/local/bin/composer
like image 1
Martin Zeitler Avatar answered Nov 13 '22 21:11

Martin Zeitler