Reputation: 1753
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?
Upvotes: 28
Views: 67361
Reputation: 76639
On CentOS ...
phar.so
is contained in the php-common
package.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
Upvotes: 1
Reputation: 87
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 ############################################### >>
Upvotes: 0
Reputation: 28906
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.
Upvotes: 23
Reputation: 456
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.
Upvotes: 0
Reputation: 3790
in my hosting environment i needed to specify the php version number. EG:
php-5.6 composer.phar
not
php composer.phar
Upvotes: 0
Reputation: 1107
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.
Upvotes: 19
Reputation: 11760
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.
Upvotes: 0