Question
J'essaie d'utiliser le cadre Silex comme base pour mon application Web. Cependant, si j'essaie d'inclure le * .phar archive, PHP jette l'erreur suivante:
Fatal error: Class 'Phar' not found in /var/www/framework/silex.phar on line 11
Les lignes suivantes sont pertinentes dans mon /etc/php/php.ini
(comme suggéré dans la documentation de Silex):
extension=phar.so
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off
La bibliothèque phar est présent dans /usr/lib/php/modules/phar.so
qui est défini comme le chemin d'extension pour toutes les bibliothèques dans mon php.ini
Quelqu'un sait pourquoi PHP est de lancer cette erreur?
La solution
Essayez d'indiquer le chemin à l'extension :
php -d extension=phar.so composer.phar <your_script>
Autres options:
D'après les informations fournies, il y a quelques possibilités:
-
Vous utilisez un php.ini différents. Vérifiez la sortie de
phpinfo()
pour confirmer, et assurez-vous que vous modifiez l'actif. -
/usr/lib/php/modules/phar.so n'est pas lisible. Assurez-vous que l'utilisateur du serveur Web peut lire ce fichier.
-
Votre serveur web n'a pas été redémarré depuis que vous avez ajouté les informations relatives Phar à php.ini. Redémarrez votre serveur Web.
Autres conseils
Cela fonctionne pour moi:
php -d extension=phar.so composer.phar [... your command ...]
Cela inclut l'extension phar pour l'exécution en cours. Travaux pour les serveurs partagés / VPC.
Hm. Je pense que vous avez besoin require_once 'phar://silex/silex.phar/autoload.php';
au lieu de require_once 'silex/silex.phar';
. Si ce n'est pas le cas, alors nous devons voir le code lancer une erreur.
dans mon environnement d'hébergement i besoin de spécifier le numéro de version php. EG:
composer.phar php-5.6
pas
php composer.phar
Espérons que cela peut apporter un peu de lumière. Je travaillais avec un hôte partagé et eu du mal à composer à courir. J'utilisais ces sites directions http://avantidevelopment.com/install-composer-on-bluehost / pour configurer un répertoire commun et installer le compositeur en elle. Je l'ai suivi, mais qui devraient ajouter à mes alias j'ai ajouté la commande suivante pour .bashrc
alias composer='/ramdisk/php/54/bin/php54-cli ~/common/composer.phar'
qui a fait l'affaire pour moi. Espoir celui qui trébuche sur ce déclenche une ampoule.
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 ############################################### >>
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
the only thing that worked for me was to run the php script with root privileges
even though the relevant files are already accessible to anyone....
/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini