[wp-trac] [WordPress Trac] #59757: Function wp_normalize_path() is causing a deprecated error when $path is null.

WordPress Trac noreply at wordpress.org
Thu Jan 11 22:18:14 UTC 2024


#59757: Function wp_normalize_path() is causing a deprecated error when $path is
null.
----------------------------+------------------------
 Reporter:  garymarkfuller  |       Owner:  (none)
     Type:  defect (bug)    |      Status:  closed
 Priority:  normal          |   Milestone:
Component:  General         |     Version:  6.3.2
 Severity:  normal          |  Resolution:  duplicate
 Keywords:  php81           |     Focuses:
----------------------------+------------------------
Changes (by sabernhardt):

 * status:  new => closed
 * resolution:   => duplicate
 * milestone:  Awaiting Review =>


Old description:

> The function wp_normalize_path() is causing the error below on my test
> environment:
>
> PHP Deprecated:  str_replace(): Passing null to parameter #3 ($subject)
> of type array|string is deprecated in /home/gary/bailey-head/wordpress
> /wp-includes/functions.php on line 2182
>
> Locally I altered the function to resolve the error as per the code
> below:
>

> {{{
> function wp_normalize_path( $path ) {
>         $wrapper = '';
>         if(!empty($path)) {
>                 if ( wp_is_stream( $path ) ) {
>                         list( $wrapper, $path ) = explode( '://', $path,
> 2 );
>
>                         $wrapper .= '://';
>                 }
>
>                 // Standardize all paths to use '/'.
>                 $path = str_replace( '\\', '/', $path );
>
>                 // Replace multiple slashes down to a singular, allowing
> for network shares having two slashes.
>                 $path = preg_replace( '|(?<=.)/+|', '/', $path );
>
>                 // Windows paths should uppercase the drive letter.
>                 if ( ':' === substr( $path, 1, 1 ) ) {
>                         $path = ucfirst( $path );
>                 }
>         }
>         return $wrapper . $path;
> }
> }}}

New description:

 The function `wp_normalize_path()` is causing the error below on my test
 environment:

 `PHP Deprecated:  str_replace(): Passing null to parameter #3 ($subject)
 of type array|string is deprecated in /.../wp-includes/functions.php on
 line 2182`

 Locally I altered the function to resolve the error as per the code below:


 {{{
 function wp_normalize_path( $path ) {
         $wrapper = '';
         if(!empty($path)) {
                 if ( wp_is_stream( $path ) ) {
                         list( $wrapper, $path ) = explode( '://', $path, 2
 );

                         $wrapper .= '://';
                 }

                 // Standardize all paths to use '/'.
                 $path = str_replace( '\\', '/', $path );

                 // Replace multiple slashes down to a singular, allowing
 for network shares having two slashes.
                 $path = preg_replace( '|(?<=.)/+|', '/', $path );

                 // Windows paths should uppercase the drive letter.
                 if ( ':' === substr( $path, 1, 1 ) ) {
                         $path = ucfirst( $path );
                 }
         }
         return $wrapper . $path;
 }
 }}}

--

Comment:

 #57580 (and #57581) had earlier reports about the deprecated warnings for
 `wp_normalize_path()` and `wp_is_stream()`.

 The four causes identified on #57580 were all plugins that had added
 `null` in the `add_submenu_page()` function. Those four plugins have been
 updated for newer PHP, but a
 [https://wpdirectory.net/search/01HHD6Z8T4Y1ACTKK68HJ5CNJJ directory
 search] still finds many plugins doing it wrong. The problem could also be
 somewhere else.

 If you identify the issue in a plugin, please report it to the plugin's
 author.

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


More information about the wp-trac mailing list