繁体   English   中英

PHP找不到踩脚类

[英]Php Can't find Stomp class

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

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链接和下载链接

Edit:

更改$con = new Stomp("tcp://localhost:61613"); $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

尝试

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

(命名空间)。

编辑:一个“踩踏”丢失。

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();

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

我的Apache中的PHP引擎正在使用/etc/php.ini文件,该文件与在本地命令行上运行的PHP引擎所使用的/usr/local/etc/php/5.5/php.ini分开。 据我所知,这是推荐的配置(请参阅更改php.ini位置

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM