arnaud-lb / php-rdkafka

Production-ready, stable Kafka client for PHP
MIT License
2.06k stars 263 forks source link

Problem installing PHP 8.3 extension on Windows #553

Open andrey-helldar opened 3 weeks ago

andrey-helldar commented 3 weeks ago

Description

I'm trying to connect the rdkafka 6.0.3 extension to PHP 8.3.9, but I'm getting an error:

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.3.9 (cli) (built: Jul  2 2024 18:17:57) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.9, Copyright (c), by Zend Technologies
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans

$ which php
/d/modules/php/php

The rdkafka files are located in the following paths:

/d/modules/php/ext/php_rdkafka.dll
/d/modules/php/librdkafka.dll
/d/modules/php/librdkafka++.dll

That said, there is no problem with the extension installed in Ubuntu WSL.

I also tried deleting the librdkafka++.dll file (it was inside the archive), but that didn't help.

What could be the problem?

For PHP 8.1 and 8.2, the same problem.

php-rdkafka Version

php-rdkafka 6.0.3

librdkafka Version

No response

PHP Version

PHP 8.3.9

Operating System

Windows 11

Kafka Version

No response

Steveb-p commented 3 weeks ago

You should not really use .dll files provided by sources that are hardly verified. I do not know the owner of phpext.phptools.online, but I would be hard pressed to consider it remotely safe.

Try https://pecl.php.net/package/rdkafka/6.0.3/windows instead.

php.net is under PHP group, so unless something goes very wrong, you should use those. A checksum check should also be something you'd do, just to be sure.

It is executable code you're allowing to run, so be careful :)

andrey-helldar commented 3 weeks ago

Didn't work with the pecl option either :(

Helldar@HellPC MINGW64 /d/domains
$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.3.9 (cli) (built: Jul  2 2024 18:17:57) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.9, Copyright (c), by Zend Technologies
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans

In the screenshot on the left is the phptools variant and on the right is pecl: image

I've also tried specifying different links to the extension:

extension = rdkafka
;extension = rdkafka.dll
;extension = php_rdkafka
;extension = php_rdkafka.dll
andrey-helldar commented 2 weeks ago

Detailed steps to reproduce the problem:

  1. Download latest Non-Thread Safe PHP 8.3: https://windows.php.net/downloads/releases/php-8.3.9-nts-Win32-vs16-x64.zip
  2. Unzipped the archive into the "d:\php" folder.
  3. Renamed php.ini-development with php.ini
  4. Download rdkafka extension from PECL: https://downloads.php.net/~windows/pecl/releases/rdkafka/6.0.3/php_rdkafka-6.0.3-8.3-nts-vs16-x64.zip
  5. Move rdkafka's files to PHP directory:
    d:\php\ext\php_rdkafka.dll
    d:\php\librdkafka.dll
    d:\php\librdkafka++.dll
    d:\php\php_rdkafka.pdb
  6. Uncommented the extension location parameter in php.ini:
    ; On windows:
    extension_dir = "ext"
  7. Added the rdkafka extension:
    extension = rdkafka
  8. Open the terminal
  9. Executed the following console commands:
    cd d:\php
    ./php --version

Result:

Helldar@HellPC MINGW64 /d/php
$ ./php --version
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.3.9 (cli) (built: Jul  2 2024 18:17:57) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
andrey-helldar commented 2 weeks ago

Trying the same steps in the Windows Sandbox.

  1. I get the error vcruntime140.dll file is unavailable
  2. I install Visual C++ Redistributable 2019 from https://aka.ms/vs/17/release/vc_redist.x64.exe
c:\php>php.exe --version
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.3.9 (cli) (built: Jul  2 2024 18:17:57) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
andrey-helldar commented 2 weeks ago

Checking on other versions:

PHP 8.1.29

c:\php>php.exe --version
PHP 8.1.29 (cli) (built: Jun  5 2024 10:43:14) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.1.29, Copyright (c) Zend Technologies

c:\php>php.exe -m
[PHP Modules]
...
rdkafka
...

PHP 8.2.21

c:\php>php.exe --version
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.2.21 (cli) (built: Jul  2 2024 14:00:59) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.2.21, Copyright (c) Zend Technologies

PHP 8.3.9

c:\php>php.exe --version
PHP Warning:  PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'rdkafka' (tried: ext\rdkafka (The specified module could not be found), ext\php_rdkafka.dll (The specified module could not be found)) in Unknown on line 0
PHP 8.3.9 (cli) (built: Jul  2 2024 18:17:57) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.9, Copyright (c) Zend Technologies
wgole commented 2 weeks ago

I have the same problem!

Adham-A commented 1 week ago

Hello, I am facing the same issue, did anybody found a solution so far ?

andrey-helldar commented 1 week ago

Hello, I am facing the same issue, did anybody found a solution so far ?

The problem is solved by compiling the library to a new version of PHP. I haven't found someone who can do that yet

Adham-A commented 1 week ago

Hello, I am facing the same issue, did anybody found a solution so far ?

The problem is solved by compiling the library to a new version of PHP. I haven't found someone who can do that yet

Why is that ? There are no guidelines on how to do it ? Or is it a more deep technical issue ? I might be able to help

andrey-helldar commented 1 week ago

Hello, I am facing the same issue, did anybody found a solution so far ?

The problem is solved by compiling the library to a new version of PHP. I haven't found someone who can do that yet

Why is that ? There are no guidelines on how to do it ? Or is it a more deep technical issue ? I might be able to help

When compiling a DLL, you need to consider the environment and its settings for which the compilation is being done.

Given the fact that the DLL runs on PHP 8.1, I can assume that either the PHP 8.2 and 8.3 versions were compiled with PHP 8.1 settings, or with incorrect settings, or the compiler did not take into account any nuances when building for PHP 8.2 and 8.3.

For example, the same tests (https://github.com/arnaud-lb/php-rdkafka/actions/runs/9445153156) - they were run on different environments. So there is a nuance somewhere.

Either way, you can find out by running the compiler in a customized development environment.

Translated with DeepL.com (free version)

Adham-A commented 1 week ago

I successfully added the library to my project to work on one of my Windows environments using WampServer and PHP 8.2. However, when I attempted to set it up on my second Windows environment, with the same versions, it did not work.

I used the Dependency Walker tool from https://github.com/lucasg/Dependencies to identify any missing dependencies in the DLL files. Despite adding the missing dependencies, the setup still fails to work on the second environment.

Does anyone know if there is a requirment list of Windows DLL to make it work ?

andrey-helldar commented 1 week ago

I successfully added the library to my project to work on one of my Windows environments using WampServer and PHP 8.2. However, when I attempted to set it up on my second Windows environment, with the same versions, it did not work.

I used the Dependency Walker tool from https://github.com/lucasg/Dependencies to identify any missing dependencies in the DLL files. Despite adding the missing dependencies, the setup still fails to work on the second environment.

Does anyone know if there is a requirment list of Windows DLL to make it work ?

The latest version of this project was released on October 25, 2021. PHP 8.1 was released exactly one month later, on November 25.

I doubt that this project will correctly search for missing dependencies for PHP 8.1, 8.2 and 8.3.

Adham-A commented 1 week ago

I've looked around Google there are no good looking alternatives in PHP, I will try to dig into the project then