Вопрос
Я стараюсь использовать 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