RabbitMQ发布可以从控制台运行,但不能从浏览器运行

I have a simple PHP code that sends a message to a RabbitMQ queue, when I execute it directly from the console (#php script.php) the message is published correctly, but when I try to open the same script using my browser (http://localhost/script.php) the message is not sent. All previous lines are executed but the page stucks in the line

$connection = new AMQPConnection('$ipaddress', 5672, '$user', '$password');

Any ideas of why is this happening ?

CODE: script.php

<?php
include_once('rabbitmq_function.php');
$result = rabbitmq_send("test");
print_r($result);

CODE: 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;
}

From CLI: I get the two debug messages (Before and After), and the return "1" value. And also I'm seeing a new message in the RabbitMQ management. From Browser: I get only printed the "Before AMQP Connection" message and no new message in the queue

douyudouchao6779
douyudouchao6779 可能重复的致命错误:调用未定义的函数mb_strlen()
一年多之前 回复
dongzhucha3999
dongzhucha3999 你的建议很有帮助@miken32,我已经评论过我是如何修复它的。
一年多之前 回复
doucheng7808
doucheng7808 为什么没有围绕这个对象创建代码的try/catch语句?我打赌异常对象上的getMessage()会给你提供比你正在进行的“调试”更多的信息。或者,查看PHP日志中的未捕获异常。
一年多之前 回复
dongxian6741
dongxian6741 嗨@Lulceltech,我编辑了这个问题并添加了我正在使用的代码。
一年多之前 回复
douzhang8033
douzhang8033 具有讽刺意味的是它可能是。Localhost!=127.0.0.1!=phpcli命令。在代码问题出现之前,我打算解决它的网络问题。我和兔子一起工作很多,你可以发布完整的片段来发送消息。
一年多之前 回复
dongsong4418
dongsong4418 我也尝试使用AMQPStreamConnection而不是AMQPConnection,但结果是一样的。
一年多之前 回复
douci4026
douci4026 只有默认的SO防火墙使用iptables,端口5672在RabbitMQ服务器中打开。无论如何它似乎不是网络问题,因为代码是相同的,我正在从同一台服务器执行脚本和页面,并使用脚本工作。
一年多之前 回复
douluan1533
douluan1533 你的服务器有防火墙吗?在RabbitMQ上你有外部端口打开吗?
一年多之前 回复

1个回答



感谢@ mikens32的建议。 我曾经使用过try / cath子句,但我没有得到任何消息,无论如何查看apache error_log我可以看到这是错误:</ p>

  [Tue Apr 16  18:51:47 2019] [错误] [客户端10.0.2.2] PHP致命错误:在
/ usr / share / php / PhpAmqpLib / Wire / AMQPReader中调用
undefined函数PhpAmqpLib \ Wire \ mb_strlen()。 第63行的PHP
</ code> </ pre>

我不知道为什么使用脚本工作,但我发现这个包(具有mb_strlen函数的mbstring)没有启用 默认情况下。
我安装了,重新启动apache,现在它正在工作。</ p>

谢谢大家¡</ p>
</ div>

展开原文

原文

Thanks @mikens32 for the advice. I had use the try/cath clause but I didn't get any message, anyway looking in the apache error_log I could see that this was the error:

[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

I don't know why using the script was working, but I found that this package (mbstring which has the mb_strlen function) is not enable by default. So I installed, restart apache and now it's working.

Thanks guys ¡¡

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐