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 бросает эту ошибку?
Ответы
Ответ 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