Open douyux opened 4 years ago
@douyux thx for the report, so when you:
var_dump($msg->headers);
before the array_walk
what is the output?
var_dump
headers before array_walk
output is UNKNOWN:0
:
code:
$msg = $topic->consume(0, 1000);
if (!$msg || $msg->err === RD_KAFKA_RESP_ERR__PARTITION_EOF) {
break;
}
if (RD_KAFKA_RESP_ERR_NO_ERROR !== $msg->err) {
throw new Exception($msg->errstr(), $msg->err);
}
echo 'var_dump:'; var_dump($msg->headers);
$headersString = isset($msg->headers) ? $msg->headers : [];
array_walk($headersString, function(&$value, $key) {
if ('gzencoded' === $key) {
$value = gzdecode($value);
}
$value = "{$key}: {$value}";
});
if (empty($headersString)) {
$headersString = "none";
} else {
$headersString = implode(", ", $headersString);
}
printf("Got message: %s | Headers: %s\n", $msg->payload, $headersString);
result:
[root@xxx test]# /usr/local/php/bin/php message_headers.php
6 messages delivered
var_dump:NULL
Got message: message 0 | Headers: none
var_dump:UNKNOWN:0
PHP Warning: array_walk() expects parameter 1 to be array, unknown given in /root/test/message_headers.php on line 82
Got message: message 1 | Headers: none
var_dump:UNKNOWN:0
PHP Warning: array_walk() expects parameter 1 to be array, unknown given in /root/test/message_headers.php on line 82
Got message: message 2 | Headers: none
var_dump:NULL
Got message: message 3 | Headers: none
var_dump:NULL
Got message: message 4 | Headers: none
var_dump:NULL
Got message: message 5 | Headers: none
@douyux is the PHP version on Ubuntu also PHP 5.6.36?
I will try to replicate this when i find some time. Is this happening on PHP7 as well or just PHP5?
ubuntu php version is: 5.6.40
,i'm not sure is will happening on php7 and i think this is nothing to do with php
version,maybe the sys & build env cause the issue
this dockerfile can reproduce the isse:
FROM centos:7
RUN yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
&& yum install -y yum-utils \
&& yum-config-manager --enable remi-php56 \
&& yum install -y php php-cli php-devel php-pear zlib-devel
RUN yum install -y gcc gcc-c++ automake autoconf libtool make
RUN curl -fsSL 'https://github.com/edenhill/librdkafka/archive/v1.5.0.tar.gz' -o rdkafka.tar.gz \
&& mkdir -p rdkafka \
&& tar -xf rdkafka.tar.gz -C rdkafka --strip-components=1 \
&& rm rdkafka.tar.gz \
&& ( \
cd rdkafka \
&& ./configure \
&& make \
&& make install \
) \
&& rm -r rdkafka
RUN pecl install rdkafka-4.0.3 \
&& echo "extension=rdkafka" >> /etc/php.d/rdkafka.ini
RUN echo $'#!/bin/sh \n\
set -e \n\
exec "$@" \n\
' >> /usr/local/bin/php-entrypoint \
&& chmod +x /usr/local/bin/php-entrypoint
RUN cp /usr/lib64/php/modules/rdkafka.so /usr/lib64/php/modules/rdkafka
ENTRYPOINT ["php-entrypoint"]
CMD ["php", "-a"]
docker run on ubuntu16.04:
docker run -it --rm --name message-headers -v "$PWD":/usr/src/myapp -w /usr/src/myapp qt-centos-php php message_headers.php
6 messages delivered
PHP Warning: array_walk() expects parameter 1 to be array, unknown given in /usr/src/myapp/message_headers.php on line 82
Got message: message 0 | Headers: none
PHP Warning: array_walk() expects parameter 1 to be array, unknown given in /usr/src/myapp/message_headers.php on line 82
Got message: message 1 | Headers: none
PHP Warning: array_walk() expects parameter 1 to be array, unknown given in /usr/src/myapp/message_headers.php on line 82
Got message: message 2 | Headers: none
Got message: message 3 | Headers: none
Got message: message 4 | Headers: none
Got message: message 5 | Headers: none
@douyux awesome thx a lot for this, i will check it out :v:
@douyux so what i can report back for now is, that it works for php:7.x
under CentOS7. With the deadline coming closer, with us dropping php:5
support, i am not sure how much effort i want to put into this. I will try to check if i can find out why it behaves differently from Ubuntu, but i can't promise anything.
@nick-zh thanks a lot for the feedback and efforts, it's nice to fix it when you have more free time in the future.
any update on this issue? Any guidance for a patch will also be helpful.
when test message_headers.php in centos i got following output:
and
var_dump($msg->headers)
just printUNKNOWN:0
It's confused that message_headers.php is test ok in ubuntu 16.04 with same kafka server and same librdkafka & php-rdkafka version: