我有一个简单的PHP代码,它将消息发送到RabbitMQ队列,当我直接从控制台(#php script.php)执行消息时,消息已正确发布,但是当我尝试使用自己的脚本打开同一脚本时浏览器(http://localhost/script.php)消息未发送。之前的所有行均已执行,但页面卡在了该行
$connection = new AMQPConnection('$ipaddress', 5672, '$user', '$password');
为什么会这样?
代码:script.php
<?php
include_once('rabbitmq_function.php');
$result = rabbitmq_send("test");
print_r($result);
代码:rabbitmq_function.php
<?php
require_once '/usr/share/php/PhpAmqpLib/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;
function rabbitmq_send($data)
{
print_r("Before AMQP Connection");
$connection = new AMQPConnection('10.0.0.8', 5672, 'guest', 'guest');
print_r("After AMQP Connection");
$channel = $connection->channel();
$channel->queue_declare('task_queue', false, true, false, false);
$msg = new AMQPMessage(
$data,
array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
);
$channel->basic_publish($msg, '', 'task_queue');
$channel->close();
$connection->close();
return true;
}
从CLI:获得两条调试消息(Before和After),并返回“ 1”值。另外,我还在RabbitMQ管理中看到一条新消息。 从浏览器中:我只打印“ AMQP连接之前”消息,队列中没有新消息
答案 0 :(得分:0)
感谢@ mikens32的建议。我曾经使用过try / cath子句,但是我没有收到任何消息,无论如何,在apache error_log中我可以看到这是错误:
[Tue Apr 16 18:51:47 2019] [error] [client 10.0.2.2] PHP Fatal error: Call to
undefined function PhpAmqpLib\\Wire\\mb_strlen() in
/usr/share/php/PhpAmqpLib/Wire/AMQPReader.php on line 63
我不知道为什么使用脚本有效,但是我发现默认情况下未启用此程序包(具有mb_strlen函数的mbstring)。 所以我安装了,重新启动apache,现在可以了。
谢谢你们