Add passthrough arguments to PHP binary via `--` separator
Enables passing arbitrary PHP flags when starting the development server. Addresses use cases like loading extensions or setting ini directives that vary across environments.
Changes
-
Command building: Positional arguments after
--are inserted before-Sflag and properly escaped viaUtils\esc_cmd() -
Documentation: Added
[<passthrough>...]parameter with Xdebug example -
Tests: Added Behat scenario verifying passthrough with
-dmemory_limit=256M
Usage
# Load extension
wp server -- -dzend_extension=xdebug.so
# Set ini directive
wp server -- -dmemory_limit=256M
# Multiple flags
wp server --docroot=public -- -dmemory_limit=256M -dzend_extension=xdebug.so
Final command structure: php [passthrough] -S host:port -t docroot -c config router.php
Fixes #89
[!WARNING]
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
https://api.github.com/repos/Behat/Behat/zipball/1b6b08efa995fe4135901b862d112adc7e95ecbb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/Behat/Gherkin/zipball/05a7459283e8e6af0d46ec25b8bb5960ca3cfa7b
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/8e89a01c7b8fed84a12a2a7f5a23a44cdbe4f62e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/8b8e17615d04f2fc2cd46fc1d2fd888fa21b3cf9
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/e9cf5e4bbf7eeaf9ef5db34938942602838fc2b1
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/ff4efdd80e094a81fd6329b570c9a632f21d42b4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/d2421de7cec3274ae622c22c744de9a62c7925af
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/134921bfca9b02d8f374c48381451da1d98402f9
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-parallel-lint/PHP-Console-Color/zipball/7adfefd530aa2d7570ba87100a99e2483a543b88
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/5b4803384d3303cf8e84141039ef56c8a123138d
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/abeb5a8b58fda7ac21f15ee596f302f2959a7114
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/f94d246cc143ec5a23da868f8f7e1393b50eaa82
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/72a6721c9b64b3e4c9db55abbc38f790b318267e
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b564ca479e7e735f750aaac4935af965572a7845
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a94ea4d26d865875803b23aaf78c3c2c670ea2ea
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/swissspidy/phpstan-no-private/zipball/f7a1890e350c8d8bf26370426a971d7490ae4245
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/dependency-injection/zipball/98af8bb46c56aedd9dd5a7f0414fc72bf2dcfe69
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/symfony/yaml/zipball/90208e2fc6f68f613eae7ca25a2458a931b1bacc
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/7f8cfe992faa96b6a33bbd75c7bace98864161e7
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/entity-command/zipball/896b7fb5ed51fe556017b2c71126947db5cd2b68
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/php-cli-tools/zipball/f12b650d3738e471baed6dd47982d53c5c0ab1c3
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/wp-cli-tests/zipball/75b660dddaa9f512d104d93da4a0a3ede1183a93
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)https://api.github.com/repos/wp-cli/wp-cli/zipball/ee4fb67b12eb904527bde1c4a0a4d6538a14681a
- Triggering command:
/usr/bin/php8.3 -n -c /tmp/QcSlrc /usr/bin/composer install --no-interaction(http block)If you need me to access, download, or install something from one of these locations, you can either:
- Configure Actions setup steps to set up my environment, which run before the firewall is enabled
- Add the appropriate URLs or hosts to the custom allowlist in this repository's Copilot coding agent settings (admins only)
Original prompt
This section details on the original issue you should resolve
<issue_title>Passthrough args via
--?</issue_title> <issue_description>## Feature Request
- [x] Yes, I reviewed the contribution guidelines.
Describe your use case and the problem you are facing
I want to load Xdebug module into the web server via
php -S -dzend_extension=xdebug.so.Describe the solution you'd like
wp servercould pass through additional arguments tophpafter--argument.Example:
wp server --docroot=public -- -dzend_extension=xdebug.soDoing this via
wp server --configargument is problematic, because I want to define universally usable commands centrally incomposer.jsonscripts. Due to variety of INI configuration file locations on user's system, which we actually don't want to replace, this doesn't seem to be achievable with a single--configargument.</issue_description>Comments on the Issue (you are @copilot in this section)
@schlessera Sounds like a reasonable use case.
- Fixes wp-cli/server-command#59
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.
Codecov Report
:x: Patch coverage is 0% with 15 lines in your changes missing coverage. Please review.
| Files with missing lines | Patch % | Lines |
|---|---|---|
| src/Server_Command.php | 0.00% | 15 Missing :warning: |
:loudspeaker: Thoughts on this report? Let us know!