Подтвердить что ты не робот

PHP: класс "Phar" не найден

Я пытаюсь использовать платформу Silex как базу для своего веб-приложения. Однако, если я попытаюсь включить архив *.phar, PHP выдает следующую ошибку:

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

В моем /etc/php/php.ini (как предложено в документах Silex) следующие соответствующие строки:

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

Библиотека PHAR присутствует в /usr/lib/php/modules/phar.so, которая устанавливается как путь расширения для всех библиотек в моем php.ini

Кто-нибудь знает, почему PHP бросает эту ошибку?

4b9b3361

Ответ 1

Попробуйте указать путь к расширению:

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

Другие параметры:

Основываясь на предоставленной вами информации, есть несколько возможностей:

  • Вы используете другой php.ini. Проверьте вывод phpinfo() для подтверждения и убедитесь, что вы редактируете активную.

  • /usr/lib/php/modules/phar.so не читается. Убедитесь, что пользователь веб-сервера может прочитать этот файл.

  • Ваш веб-сервер не был перезапущен с момента последнего добавления php-связанной информации в php.ini. Перезагрузите веб-сервер.

Ответ 2

Это работает для меня:

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

Это включает расширение phar для текущей среды выполнения. Работает для серверов общего доступа/VPC.

Ответ 3

Hm. Я думаю, вам нужно require_once 'phar://silex/silex.phar/autoload.php'; вместо require_once 'silex/silex.phar';. Если это не так, нам нужно увидеть, что код генерирует ошибку.

Ответ 4

в моей среде хостинга мне нужно было указать номер версии php. EG:

php-5.6 composer.phar

not

php composer.phar

Ответ 5

Надеюсь, это может пролить свет. Я использовал общий хост и не мог заставить композитора работать. Я использовал эти сайты http://avantidevelopment.com/install-composer-on-bluehost/, чтобы установить общий каталог и установить в него композитор. Я последовал за ним, но shoud добавил для моего псевдонима. Я добавил следующую команду в .bashrc

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

Это трюк для меня. Надеюсь, что кто-то споткнутся об этом, зажжет лампочку.

Ответ 6

Для Mageia 4, Mageia 5, Mageia 6 пользователей

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

Ответ 7

На CentOS...

  • phar.so содержится в пакете php-common.
  • Исполняемый файл phar содержится в пакете php-cli.
  • php-mbstring и php-bz2 также необходимы.

Когда php -m | grep phar php -m | grep phar ничего не возвращает, нужно добавить эти .ini файлы для 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

В качестве альтернативы можно добавить те же файлы модуля .ini которые использует веб-сервер:

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

Это должно выглядеть примерно так:

$ 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

Тогда можно запустить его:

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

И переместите его ниже $PATH:

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

Ответ 8

единственное, что мне помогло, это запустить скрипт php с правами root

хотя соответствующие файлы уже доступны для всех....

/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini