質問

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?

役に立ちましたか?

解決

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.

他のヒント

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.

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

Hm. I think you need require_once 'phar://silex/silex.phar/autoload.php'; instead of require_once 'silex/silex.phar';. If this is not the case then we need to see the code throwing an error.

in my hosting environment i needed to specify the php version number. EG:

php-5.6 composer.phar

not

php composer.phar

Hope this may shed some light. I was using a shared host and had trouble getting composer to run. I was using this sites directions http://avantidevelopment.com/install-composer-on-bluehost/ to setup a common directory and install composer in it. I followed it but shoud add for my alias I added the following command to .bashrc

alias composer='/ramdisk/php/54/bin/php54-cli ~/common/composer.phar'

That did the trick for me. Hope whoever stumbles on this sets off a light bulb.

For Mageia 4, Mageia 5, Mageia 6 users

>> urpmi php-phar;echo done
To satisfy dependencies, the following packages are going to be installed:
  Package                        Version      Release       Arch
(medium "Core Release2")
  php-bz2                        5.6.30       2.mga6        x86_64
  php-phar                       5.6.30       2.mga6        x86_64
326KB of additional disk space will be used.
151KB of packages will be retrieved.
Proceed with the installation of the 2 packages? (Y/n) y


    $MIRRORLIST: media/core/release/php-bz2-5.6.30-2.mga6.x86_64.rpm
    $MIRRORLIST: media/core/release/php-phar-5.6.30-2.mga6.x86_64.rpm
installing php-phar-5.6.30-2.mga6.x86_64.rpm php-bz2-5.6.30-2.mga6.x86_64.rpm 
Preparing...                     ###############################################
      1/2: php-bz2               ###############################################
      2/2: php-phar              ###############################################
>> 

I solved it by install phar:

apt-get install php-phar
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top