[wp-trac] [WordPress Trac] #55656: PHP 8.x: various compatibility fixes for WordPress 6.1

WordPress Trac noreply at wordpress.org
Sat Oct 1 03:23:56 UTC 2022


#55656: PHP 8.x: various compatibility fixes for WordPress 6.1
-------------------------------------------------+-------------------------
 Reporter:  hellofromTonya                       |       Owner:
                                                 |  SergeyBiryukov
     Type:  task (blessed)                       |      Status:  accepted
 Priority:  normal                               |   Milestone:  6.1
Component:  General                              |     Version:
 Severity:  normal                               |  Resolution:
 Keywords:  php8 php81 has-patch has-unit-tests  |     Focuses:  coding-
                                                 |  standards
-------------------------------------------------+-------------------------

Comment (by SergeyBiryukov):

 In [changeset:"54364" 54364]:
 {{{
 #!CommitTicketReference repository="" revision="54364"
 Code Modernization: Check the return type of `parse_url()` in
 `url_to_postid()`.

 As per the PHP manual:
 > If the `component` parameter is omitted, an associative array is
 returned.
 > If the `component` parameter is specified, `parse_url()` returns a
 string (or an int, in the case of `PHP_URL_PORT`) instead of an array. If
 the requested component doesn't exist within the given URL, `null` will be
 returned.

 Reference: [https://www.php.net/manual/en/function.parse-
 url.php#refsect1-function.parse-url-returnvalues PHP Manual: parse_url():
 Return Values]

 In this case, `parse_url()` is called with `PHP_URL_HOST` as `$component`,
 which returns `null` if the URL only has a path. The return value of
 `parse_url()` was then passed to `str_replace()`, leading to a notice on
 PHP 8.1:
 {{{
 str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated
 }}}

 Adding validation for the return type value of `parse_url()` prevents
 that.

 This commit addresses a few errors in the test suite along the lines of:
 {{{
 5) Tests_Rewrite::test_url_to_postid_home_has_path
 str_replace(): Passing null to parameter #3 ($subject) of type
 array|string is deprecated

 /var/www/src/wp-includes/rewrite.php:503
 /var/www/tests/phpunit/tests/rewrite.php:271
 /var/www/vendor/bin/phpunit:123
 }}}

 Includes adding a dedicated unit test for a URL that only has a path.

 Follow-up to [41786], [51606], [51622], [51626], [51629], [51630],
 [52799].

 Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
 See #55656.
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/55656#comment:62>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list