Question
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?
La solution
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.
Autres conseils
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 thephp-common
package.- the
phar
executable is contained in thephp-cli
package. php-mbstring
andphp-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