Skip to content

Fix GH-7781: CLI server prints HTML in startup warnings - #23269

Open
matthiasgoergens wants to merge 2 commits into
php:masterfrom
matthiasgoergens:gh7781-cli-server-html-errors
Open

matthiasgoergens wants to merge 2 commits into
php:masterfrom
matthiasgoergens:gh7781-cli-server-html-errors

Conversation

@matthiasgoergens

@matthiasgoergens matthiasgoergens commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Startup diagnostics of the built-in server were formatted as HTML because the CLI server keeps html_errors on for request handling and used the same setting before the listening socket existed. Suppress the displayed resolver warning around the listen call: its text is already repeated as the reason in the server's own "Failed to listen" message.

Fixes GH-7781.

Comment thread sapi/cli/php_cli_server.c Outdated
@@ -2907,7 +2870,12 @@ int do_cli_server(int argc, char **argv) /* {{{ */
router = argv[php_optind];
}

if (FAILURE == php_cli_server_ctor(&server, server_bind_address, document_root, router)) {
/* Startup diagnostics are written to a terminal, not an HTTP response. */
html_errors = PG(html_errors);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not acting on display_errors instead ? e.g.

     ...
     uint8_t display_errors = PG(display_errors);
     PG(display_errors) = 0;
     /// note: php_cli_server_ctor() reports its own failures through php_cli_server_logf()
     server_ctor_result = php_cli_server_ctor(&server, server_bind_address, document_root, router);
     PG(display_errors) = display_errors;
     ...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, that is cleaner. The resolver warning's text is exactly what php_cli_server_ctor() prints as the reason: of its "Failed to listen" message, so suppressing the displayed copy just drops the duplicate:

before:  Warning: Unknown: php_network_getaddresses: getaddrinfo for 0.0..0 failed: Name or service not known in Unknown on line 0
         [...] Failed to listen on 0.0..0:8080 (reason: php_network_getaddresses: getaddrinfo for 0.0..0 failed: Name or service not known)
after:   [...] Failed to listen on 0.0..0:8080 (reason: php_network_getaddresses: getaddrinfo for 0.0..0 failed: Name or service not known)

I put the display_errors toggle around php_network_listen_socket() rather than the whole constructor, so that worker startup (which can raise its own errors) is not covered. The existing error-logging behaviour is unchanged. The test now expects empty stdout and the reason on stderr.

A resolver failure raises a warning whose text php_cli_server_ctor()
repeats as the reason of its "Failed to listen" message. Turn
display_errors off around php_network_listen_socket() instead of
html_errors around the whole constructor, as suggested by David Carlier,
to avoid displaying the duplicate warning. Logging is unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in web server prints HTML tags in terminal when address is wrong

2 participants