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?
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 enthaltenphp-common
Paket.- das
phar
ausführbare Datei ist in der enthaltenphp-cli
Paket. php-mbstring
undphp-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