【问题标题】:Php Can't find Stomp classPhp 找不到 Stomp 类
【发布时间】:2015-04-04 07:17:02
【问题描述】:

我正在尝试使用 PHP 客户端从 activemq 获取队列。我在项目中包含了一个 stomp 库。这是我的项目树:

TestPhp/
├── PhpInfo.php
├── SimpleStompConsumer.php
└── Stomp
    ├── Exception
    |   └── StompException.php
    ├── ExceptionInterface.php
    ├── Frame.php
    ├── Message
    │   ├── Bytes.php
    │   └── Map.php
    ├── Message.php
    └── Stomp.php

这是我的代码

<?php
$path = "/var/www/test/TestPhp/Stomp/Stomp.php";

require_once($path);
$con = new Stomp("tcp://localhost:61613");
$con->connect();
$con->subscribe("/queue/test");
$msg = $con->readFrame();


if( $msg != null) {
    echo "Received message with body '$msg->body'\n";
    $con->ack($msg);
} else {
echo "Failed to receive a message\n";
}
$con->disconnect();

?>

当我运行 php 文件时,我收到以下错误,我不知道该怎么做。 PHP Fatal error: Class 'Stomp' not found in /var/www/test/TestPhp/SimpleStompConsumer.php on line 5 PHP Stack trace: PHP 1. {main}() /var/www/test/TestPhp/SimpleStompConsumer.php:0

如果有任何指示,我将不胜感激。谢谢。

Edit:  

库被称为 Stomp。这里是 github链接 和download 链接

Edit:

更改$con = new Stomp("tcp://localhost:61613"); to $con = new FuseSource\Stomp\Stomp("tcp://localhost:61613"); $con = new FuseSource\Stomp\Stomp("tcp://localhost:61613");

ERROR returned: 

PHP Fatal error: Class 'FuseSource\Stomp\Exception\StompException' not found in /var/www/test/TestPhp/Stomp/Stomp.php on line 174 PHP Stack trace: PHP 1. {main}() /var/www/test/TestPhp/SimpleStompConsumer.php:0 PHP 2. FuseSource\Stomp\Stomp->connect() /var/www/test/TestPhp/SimpleStompConsumer.php:6 PHP 3. FuseSource\Stomp\Stomp->_makeConnection() /var/www/test/TestPhp/Stomp/Stomp.php:195

【问题讨论】:

  • 这个类真的叫Stomp吗?你能链接到你正在使用的库吗?
  • 会不会是我放错了库?我试图从FuseSource 下载,但链接有点死。
  • Stomp.php 的第 174 和 195 行有什么内容?

标签: php stomp


【解决方案1】:

对我来说,问题是 stomp.so 没有在我的 Apache PHP 引擎中注册。我曾使用pear 安装 stomp,它在我的命令行 PHP 引擎中正确注册了它。

我的 Apache 中的 PHP 引擎正在使用一个 /etc/php.ini 文件,该文件与在我的本地命令行上运行的 PHP 引擎使用的 /usr/local/etc/php/5.5/php.ini 不同。据我所知,这是推荐的配置(见Change php.ini location

为了补救,我需要将 extension="stomp.so" 添加到我的 Apache 服务使用的 /etc/php.ini 文件中,然后重新启动 Apache。

我的代码没有require_once。我只是直接调用$con = new Stomp('tcp://localhost:61613', $user, $password);

【讨论】:

    【解决方案2】:

    Stomp 库是一个 Composer 包,因此您需要 Composer 类加载器或任何其他 PSR-0 兼容,请参阅此https://getcomposer.org/doc/01-basic-usage.md

    来自 PHP-Fig 的示例 PSR-0 类加载器:https://gist.github.com/jwage/221634

    require_once 'path_to_spl_class_loader.php';
    $loader = new SplClassLoader('FuseSource\Stomp', __DIR__.'/Stomp');
    $loader->register();
    new FuseSource\Stomp\Stomp();
    

    除了它是命名空间类之外,将此行添加到您的文件中:

    use FuseSource\Stomp\Stop;
    new Stomp();
    

    或者使用

    new FuseSource\Stomp\Stomp();
    

    【讨论】:

      【解决方案3】:

      试试

      $con = new FuseSource\Stomp\Stomp("tcp://localhost:61613");
      

      (命名空间)。

      编辑:缺少一个“Stomp”。

      【讨论】:

      • 也许在缺少“Stomp”的情况下再试一次
      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2017-05-24
      • 2021-09-20
      • 2012-05-04
      相关资源
      最近更新 更多