wp-cli / config-command

Generates and reads the wp-config.php file.
MIT License
38 stars 36 forks source link

wp config get return 2048 with unquoted defined value #150

Closed FerronN closed 1 year ago

FerronN commented 1 year ago

Bug Report

Describe the current, buggy behavior

I have a wp-config.php file with the following defined:

define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );

when I run this command:

wp config get "MYSQL_CLIENT_FLAGS" I get 2048 returned. When I put single quotes around MYSQLI_CLIENT_SSL it returns the value as expected. I would expect the value to be returned without single quotes, because with them the setting doesn't work. The value was set with: wp config set "MYSQL_CLIENT_FLAGS" "MYSQLI_CLIENT_SSL" --raw.

I tried all format and type parameters but nothing works.

WP CLI 2.7

danielbachhuber commented 1 year ago

Thanks for the report, @FerronN !

I'm not 100% sure I understand the bug. Would you be able to put together a pull request with a failing Behat test?

Here is some guidance on our pull request best practices, if it's helpful.

ferronsw commented 1 year ago

@danielbachhuber Thank you! I've followed this guide. But vendor/bin/wp --info results in bash: vendor/bin/wp: No such file or directory. Am I missing something? Do you have a template for a behat test. I've no experience with it.

danielbachhuber commented 1 year ago

But vendor/bin/wp --info results in bash: vendor/bin/wp: No such file or directory. Am I missing something?

@FerronN From which path are you running the command?

This flow should work...

git clone git@github.com:wp-cli/wp-cli-dev.git
cd wp-cli-dev
composer install
./vendor/bin/wp

Do you have a template for a behat test. I've no experience with it.

The existing tests should be a good point of reference: https://github.com/wp-cli/config-command/tree/main/features

Feel free to stop by the #cli channel on WordPress.org Slack if you'd like help debugging further.

ferronsw commented 1 year ago

@danielbachhuber I executed the command from ~/wp-cli-dev.

After composer install:

Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Deprecation Notice: Using ${var} in strings is deprecated, use {$var} instead in /usr/share/php/Composer/DependencyResolver/Problem.php:366
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires PHP extension ext-dom * but it is missing from your system. Install or enable PHP's dom extension.
  Problem 2
    - Root composer.json requires wp-cli/wp-cli dev-main -> satisfiable by wp-cli/wp-cli[dev-main].
    - wp-cli/wp-cli[dev-main, 2.8.x-dev] require ext-curl * -> it is missing from your system. Install or enable PHP's curl extension.
  Problem 3
    - wp-cli/wp-cli[dev-main, 2.8.x-dev] require ext-curl * -> it is missing from your system. Install or enable PHP's curl extension.
    - wp-cli/wp-cli-bundle dev-main requires wp-cli/wp-cli dev-main -> satisfiable by wp-cli/wp-cli[dev-main].
    - Root composer.json requires wp-cli/wp-cli-bundle dev-main -> satisfiable by wp-cli/wp-cli-bundle[dev-main].

To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/8.2/cli/php.ini
    - /etc/php/8.2/cli/conf.d/10-opcache.ini
    - /etc/php/8.2/cli/conf.d/10-pdo.ini
    - /etc/php/8.2/cli/conf.d/20-calendar.ini
    - /etc/php/8.2/cli/conf.d/20-ctype.ini
    - /etc/php/8.2/cli/conf.d/20-exif.ini
    - /etc/php/8.2/cli/conf.d/20-ffi.ini
    - /etc/php/8.2/cli/conf.d/20-fileinfo.ini
    - /etc/php/8.2/cli/conf.d/20-ftp.ini
    - /etc/php/8.2/cli/conf.d/20-gettext.ini
    - /etc/php/8.2/cli/conf.d/20-iconv.ini
    - /etc/php/8.2/cli/conf.d/20-intl.ini
    - /etc/php/8.2/cli/conf.d/20-mbstring.ini
    - /etc/php/8.2/cli/conf.d/20-phar.ini
    - /etc/php/8.2/cli/conf.d/20-posix.ini
    - /etc/php/8.2/cli/conf.d/20-readline.ini
    - /etc/php/8.2/cli/conf.d/20-shmop.ini
    - /etc/php/8.2/cli/conf.d/20-sockets.ini
    - /etc/php/8.2/cli/conf.d/20-sysvmsg.ini
    - /etc/php/8.2/cli/conf.d/20-sysvsem.ini
    - /etc/php/8.2/cli/conf.d/20-sysvshm.ini
    - /etc/php/8.2/cli/conf.d/20-tokenizer.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-dom --ignore-platform-req=ext-curl --ignore-platform-req=ext-curl` to temporarily ignore these required extensions.
ferronsw commented 1 year ago

Fixed after running:

apt install php-curl php-xml

ferronsw commented 1 year ago

I've added the example.

mrsdizzie commented 1 year ago

I believe this happens because MYSQLI_CLIENT_SSL exists as an already defined constant with a value of 2048 that originates here:

https://github.com/php/php-src/blob/master/ext/mysqlnd/mysqlnd_enum_n_def.h#L91

and is set here:

https://github.com/php/php-src/blob/master/ext/mysqli/mysqli_arginfo.h#L1060

danielbachhuber commented 1 year ago

@mrsdizzie Great sleuthing! Thanks for looking into it 😊