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?

¿Fue útil?

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 el php-common paquete.
  • la phar ejecutable está contenido en el php-cli paquete.
  • php-mbstring y php-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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top