25

我尝试使用 Silex 框架作为我的 Web 应用程序的基础。但是,如果我尝试包含 *.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 会抛出这个错误?

4

8 回答 8

22

尝试指定扩展的路径

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

其他选项:

根据您提供的信息,有几种可能:

  • 您正在使用不同的 php.ini。检查输出phpinfo()以确认,并确保您正在编辑活动的。

  • /usr/lib/php/modules/phar.so 不可读。确保 Web 服务器用户可以读取此文件。

  • 自从您上次将 phar 相关信息添加到 php.ini 后,您的 Web 服务器尚未重新启动。重新启动您的网络服务器。

于 2012-01-13T13:15:25.640 回答
19

这对我有用:

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

这包括当前运行时的 phar 扩展。适用于共享/VPC 服务器。

于 2014-02-11T09:50:52.073 回答
1

在 CentOS 上...

  • phar.so包含在php-common包装中。
  • phar可执行文件包含在包php-cli中。
  • php-mbstring并且php-bz2似乎也是必需的。

当什么都不返回时,必须为 CLIphp -m | grep phar添加这些文件:.ini

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
于 2019-07-23T04:52:43.023 回答
0

嗯。我认为你需要require_once 'phar://silex/silex.phar/autoload.php';而不是require_once 'silex/silex.phar';. 如果不是这种情况,那么我们需要查看引发错误的代码。

于 2012-01-13T13:16:51.827 回答
0

希望这可能会有所启发。我使用的是共享主机,无法让作曲家运行。我正在使用此站点说明http://avantidevelopment.com/install-composer-on-bluehost/来设置一个公共目录并在其中安装 composer。我跟着它,但应该为我的别名添加我将以下命令添加到 .bashrc

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

这对我有用。希望任何偶然发现这个问题的人都能点亮灯泡。

于 2016-11-10T20:08:27.673 回答
0

在我的托管环境中,我需要指定 php 版本号。例如:

php-5.6 作曲家.phar

不是

php作曲家.phar

于 2015-09-09T21:36:57.607 回答
0

对于 Mageia 4、Mageia 5、Mageia 6 用户

>> urpmi php-phar;echo 完成
为了满足依赖关系,将安装以下软件包:
  包版本发布架构
(中等“核心版本 2”)
  php-bz2 5.6.30 2.mga6 x86_64
  php-phar 5.6.30 2.mga6 x86_64
将使用 326KB 的额外磁盘空间。
将检索 151KB 的包。
继续安装 2 个软件包?(是/否) 是


    $镜像列表:媒体/核心/发布/php-bz2-5.6.30-2.mga6.x86_64.rpm
    $镜像列表:媒体/核心/发布/php-phar-5.6.30-2.mga6.x86_64.rpm
安装 php-phar-5.6.30-2.mga6.x86_64.rpm php-bz2-5.6.30-2.mga6.x86_64.rpm
准备中... ############################################# #
      1/2: php-bz2 ########################################## ####
      2/2: php-phar ########################################## ####
>>
于 2017-04-05T22:27:11.757 回答
0

我通过安装 phar 解决了它:

apt-get install php-phar
于 2021-03-02T15:35:42.273 回答