Вопрос

Я стараюсь использовать Framework 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 бросает эту ошибку?

Это было полезно?

Решение

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

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

Другие опции:

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

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

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

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

Другие советы

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

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

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

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

В моей среде хостинга мне нужно было указать номер версии PHP. НАПРИМЕР:

PHP-5.6 Composer.Phar

нет

PHP Composer.Phar

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

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

Это помогло мне. Надеюсь, кто наткнется на это, вызывает лампочку.

Для 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              ###############################################
>> 

На Centos ...

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

Когда 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

Единственное, что сработало для меня, - это запустить сценарий PHP с корневыми привилегиями

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

/usr/lib64/php/modules/phar.so
/usr/local/lib/php.ini
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top