Pregunta
Intento usar el marco Silex como base para mi aplicación web. Sin embargo, si intento incluir el archivo *.phar, PHP lanza el siguiente error:
Fatal error: Class 'Phar' not found in /var/www/framework/silex.phar on line 11
Las siguientes líneas relevantes están en mi /etc/php/php.ini
(Como se sugiere en los documentos de Silex):
extension=phar.so
phar.readonly = Off
phar.require_hash = Off
detect_unicode = Off
La biblioteca PHAR está presente en /usr/lib/php/modules/phar.so
que se establece como la ruta de extensión para todas las bibliotecas en mi php.ini
¿Alguien sabe por qué PHP está lanzando este error?
Solución
Intenta especificar el camino a la extensión:
php -d extension=phar.so composer.phar <your_script>
Otras opciones:
Según la información que proporcionó, hay algunas posibilidades:
Estás usando un php.ini diferente. Verifique la salida de
phpinfo()
Para confirmar y asegurarse de que está editando el activo./usr/lib/php/modules/phar.so no es legible. Asegúrese de que el usuario del servidor web pueda leer este archivo.
Su servidor web no se ha reiniciado desde la última vez que agregó la información relacionada con PHAR a php.ini. Reinicie su servidor web.
Otros consejos
Esto funciona para mí:
php -d extension=phar.so composer.phar [... your command ...]
Esto incluye la extensión PHAR para el tiempo de ejecución actual. Funciona para servidores compartidos / VPC.
Hm. Creo que necesitas require_once 'phar://silex/silex.phar/autoload.php';
en vez de require_once 'silex/silex.phar';
. Si este no es el caso, entonces necesitamos ver el código que arroja un error.
En mi entorno de alojamiento necesitaba especificar el número de versión PHP. P.EJ:
Php-5.6 compositor.phar
no
compositor de php.phar
Espero que esto pueda arrojar algo de luz. Estaba usando un host compartido y tuve problemas para que el compositor ejecute. Estaba usando las instrucciones de este sitio http://avantideelopment.com/install-composer-on-bluehost/ Para configurar un directorio común e instalar compositor en él. Lo seguí pero debí agregar para mi alias, agregué el siguiente comando a .bashrc
alias composer='/ramdisk/php/54/bin/php54-cli ~/common/composer.phar'
Eso me hizo el truco. Espero que quien tropieza con esto desencadene una bombilla.
Para Mageia 4, Mageia 5, Mageia 6 usuarios
>> 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 ############################################### >>
En Centos ...
phar.so
está contenido en elphp-common
paquete.- la
phar
ejecutable está contenido en elphp-cli
paquete. php-mbstring
yphp-bz2
También parece ser necesario.
Cuando php -m | grep phar
no devuelve nada, uno tiene que agregar estos .ini
Archivos para 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
Alternativamente, se puede agregar el mismo módulo .ini
archivos como usa el servidor web:
sudo cp /etc/php-zts.d/* /etc/php-cli.d/
Debería parecerse a esto:
$ 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
Entonces uno puede ejecutarlo:
$ php ./composer.phar
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Y muévalo debajo del $PATH
:
sudo mv ./composer.phar /usr/local/bin/composer
Lo único que funcionó para mí era ejecutar el script PHP con privilegios raíz
a pesar de que los archivos relevantes ya son accesibles para cualquier persona ...
/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini