Domanda
Cerco di utilizzare il framework Silex come base per la mia applicazione web. Tuttavia, se provo a includere l'archivio *.phar, PHP lancia il seguente errore:
Fatal error: Class 'Phar' not found in /var/www/framework/silex.phar on line 11
Le seguenti linee rilevanti sono nel mio /etc/php/php.ini
(come suggerito nei documenti di Silex):
extension=phar.so
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off
La libreria Phar è presente in /usr/lib/php/modules/phar.so
che è impostato come percorso di estensione per tutte le librerie nel mio php.ini
Qualcuno sa perché PHP sta lanciando questo errore?
Soluzione
Prova a specificare il Percorso verso l'estensione:
php -d extension=phar.so composer.phar <your_script>
Altre opzioni:
Sulla base delle informazioni fornite, ci sono alcune possibilità:
Stai usando un Php.ini diverso. Controlla l'output di
phpinfo()
Per confermare e assicurarti di modificare quello attivo./usr/lib/php/modules/phar.so non è leggibile. Assicurarsi che l'utente del server Web possa leggere questo file.
Il tuo server Web non è stato riavviato dall'ultima volta che hai aggiunto le informazioni relative a Phar a Php.ini. Riavvia il tuo server web.
Altri suggerimenti
Questo funziona per me:
php -d extension=phar.so composer.phar [... your command ...]
Ciò include l'estensione PHAR per il runtime corrente. Funziona per server condivisi / VPC.
Hm. Penso che tu abbia bisogno require_once 'phar://silex/silex.phar/autoload.php';
invece di require_once 'silex/silex.phar';
. Se non è così, dobbiamo vedere il codice che lancia un errore.
Nel mio ambiente di hosting avevo bisogno di specificare il numero di versione PHP. PER ESEMPIO:
PHP-5.6 Composer.Phar
non
Php Composer.Phar
Spero che questo possa far luce. Stavo usando un host condiviso e avevo problemi a far funzionare il compositore. Stavo usando queste indicazioni di siti http://avantidevelopment.com/install-composer-on-bluehost/ Per impostare una directory comune e installare il compositore al suo interno. L'ho seguito ma shoud aggiungi per il mio alias ho aggiunto il seguente comando a .bashrc
alias composer='/ramdisk/php/54/bin/php54-cli ~/common/composer.phar'
Questo ha fatto il trucco per me. Spero che chiunque inciampino su questo scatena una lampadina.
Per Mageia 4, Mageia 5, Mageia 6 Utenti
>> 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 ############################################### >>
Su centos ...
phar.so
è contenutophp-common
pacchetto.- il
phar
eseguibile è contenutophp-cli
pacchetto. php-mbstring
ephp-bz2
sembra anche essere necessario.
quando php -m | grep phar
non restituisce nulla, si deve aggiungerli .ini
file per la 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
In alternativa, si può aggiungere lo stesso modulo .ini
file come utilizza il server web:
sudo cp /etc/php-zts.d/* /etc/php-cli.d/
Dovrebbe sembrare uguale questo:
$ 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
Quindi si può eseguirlo:
$ php ./composer.phar
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
E spostalo sotto il $PATH
:
sudo mv ./composer.phar /usr/local/bin/composer
L'unica cosa che ha funzionato per me era eseguire lo script PHP con i privilegi di root
anche se i file pertinenti sono già accessibili a chiunque ...
/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini