Frage

Ich versuche, das Silex-Framework als Basis für meine Webanwendung zu verwenden.Wenn ich jedoch versuche, das *.phar-Archiv einzubinden, gibt PHP den folgenden Fehler aus:

Fatal error: Class 'Phar' not found in /var/www/framework/silex.phar on line 11

Die folgenden relevanten Zeilen sind in meinem /etc/php/php.ini (wie in den Dokumenten von Silex vorgeschlagen):

extension=phar.so
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off

Die PHAR-Bibliothek ist vorhanden in /usr/lib/php/modules/phar.so Dies ist als Erweiterungspfad für alle Bibliotheken in my festgelegt php.ini

Weiß jemand, warum PHP diesen Fehler auslöst?

War es hilfreich?

Lösung

Versuchen Sie, das anzugeben Weg zur Erweiterung:

php -d extension=phar.so composer.phar <your_script>

Andere Optionen:

Basierend auf den von Ihnen bereitgestellten Informationen gibt es einige Möglichkeiten:

  • Sie verwenden ein anderes php.ini. Überprüfen Sie die Ausgabe von phpinfo() Um zu bestätigen und sicherzustellen, dass Sie den aktiven bearbeiten.

  • /usr/lib/php/modules/phar.so ist nicht lesbar. Stellen Sie sicher, dass der Benutzer des Webservers diese Datei lesen kann.

  • Ihr Webserver wurde nicht neu gestartet, seit Sie die Phar-bezogenen Informationen zuletzt an Php.ini hinzugefügt haben. Starten Sie Ihren Webserver neu.

Andere Tipps

Das funktioniert für mich:

php -d extension=phar.so composer.phar [... your command ...]

Dies schließt die PHAR -Erweiterung für die aktuelle Laufzeit ein. Arbeitet für Shared / VPC -Server.

Hm. Ich denke du brauchst require_once 'phar://silex/silex.phar/autoload.php'; Anstatt von require_once 'silex/silex.phar';. Wenn dies nicht der Fall ist, müssen wir sehen, dass der Code einen Fehler wirft.

In meiner Hosting -Umgebung musste ich die PHP -Versionsnummer angeben. Z.B:

PHP-5.6 Composer.phar

nicht

PHP Composer.phar

Ich hoffe, das bringt etwas Licht ins Dunkel.Ich habe einen gemeinsam genutzten Host verwendet und hatte Probleme, Composer zum Laufen zu bringen.Ich habe die Anweisungen dieser Website verwendet http://avantidevelopment.com/install-composer-on-bluehost/ um ein gemeinsames Verzeichnis einzurichten und Composer darin zu installieren.Ich habe es befolgt, sollte aber für meinen Alias ​​den folgenden Befehl zu .bashrc hinzufügen

alias composer='/ramdisk/php/54/bin/php54-cli ~/common/composer.phar'

Das hat bei mir geholfen.Ich hoffe, wer auch immer darüber stolpert, löst eine Glühbirne aus.

Für Magien 4, Mageia 5, Mageia 6 Benutzer

>> 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              ###############################################
>> 

Auf CentOs ...

  • phar.so ist in der enthalten php-common Paket.
  • das phar ausführbare Datei ist in der enthalten php-cli Paket.
  • php-mbstring und php-bz2 scheint auch erforderlich zu sein.

Wann php -m | grep phar Gibt nichts zurück, man muss diese hinzufügen .ini Dateien für die 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

Alternativ kann man dasselbe Modul hinzufügen .ini Dateien, wie der Webserver verwendet:

sudo cp /etc/php-zts.d/* /etc/php-cli.d/

Es sollte das gleich aussehen:

$ 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

Dann kann man es ausführen:

$ php ./composer.phar
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/

Und bewegen Sie es unter die $PATH:

sudo mv ./composer.phar /usr/local/bin/composer

Das einzige, was für mich funktioniert hat, war, das PHP -Skript mit Root -Privilegien auszuführen

Auch wenn die entsprechenden Dateien bereits für jeden zugänglich sind ....

/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top