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?

È stato utile?

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 è contenuto php-common pacchetto.
  • il phar eseguibile è contenuto php-cli pacchetto.
  • php-mbstring e php-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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top