奥门新浦京官方网站linux-PHP安装amqp扩展,一直提示一个waring,这是为何?

本文介绍了在Linux下给PHP安装amqp扩展的过程,有需要的朋友可以关注一下。

PHP安装amqp扩展,一直提示一个waring,这是为何?
PHP版本为7.1.25,服务器为CentOS
7,按照此链接安装的amqp扩展(rabbitmq-c装的版本为1.8.0,apmq装的版本为1.9.4)
。重启服务后,输入一直提示【PHP Warning: PHP Startup: Unable to load
dynamic library ‘/usr/lib64/php/modules/amqp.so’ –
/usr/lib64/php/modules/amqp.so: undefined symbol:
amqp_ssl_socket_set_verify_hostname in Unknown on line 0】

RabbitMQ 官方提供了三种 PHP 可用的扩展,分别是:

安装librabbitmq-c和rabbitmq-codegen

# 下载0-9-1版的rabbitmq-c
git clone git://github.com/alanxz/rabbitmq-c.git
cd rabbitmq-c
# Enable and update the codegen git submodule
git submodule init
git submodule update
# Configure, compile and install
autoreconf -i && ./configure && make && sudo make install

1、php-amqp
2、php-rabbit
3、php-amqplib

安装pecl扩展

#下载最新的amqp扩展
wget http://pecl.php.net/get/amqp-1.0.9.tgz
tar xvzf amqp-1.0.9.tgz
cd amqp-1.0.9 && phpize
./configure --with-amqp && make && sudo make install

记得在php.ini中加入amqp扩展:

extension=amqp.so

这里选择使用 php-amqp,因为这个项目的 Activity
比较高,php-amqplib稳定性也比较令人质疑。在安装amqp之前还需要安装另外一个通讯扩展rabbitmq-c。

安装过程中可能会遇到的问题

1、缺少libtool包

configure.ac: installing ./install-sh
configure.ac: installing ./missing
configure.ac:34: installing ./config.guess
configure.ac:34: installing ./config.sub
Makefile.am:3: Libtool library used but LIBTOOL is undefined
Makefile.am:3:
Makefile.am:3: The usual way to define LIBTOOL is to add AC_PROG_LIBTOOL
Makefile.am:3: to configure.ac and run aclocal and autoconf again.
Makefile.am: C objects in subdir but AM_PROG_CC_C_O not in configure.ac
Makefile.am: installing ./compile
Makefile.am: installing ./depcomp
autoreconf: automake failed with exit status: 1

解决办法,安装libtool,ubuntu:

sudo apt-get install libtool

其他系统类似

2、如果还有其他问题,欢迎给我留言,我补上

参考
1、CentOS安装RabbitMQ及PHP扩展
2、PHP RabbitMQ
使用记录
3、使用 php amqp 代替
PhpAmqpLib
4、安装 php-rabbit: RabbitMQ 的 PHP
扩展

使用

<?php
//配置信息
$conn_args = array(
    'host' => '127.0.0.1',
    'port' => '5672',
    'login' => 'guest',
    'password' => 'guest',
    'vhost'=>'/'
);
//创建连接
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
    die('Not connected  ' . PHP_EOL);
}
// Open Channel
$channel = new AMQPChannel($conn);
// Declare exchange
$exchange = new AMQPExchange($channel);
$exchange->setName('extest');
$exchange->setType('fanout');
$exchange->declare();
// Create Queue
$queue = new AMQPQueue($channel);
$queue->setName('qutest');
$queue->declare();
// Bind it on the exchange to routing.key
$exchange->bind('qutest', 'routing.key');
$data = array(
    'Name' => 'foobar',
    'Args'  => array("0", "1", "2", "3"),
);
//生产者,向RabbitMQ发送消息
$message = $exchange->publish(json_encode($data), 'key');
if (!$message) {
    echo 'Message not sent', PHP_EOL;
} else {
    echo 'Message sent!', PHP_EOL;
}
//消费者
while ($envelope = $queue->get(AMQP_AUTOACK)) {
    echo ($envelope->isRedelivery()) ? 'Redelivery' : 'New Message';
    echo PHP_EOL;
    echo $envelope->getBody(), PHP_EOL;
}
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注