Fatal error: Uncaught Error: Class 'Stomp' not found
Fatal error: Uncaught Error: Class 'Stomp' not found
我已经下载了可用的库:https://github.com/dejanb/stomp-php
然后执行以下代码:
<?php
use FuseSource\Stomp\Stomp;
(...)
$data=array($data1,$data2, $data3, $data4);
$json = json_encode($data, true);
$user = getenv("ACTIVEMQ_USER");
if( !$user ) $user = "admin";
$password = getenv("ACTIVEMQ_PASSWORD");
if( !$password ) $password = "password";
$destination = '/topic/event';
$messages = 10000;
$size = 256;
$DATA = "calls";
$body = $data;
for($i=0; $i< $size; $i++) {
$body .= $DATA[ $i % 26];
}
try {
$url = 'tcp://localhost:61613';
$con = new Stomp($url, $user, $password);
for($i=0; $i< $messages; $i++) {
$con->send($destination, $body);
if( $i%1000 == 0 ) {
echo "Sent ".$i." messages\n";
}
}
$stomp->send($destination, "SHUTDOWN");
} catch(StompException $e) {
echo $e->getMessage();
}
}
我得到这个错误:
Fatal error: Uncaught Error: Class 'Stomp' not found in /opt/lampp/htdocs/skeleton-application/test.php:80
更新:
我按照 https://github.com/stomp-php/stomp-php 中的建议使用 composer
重新安装。
我需要自动加载器使用
<?php
require __DIR__ . '/../vendor/autoload.php';
并添加了以下导入
use Stomp\Client;
use Stomp\StatefulStomp;
use Stomp\Network\Connection;
use Stomp\Transport\Message;
仍然是同样的错误...我需要对我的 activemq 代理做任何特别的事情吗?我 运行 它通过控制台...但仍然没有
除了混淆使用哪个包之外,我们的代码还有以下问题:
- 您尚未导入正在使用的 类,因此,PHP 在根命名空间
中找不到 类
- 您将参数传递给未使用的构造函数和其他方法,或者类型错误
- 您显然有未定义的变量(例如,
$stomp
未定义,或者代码示例中缺少它)
我建议一个一个解决这些问题。
使用fusesource/stomp-php
导入您正在使用的类
调整您的导入列表(这些是 use
语句)以包括您在代码示例中引用的 类:
use FuseSource\Stomp\Exception\StompException;
use FuseSource\Stomp\Stomp;
如果您的代码示例在包中遗漏了更多 类,请将它们也包含在您的导入中。
删除不必要的参数
当您创建 FuseSource\Stomp\Stomp
的实例时,您正在传递构造函数不使用的参数。
改变
$con = new Stomp($url, $user, $password);
至
$con = new Stomp($url);
未定义变量
您有一行代码在其中引用了一个未定义的变量 $stomp
,您可能打算在其中使用 $con
。
改变
$stomp->send($destination, "SHUTDOWN");
至
$con->send($destination, new Message("SHUTDOWN"));
使用stomp-php/stomp-php
导入您正在使用的类
调整您的导入列表(这些是 use
语句)以包括您在代码示例中引用的 类:
use Stomp\Client;
use Stomp\Exception\StompException;
use Stomp\StatefulStomp;
use Stomp\Transport\Message;
如果您的代码示例在包中遗漏了更多 类,请将它们也包含在您的导入中。
删除不必要的参数
Stomp\Stomp\StatefulStomp
的构造函数与 FuseSource\Stomp
的构造函数具有不同的签名。
改变
$con = new Stomp($url, $user, $password);
至
$con = new StatefulStomp(new Client($url));
将参数调整为所需的类型
send()
的签名已更改。
改变
$con->send($destination, $body);
至
$con->send($destination, new Message($body));
未定义变量
您有一行代码在其中引用了一个未定义的变量 $stomp
,您可能打算在其中使用 $con
。
改变
$stomp->send($destination, "SHUTDOWN");
至
$con->send($destination, new Message("SHUTDOWN"));
参考:
我已经下载了可用的库:https://github.com/dejanb/stomp-php
然后执行以下代码:
<?php
use FuseSource\Stomp\Stomp;
(...)
$data=array($data1,$data2, $data3, $data4);
$json = json_encode($data, true);
$user = getenv("ACTIVEMQ_USER");
if( !$user ) $user = "admin";
$password = getenv("ACTIVEMQ_PASSWORD");
if( !$password ) $password = "password";
$destination = '/topic/event';
$messages = 10000;
$size = 256;
$DATA = "calls";
$body = $data;
for($i=0; $i< $size; $i++) {
$body .= $DATA[ $i % 26];
}
try {
$url = 'tcp://localhost:61613';
$con = new Stomp($url, $user, $password);
for($i=0; $i< $messages; $i++) {
$con->send($destination, $body);
if( $i%1000 == 0 ) {
echo "Sent ".$i." messages\n";
}
}
$stomp->send($destination, "SHUTDOWN");
} catch(StompException $e) {
echo $e->getMessage();
}
}
我得到这个错误:
Fatal error: Uncaught Error: Class 'Stomp' not found in /opt/lampp/htdocs/skeleton-application/test.php:80
更新:
我按照 https://github.com/stomp-php/stomp-php 中的建议使用 composer
重新安装。
我需要自动加载器使用
<?php
require __DIR__ . '/../vendor/autoload.php';
并添加了以下导入
use Stomp\Client;
use Stomp\StatefulStomp;
use Stomp\Network\Connection;
use Stomp\Transport\Message;
仍然是同样的错误...我需要对我的 activemq 代理做任何特别的事情吗?我 运行 它通过控制台...但仍然没有
除了混淆使用哪个包之外,我们的代码还有以下问题:
- 您尚未导入正在使用的 类,因此,PHP 在根命名空间 中找不到 类
- 您将参数传递给未使用的构造函数和其他方法,或者类型错误
- 您显然有未定义的变量(例如,
$stomp
未定义,或者代码示例中缺少它)
我建议一个一个解决这些问题。
使用fusesource/stomp-php
导入您正在使用的类
调整您的导入列表(这些是 use
语句)以包括您在代码示例中引用的 类:
use FuseSource\Stomp\Exception\StompException;
use FuseSource\Stomp\Stomp;
如果您的代码示例在包中遗漏了更多 类,请将它们也包含在您的导入中。
删除不必要的参数
当您创建 FuseSource\Stomp\Stomp
的实例时,您正在传递构造函数不使用的参数。
改变
$con = new Stomp($url, $user, $password);
至
$con = new Stomp($url);
未定义变量
您有一行代码在其中引用了一个未定义的变量 $stomp
,您可能打算在其中使用 $con
。
改变
$stomp->send($destination, "SHUTDOWN");
至
$con->send($destination, new Message("SHUTDOWN"));
使用stomp-php/stomp-php
导入您正在使用的类
调整您的导入列表(这些是 use
语句)以包括您在代码示例中引用的 类:
use Stomp\Client;
use Stomp\Exception\StompException;
use Stomp\StatefulStomp;
use Stomp\Transport\Message;
如果您的代码示例在包中遗漏了更多 类,请将它们也包含在您的导入中。
删除不必要的参数
Stomp\Stomp\StatefulStomp
的构造函数与 FuseSource\Stomp
的构造函数具有不同的签名。
改变
$con = new Stomp($url, $user, $password);
至
$con = new StatefulStomp(new Client($url));
将参数调整为所需的类型
send()
的签名已更改。
改变
$con->send($destination, $body);
至
$con->send($destination, new Message($body));
未定义变量
您有一行代码在其中引用了一个未定义的变量 $stomp
,您可能打算在其中使用 $con
。
改变
$stomp->send($destination, "SHUTDOWN");
至
$con->send($destination, new Message("SHUTDOWN"));
参考: